使用 Amazon Athena 查询 Amazon S3 清单 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 Amazon Athena 查询 Amazon S3 清单

您可以在 Athena 可用的所有区域通过 Amazon Athena,使用标准 SQL 来查询 Amazon S3 清单。要检查 Amazon Web Services 区域 可用性,请参阅 Amazon Web Services 区域 表

Athena 可以查询 ORC、Parquet 或 CSV 格式的 Amazon S3 清单文件。当您使用 Athena 查询清单时,我们建议您使用 ORC 格式或 Parquet 格式的清单文件。ORC 和 Parquet 格式提供了更快的查询性能并能够降低查询成本。ORC 和 Parquet 是自我描述、可感知类型的列式文件格式,专为 Apache Hadoop 而设计。列式格式允许读取器仅读取、解压缩并处理当前查询所需的列。所有 Amazon Web Services 区域 均提供 ORC 和 Parquet 格式的 Amazon S3 清单。

开始使用 Athena 查询 Amazon S3 清单

  1. 创建 Athena 表。有关创建表的信息,请参阅《Amazon Athena 用户指南》中的在 Amazon Athena 中创建表

    下面的示例查询在 ORC 格式的清单报告中包含所有可选字段。删除您的清单没有选择的所有可选字段,以便查询对应于您的清单的选定字段。而且,您必须使用您的存储桶名称和位置指向清单的目标路径。根据您的配置替换以下存储桶名称和清单位置:s3://destination-prefix/DOC-EXAMPLE-BUCKET/config-ID/hive/

    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 ) 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/';

    在使用 Athena 查询 Parquet 格式的清单报告时,请在 ROW FORMAT SERDE 语句中使用以下 Parquet SerDe 代替 ORC SerDe。

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

    在使用 Athena 查询 CSV 格式的清单报告时,请在 ROW FORMAT SERDE 语句中使用以下 CSV SerDe 代替 ORC SerDe。

    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
  2. 要向表中添加新的清单列表,请使用以下 MSCK REPAIR TABLE 命令。

    MSCK REPAIR TABLE your-table-name;
  3. 在执行前两个步骤后,您可以对自己的清单运行即席查询,如以下示例中所示。

    # 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;

有关使用 Athena 的更多信息,请参阅 Amazon Athena 用户指南

下面是用于 Amazon S3 清单的 REST 操作。