Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Interrogation d’un inventaire Amazon S3 avec Amazon Athena

Mode de mise au point
Interrogation d’un inventaire Amazon S3 avec Amazon Athena - Amazon Simple Storage Service

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.

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.

Vous pouvez interroger les fichiers de l’inventaire Amazon S3 en utilisant des requêtes SQL standard à l’aide d’Amazon Athena dans toutes les Régions où Athena est disponible. Pour vérifier Région AWS la disponibilité, consultez le Région AWS tableau.

Athena peut interroger les fichiers d'inventaire Amazon S3 dans Apache colonne de lignes optimisée (ORC), Apache Parquet, ou au format CSV (valeurs séparées par des virgules). Lorsque vous utilisez Athena pour interroger des fichiers d'inventaire, nous vous recommandons d'utiliser le format ORC ou Parquet-fichiers d'inventaire formatés. L'ORC et Parquet les formats permettent d'accélérer les performances des requêtes et de réduire les coûts des requêtes. ORC et Parquet sont des formats de fichiers en colonnes autodescriptifs et sensibles au type conçus pour Apache Hadoop. Le format en colonnes permet au lecteur de lire, de décompresser et de traiter uniquement les colonnes requises pour la requête en cours. L'ORC et Parquet les formats pour Amazon S3 Inventory sont disponibles dans tous les formats Régions AWS.

Pour utiliser Athena pour interroger les fichiers d’inventaire Amazon S3
  1. Créez une table Athéna. Pour de plus amples informations sur la création d’une table, consultez Création de tables dans Athena dans le Guide de l’utilisateur Amazon Athena.

  2. Créez votre requête à l’aide de l’un des exemples de modèles de requête suivants, selon que vous interrogez un rapport d’inventaire au format ORC, Parquet ou CSV.

    • Lorsque vous utilisez Athena pour interroger un rapport d’inventaire au format CSV, utilisez l’exemple de requête suivant en tant que modèle.

      L’exemple de requête suivant comprend tous les champs facultatifs dans le rapport d’inventaire au format ORC.

      Pour utiliser cet exemple de requête, procédez comme suit :

      • Remplacez your_table_name par le nom de la table Athena que vous avez créée.

      • Supprimez les champs facultatifs que vous n’avez pas choisis pour votre inventaire afin que la requête corresponde aux champs sélectionnés pour celui-ci.

      • Remplacez le nom de compartiment et l’emplacement d’inventaire (l’ID de configuration) suivants en fonction de votre configuration.

        s3://amzn-s3-demo-bucket/config-ID/hive/

      • Remplacez la date 2022-01-01-00-00 sous projection.dt.range par le premier jour de la plage horaire au cours de laquelle vous partitionnez les données dans Athena. Pour plus d’informations, consultez Partitionnement de données dans Athena.

      CREATE EXTERNAL TABLE your_table_name( bucket string, key string, version_id string, is_latest boolean, is_delete_marker boolean, size bigint, last_modified_date timestamp, e_tag string, storage_class string, is_multipart_uploaded boolean, replication_status string, encryption_status string, object_lock_retain_until_date bigint, object_lock_mode string, object_lock_legal_hold_status string, intelligent_tiering_access_tier string, bucket_key_status string, checksum_algorithm string, object_access_control_list string, object_owner string ) PARTITIONED BY ( dt string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION 's3://source-bucket/config-ID/hive/' TBLPROPERTIES ( "projection.enabled" = "true", "projection.dt.type" = "date", "projection.dt.format" = "yyyy-MM-dd-HH-mm", "projection.dt.range" = "2022-01-01-00-00,NOW", "projection.dt.interval" = "1", "projection.dt.interval.unit" = "HOURS" );
    • Lorsque vous utilisez Athéna pour interroger un Parquet-rapport d'inventaire formaté, utilisez l'exemple de requête pour un rapport au format ORC. Toutefois, utilisez ce qui suit Parquet SerDe à la place de l'ORC SerDe dans le ROW FORMAT SERDE communiqué.

      ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
    • Lorsque vous utilisez Athena pour interroger un rapport d’inventaire au format CSV, utilisez l’exemple de requête suivant en tant que modèle.

      L’exemple de requête suivant comprend tous les champs facultatifs dans le rapport d’inventaire au format CSV.

      Pour utiliser cet exemple de requête, procédez comme suit :

      • Remplacez your_table_name par le nom de la table Athena que vous avez créée.

      • Supprimez les champs facultatifs que vous n’avez pas choisis pour votre inventaire afin que la requête corresponde aux champs sélectionnés pour celui-ci.

      • Remplacez le nom de compartiment et l’emplacement d’inventaire (l’ID de configuration) suivants en fonction de votre configuration.

        s3://amzn-s3-demo-bucket/config-ID/hive/

      • Remplacez la date 2022-01-01-00-00 sous projection.dt.range par le premier jour de la plage horaire au cours de laquelle vous partitionnez les données dans Athena. Pour plus d'informations, consultez Partitionnement de données dans Athena.

      CREATE EXTERNAL TABLE your_table_name( bucket string, key string, version_id string, is_latest boolean, is_delete_marker boolean, size string, last_modified_date string, e_tag string, storage_class string, is_multipart_uploaded boolean, replication_status string, encryption_status string, object_lock_retain_until_date string, object_lock_mode string, object_lock_legal_hold_status string, intelligent_tiering_access_tier string, bucket_key_status string, checksum_algorithm string, object_access_control_list string, object_owner string ) PARTITIONED BY ( dt string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION 's3://source-bucket/config-ID/hive/' TBLPROPERTIES ( "projection.enabled" = "true", "projection.dt.type" = "date", "projection.dt.format" = "yyyy-MM-dd-HH-mm", "projection.dt.range" = "2022-01-01-00-00,NOW", "projection.dt.interval" = "1", "projection.dt.interval.unit" = "HOURS" );
  3. Vous pouvez désormais exécuter différentes requêtes sur votre inventaire, comme le montrent les exemples suivants. Remplacez chaque user input placeholder par vos propres informations.

    # Get a list of the latest inventory report dates available. SELECT DISTINCT dt FROM your_table_name ORDER BY 1 DESC limit 10; # Get the encryption status for a provided report date. SELECT encryption_status, count(*) FROM your_table_name WHERE dt = 'YYYY-MM-DD-HH-MM' GROUP BY encryption_status; # Get the encryption status for inventory report dates in the provided range. SELECT dt, encryption_status, count(*) FROM your_table_name WHERE dt > 'YYYY-MM-DD-HH-MM' AND dt < 'YYYY-MM-DD-HH-MM' GROUP BY dt, encryption_status;

    Lorsque vous configurez l’inventaire S3 pour ajouter le champ Liste de contrôle d’accès d’objet (Liste ACL d’objet) à un rapport d’inventaire, le rapport affiche la valeur du champ Liste ACL d’objet sous la forme d’une chaîne codée en base64. Pour obtenir la valeur décodée au format JSON pour le champ Liste ACL d’objet, vous pouvez interroger ce champ avec Athena. Consultez les exemples de requête suivants. Pour plus d’informations sur le champ Liste ACL d’objet, consultez Utiliser le champ Liste ACL d’objet.

    # Get the S3 keys that have Object ACL grants with public access. WITH grants AS ( SELECT key, CAST( json_extract(from_utf8(from_base64(object_access_control_list)), '$.grants') AS ARRAY(MAP(VARCHAR, VARCHAR)) ) AS grants_array FROM your_table_name ) SELECT key, grants_array, grant FROM grants, UNNEST(grants_array) AS t(grant) WHERE element_at(grant, 'uri') = 'http://acs.amazonaws.com/groups/global/AllUsers'
    # Get the S3 keys that have Object ACL grantees in addition to the object owner. WITH grants AS (SELECT key, from_utf8(from_base64(object_access_control_list)) AS object_access_control_list, object_owner, CAST(json_extract(from_utf8(from_base64(object_access_control_list)), '$.grants') AS ARRAY(MAP(VARCHAR, VARCHAR))) AS grants_array FROM your_table_name) SELECT key, grant, objectowner FROM grants, UNNEST(grants_array) AS t(grant) WHERE cardinality(grants_array) > 1 AND element_at(grant, 'canonicalId') != object_owner;
    # Get the S3 keys with READ permission that is granted in the Object ACL. WITH grants AS ( SELECT key, CAST( json_extract(from_utf8(from_base64(object_access_control_list)), '$.grants') AS ARRAY(MAP(VARCHAR, VARCHAR)) ) AS grants_array FROM your_table_name ) SELECT key, grants_array, grant FROM grants, UNNEST(grants_array) AS t(grant) WHERE element_at(grant, 'permission') = 'READ';
    # Get the S3 keys that have Object ACL grants to a specific canonical user ID. WITH grants AS ( SELECT key, CAST( json_extract(from_utf8(from_base64(object_access_control_list)), '$.grants') AS ARRAY(MAP(VARCHAR, VARCHAR)) ) AS grants_array FROM your_table_name ) SELECT key, grants_array, grant FROM grants, UNNEST(grants_array) AS t(grant) WHERE element_at(grant, 'canonicalId') = 'user-canonical-id';
    # Get the number of grantees on the Object ACL. SELECT key, object_access_control_list, json_array_length(json_extract(object_access_control_list,'$.grants')) AS grants_count FROM your_table_name;

Pour plus d’informations sur l’utilisation d’Athena, consultez le Guide de l’utilisateur Amazon Athena.

ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.