Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Interroger les données de S3 Storage Lens à l'aide d'outils d'analyse
Avant de pouvoir interroger les données S3 Storage Lens exportées vers des tables S3 à l'aide de services AWS d'analyse tels qu'Amazon Athena ou Amazon EMR, vous devez activer l'intégration des analyses sur le compartiment de tables « aws-s3 » AWS géré et configurer les autorisations. AWS Lake Formation
Important
L'activation de l'intégration des analyses dans le compartiment de tables « aws-s3 » est une étape obligatoire qui est souvent oubliée. Sans cette configuration, vous ne pourrez pas interroger vos tables S3 Storage Lens à l'aide de services AWS d'analyse.
Conditions préalables
Avant de commencer, assurez-vous que vous disposez des éléments suivants :
-
Configuration S3 Storage Lens avec exportation de tables S3 activée. Pour plus d’informations, consultez Exportation des métriques S3 Storage Lens vers des tables S3.
-
Accès à Amazon Athena ou à un autre service d'analyse.
-
J'ai attendu 24 à 48 heures après avoir activé l'exportation pour que les premières données soient disponibles.
Présentation de l’intégration
Pour obtenir des informations détaillées sur l'intégration des tables S3 aux services AWS d'analyse, notamment les prérequis, la configuration des rôles IAM et les procédures étape par étape, consultez la section Intégration des tables Amazon S3 aux services AWS d'analyse.
Après avoir activé l'exportation des tables S3 et configuré l'intégration des analyses, vous pouvez interroger vos données S3 Storage Lens à l'aide de services AWS d'analyse tels qu'Amazon Athena, Amazon Redshift et Amazon EMR. Cela vous permet d'effectuer des analyses personnalisées, de créer des tableaux de bord et d'obtenir des informations à partir de vos données de stockage à l'aide du langage SQL standard.
Effectuer des requêtes avec Amazon Athena
Amazon Athena est un service de requête interactif sans serveur qui facilite l'analyse des données à l'aide du langage SQL standard. Procédez comme suit pour interroger les données S3 Storage Lens dans Athena.
Note
Dans tous les exemples de requêtes, remplacez lens_my-config_exp par votre espace de noms de configuration Storage Lens actuel. Pour plus d'informations sur la dénomination des espaces de noms, consultezDénomination des tables pour l'exportation de S3 Storage Lens vers S3 Tables.
Exemple : interrogez les principaux consommateurs de stockage
La requête suivante identifie les 10 principaux compartiments en termes de consommation de stockage :
SELECT bucket_name, storage_class, SUM(storage_bytes) / POWER(1024, 3) AS storage_gb, SUM(object_count) AS objects FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."default_storage_metrics" WHERE report_time = ( SELECT MAX(report_time) FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."default_storage_metrics" ) AND record_type = 'BUCKET' AND bucket_name != '' GROUP BY bucket_name, storage_class ORDER BY storage_gb DESC LIMIT 10
Exemple : analyse de la croissance du stockage au fil du temps
La requête suivante analyse la croissance du stockage au cours des 30 derniers jours :
SELECT CAST(report_time AS date) AS report_date, SUM(storage_bytes) / POWER(1024, 3) AS total_storage_gb FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."default_storage_metrics" WHERE report_time >= current_date - interval '30' day AND record_type = 'ACCOUNT' GROUP BY CAST(report_time AS date) ORDER BY report_date DESC;
Exemple : identifier les chargements partitionnés incomplets
La requête suivante permet de trouver des compartiments contenant des téléchargements partitionnés incomplets datant de plus de 7 jours :
SELECT bucket_name, SUM(incomplete_mpu_storage_older_than_7_days_bytes) / POWER(1024, 3) AS wasted_storage_gb, SUM(incomplete_mpu_object_older_than_7_days_count) AS wasted_objects FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."default_storage_metrics" WHERE report_time = ( SELECT MAX(report_time) FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."default_storage_metrics" ) AND record_type = 'BUCKET' AND incomplete_mpu_storage_older_than_7_days_bytes > 0 GROUP BY bucket_name ORDER BY wasted_storage_gb DESC;
Exemple : trouver des candidats pour les données froides
La requête suivante identifie les préfixes qui n'ont pas été actifs au cours des 100 derniers jours et qui sont stockés dans des niveaux de stockage à chaud :
WITH recent_activity AS ( SELECT DISTINCT bucket_name, record_value AS prefix_path FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."expanded_prefixes_activity_metrics" WHERE report_time >= current_date - interval '100' day AND record_type = 'PREFIX' AND all_request_count > 0 ) SELECT s.bucket_name, s.record_value AS prefix_path, s.storage_class, SUM(s.storage_bytes) / POWER(1024, 3) AS storage_gb FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."expanded_prefixes_storage_metrics" s LEFT JOIN recent_activity r ON s.bucket_name = r.bucket_name AND s.record_value = r.prefix_path WHERE s.report_time = ( SELECT MAX(report_time) FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."expanded_prefixes_storage_metrics" ) AND s.record_type = 'PREFIX' AND s.storage_class IN ('STANDARD', 'REDUCED_REDUNDANCY') AND s.storage_bytes > 1073741824 -- > 1GB AND r.prefix_path IS NULL -- No recent activity GROUP BY s.bucket_name, s.record_value, s.storage_class ORDER BY storage_gb DESC LIMIT 20;
Exemple : analyse des modèles de demandes
La requête suivante analyse les modèles de demandes pour comprendre la fréquence d'accès :
SELECT bucket_name, SUM(all_request_count) AS total_requests, SUM(get_request_count) AS get_requests, SUM(put_request_count) AS put_requests, ROUND(100.0 * SUM(get_request_count) / NULLIF(SUM(all_request_count), 0), 2) AS get_percentage, SUM(downloaded_bytes) / POWER(1024, 3) AS downloaded_gb FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."default_activity_metrics" WHERE report_time >= current_date - interval '7' day AND record_type = 'BUCKET' AND bucket_name != '' GROUP BY bucket_name HAVING SUM(all_request_count) > 0 ORDER BY total_requests DESC LIMIT 10;
Effectuer des requêtes avec Apache Spark sur Amazon EMR
Amazon EMR fournit un framework Hadoop géré qui facilite le traitement de grandes quantités de données à l'aide d'Apache Spark. Vous pouvez utiliser le connecteur Iceberg pour lire directement les tableaux S3 Storage Lens.
Lire les tableaux S3 avec Spark
Utilisez le code Python suivant pour lire les données S3 Storage Lens avec Spark :
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("S3StorageLensAnalysis") \ .config("spark.sql.catalog.s3tablescatalog", "org.apache.iceberg.spark.SparkCatalog") \ .config("spark.sql.catalog.s3tablescatalog.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \ .getOrCreate() # Read S3 Storage Lens data df = spark.read \ .format("iceberg") \ .load("s3tablescatalog/aws-s3.lens_my-config_exp.default_storage_metrics") # Analyze data df.filter("record_type = 'BUCKET'") \ .groupBy("bucket_name", "storage_class") \ .sum("storage_bytes") \ .orderBy("sum(storage_bytes)", ascending=False) \ .show(10)
Meilleures pratiques en matière d'optimisation des requêtes
Suivez ces bonnes pratiques pour optimiser les performances des requêtes et réduire les coûts :
-
Filtrer par report_time — Incluez toujours des filtres de date pour réduire la quantité de données numérisées. Ceci est particulièrement important pour les tables dont les périodes de conservation sont longues.
WHERE report_time >= current_date - interval '7' day -
Utilisez les filtres record_type : spécifiez le niveau d'agrégation approprié (ACCOUNT, BUCKET, PREFIX) pour interroger uniquement les données dont vous avez besoin.
WHERE record_type = 'BUCKET' -
Incluez des clauses LIMIT : utilisez LIMIT pour les requêtes exploratoires afin de contrôler la taille des résultats et de réduire les coûts des requêtes.
LIMIT 100 -
Filtrer les enregistrements vides — Utilisez des conditions pour exclure les enregistrements vides ou à valeur nulle.
WHERE storage_bytes > 0 -
Utilisez les données les plus récentes : lors de l'analyse de l'état actuel, filtrez en fonction du dernier report_time afin d'éviter de scanner les données historiques.
WHERE report_time = (SELECT MAX(report_time) FROM table_name)
Exemple de modèle de requête optimisé
La requête suivante présente les meilleures pratiques d'optimisation :
SELECT bucket_name, SUM(storage_bytes) / POWER(1024, 3) AS storage_gb FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."default_storage_metrics" WHERE report_time >= current_date - interval '7' day -- Date filter AND record_type = 'BUCKET' -- Record type filter AND storage_bytes > 0 -- Non-empty filter AND bucket_name != '' -- Non-empty filter GROUP BY bucket_name ORDER BY storage_gb DESC LIMIT 100; -- Result limit
Résolution des problèmes
La requête ne renvoie aucun résultat
Problème : votre requête se termine correctement mais ne renvoie aucun résultat.
Solution :
-
Vérifiez que les données sont disponibles en consultant le dernier report_time :
SELECT MAX(report_time) AS latest_data FROM "s3tablescatalog/aws-s3"."lens_my-config_exp"."default_storage_metrics"; -
Assurez-vous que vous utilisez le nom d'espace de noms correct. Utilisez-le
SHOW TABLES IN `lens_my-config_exp`;pour répertorier les tables disponibles. -
Attendez 24 à 48 heures après avoir activé l'exportation des tables S3 pour que les premières données soient disponibles.
Erreurs d’accès refusé
Problème : vous recevez des erreurs d'accès refusé lors de l'exécution de requêtes.
Solution : vérifiez que AWS Lake Formation les autorisations sont correctement configurées. Pour plus d'informations, consultez la section Intégration des tables Amazon S3 aux services AWS d'analyse.
Étapes suivantes
-
En savoir plus sur Utilisation d'assistants intelligents avec les tables S3 Storage Lens
-
Consultez les définitions Glossaire des métriques Amazon S3 Storage Lens des quatre métriques
-
Explorez Cas d’utilisation des métriques Amazon S3 Storage Lens pour découvrir d'autres idées d'analyse
-
En savoir plus sur Amazon Athena pour les requêtes sans serveur