Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Abfragen von Amazon S3 Inventory mit Amazon Athena
Sie können Dateien aus Amazon S3 Inventory mit Standard-SQL-Abfragen abfragen, indem Sie Amazon Athena in allen Regionen verwenden, in denen Athena verfügbar ist. Informationen zur AWS-Region Verfügbarkeit finden Sie in der AWS-Region Tabelle
Athena kann Amazon S3 S3-Inventardateien abfragen in Apache optimierte Zeilenspaltenweise (ORC),
So fragen Sie Amazon-S3-Inventory-Dateien mit Athena ab
-
Erstellen Sie eine Athena-Tabelle. Informationen zum Erstellen einer Tabelle finden Sie unter Erstellen von Tabellen in Amazon Athena im Amazon Athena-Benutzerhandbuch.
-
Erstellen Sie Ihre Abfrage mithilfe einer der folgenden Beispielabfragevorlagen, je nachdem, ob Sie einen ORC-formatierten, einen Parquet-formatierten oder einen CSV-formatierten Bestandsbericht abfragen.
-
Bei Verwendung von Athena für die Abfrage eines ORC-formatierten Bestandsberichts verwenden Sie die folgende Beispielabfrage als Vorlage.
Die folgende Beispielabfrage umfasst alle optionalen Felder in einem nach ORC formatierten Bestandsbericht.
Gehen Sie wie folgt vor, um diese Beispielabfrage zu verwenden:
-
Ersetzen Sie
durch den Namen der Athena-Tabelle, die Sie erstellt haben.your_table_name
-
Entfernen Sie alle optionalen Felder, die Sie für Ihren Bestand nicht ausgewählt haben, sodass die Abfrage den für Ihren Bestand gewählten Feldern entspricht.
-
Ersetzen Sie den folgenden Bucket-Namen und den Bestandsort (die Konfigurations-ID) entsprechend Ihrer Konfiguration.
s3://
amzn-s3-demo-bucket
/config-ID
/hive/ -
Ersetzen Sie das Datum
unter2022-01-01-00-00
projection.dt.range
mit dem ersten Tag des Zeitbereichs, innerhalb dessen Sie die Daten in Athena partitionieren. Weitere Informationen finden Sie unter Partitionieren von Daten in 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" ); -
-
Wenn Sie Athena verwenden, um eine abzufragen Parquet-formatierter Inventarbericht: Verwenden Sie die Beispielabfrage für einen Bericht im ORC-Format. Verwenden Sie jedoch Folgendes Parquet SerDe anstelle des ORC SerDe in der
ROW FORMAT SERDE
Erklärung.ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
-
Bei Verwendung von Athena für die Abfrage eines CSV-formatierten Bestandsberichts verwenden Sie die folgende Beispielabfrage als Vorlage.
Die folgende Beispielabfrage umfasst alle optionalen Felder in einem nach CSV formatierten Bestandsbericht.
Gehen Sie wie folgt vor, um diese Beispielabfrage zu verwenden:
-
Ersetzen Sie
durch den Namen der Athena-Tabelle, die Sie erstellt haben.your_table_name
-
Entfernen Sie alle optionalen Felder, die Sie für Ihren Bestand nicht ausgewählt haben, sodass die Abfrage den für Ihren Bestand gewählten Feldern entspricht.
-
Ersetzen Sie den folgenden Bucket-Namen und den Bestandsort (die Konfigurations-ID) entsprechend Ihrer Konfiguration.
s3://
amzn-s3-demo-bucket
/config-ID
/hive/ -
Ersetzen Sie das Datum
unter2022-01-01-00-00
projection.dt.range
mit dem ersten Tag des Zeitbereichs, innerhalb dessen Sie die Daten in Athena partitionieren. Weitere Informationen finden Sie unter Partitionieren von Daten in 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" ); -
-
-
Sie können jetzt verschiedene Bestandsabfragen ausführen, wie in den folgenden Beispielen gezeigt. Ersetzen Sie jeden
durch Ihre Informationen.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;Wenn Sie S3 Inventory so konfigurieren, dass das Feld „Objekt-Zugriffssteuerungsliste (ACL)“ zu einem Bestandsbericht hinzugefügt wird, zeigt der Bericht den Wert für das Feld „Objekt-ACL“ als Base64-codierte Zeichenfolge an. Um für das Feld „Objekt-ACL“ den dekodierten Wert in JSON abzurufen, können Sie dieses Feld mit Athena abfragen. Sehen Sie sich die folgenden Abfragebeispiele an. Weitere Informationen zum Feld „Objekt-ACL“ erhalten Sie unter Arbeiten mit dem Feld „Objekt-ACL“.
# 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
;
Weitere Informationen zur Verwendung von Athena finden Sie im Amazon Athena-Benutzerhandbuch.