Consulta de Amazon S3 Inventory con Amazon Athena - Amazon Simple Storage Service

Consulta de Amazon S3 Inventory con Amazon Athena

Puede consultar Amazon S3 Inventory mediante SQL estándar utilizando Amazon Athena en todas las regiones donde Athena está disponible. Para verificar la disponibilidad de la Región de AWS, consulte la Tabla de Región de AWS.

Athena puede consultar archivos de Amazon S3 Inventory en formato ORC, Parquet o CSV. Cuando se utiliza Athena para consultar el inventario, es recomendable que se usen archivos de inventario con formato ORC o Parquet. Los formatos ORC y Parquet proporcionan mayor velocidad y menores costos de las consultas. ORC y Parquet son formatos de archivo ordenados en columnas autodescriptivos y con reconocimiento de tipos diseñados para Apache Hadoop. El formato en columnas permite al lector leer, descomprimir y procesar solo las columnas necesarias para la consulta actual. Los formatos ORC y Parquet de Amazon S3 Inventory están disponibles en todas las Regiones de AWS.

Para empezar a utilizar Athena para consultar Amazon S3 Inventory

  1. Crear una tabla de Athena. Para obtener información sobre cómo crear una tabla, consulte Creación de tablas en Amazon Athena en la guía del usuario de Amazon Athena.

    La siguiente consulta de ejemplo incluye todos los campos opcionales del informe de inventario en formato ORC. Elimine todos los campos opcionales que no haya seleccionado para su inventario para que la consulta se corresponda con los campos seleccionados para su inventario. Además, debe utilizar el nombre y la ubicación del bucket en la ruta de destino del inventario. Reemplace el siguiente nombre de bucket y la ubicación de inventario según corresponda a su configuración: s3://destination-prefix/DOC-EXAMPLE-BUCKET/config-ID/hive/. También debe sustituir la fecha inicial en projection.dt.range por el primer día con datos.

    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 bigint, 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 ) 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://destination-prefix/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" = "DAYS" );

    Si utiliza Athena para consultar un informe de inventario con formato Parquet, use el siguiente SerDe de Parquet en lugar del SerDe de ORC en la instrucción ROW FORMAT SERDE.

    ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'

    Si utiliza Athena para consultar un informe de inventario con formato CSV, use la siguiente plantilla.

    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 ) 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://destination-prefix/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" = "DAYS" );
  2. Después de realizar este paso, puede ejecutar consultas ad hoc en su inventario, tal y como se muestra en los siguientes ejemplos.

    # Get list of latest inventory report dates available SELECT DISTINCT dt FROM your_table_name ORDER BY 1 DESC limit 10; # Get 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 encryption status for 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;

Para obtener más información sobre el uso de Athena, consulte la guía del usuario de Amazon Athena.

A continuación, se indican las operaciones REST que se utilizan para Amazon S3 Inventory.