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),
Pour utiliser Athena pour interroger les fichiers d’inventaire Amazon S3
-
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.
-
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
par le nom de la table Athena que vous avez créée.your_table_name
-
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
sous2022-01-01-00-00
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
par le nom de la table Athena que vous avez créée.your_table_name
-
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
sous2022-01-01-00-00
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" ); -
-
-
Vous pouvez désormais exécuter différentes requêtes sur votre inventaire, comme le montrent les exemples suivants. Remplacez chaque
par vos propres informations.user input placeholder
# 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(*) FROMyour_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(*) FROMyour_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.