S3 上特定路径的 Athena 查询结果

sib*_*ane 9 amazon-s3 amazon-web-services amazon-athena

我知道运行已保存的 Athena 查询会根据查询名称和查询运行日期将结果存储在 Amazon S3 位置,如下所示:

QueryLocation}/{QueryName|Saved}/{yyyy}/{mm}/{dd}/{QueryID}/

是否可以覆盖它并将其存储在类似于

查询位置}/查询名称

每当运行查询时覆盖结果文件?

当然可以通过在 S3 上重命名(移动 + 删除)文件来完成,但想知道是否有更直接的方法。

H6.*_*H6. 7

创建表作为选择

在 S3 中的特定位置存储 Athena 查询结果的另一种方法是使用CTAS -Query ( CREATE TABLE AS SELECT )。

使用它有很多好处,因为您甚至可以指定结果格式。Gzip 压缩的 JSON、Parquet 等...

CREATE TABLE default.my_result_table
WITH 
(
  format='JSON',
  external_location='s3://MY_BUCKET/MY_KEY/...'
) AS

SELECT * FROM MY_SOURCE_TABLE WHERE ....
Run Code Online (Sandbox Code Playgroud)

您甚至可以直接指定要使用的分区(例如

CREATE TABLE default.my_result_table
WITH 
(
  format='Parquet',
  external_location='s3://MY_BUCKET/MY_KEY/...',
  partitioned_by = ARRAY['parition_key_1', ...]
) AS

SELECT * FROM MY_SOURCE_TABLE WHERE ....
Run Code Online (Sandbox Code Playgroud)

  • 如何为已经创建的表存储更多分区。如果我重复此操作,它将抛出错误“该表已存在”。如何使用 Athena 界面添加更多分区数据。 (3认同)

Zer*_*odf 2

好问题,

如果您从 Web 控制台运行查询,则可以设置QueryLocation

在此输入图像描述

但是,要做的就是在您指定的“文件夹”中创建一系列格式为 {QueryName}/{yyyy}/{mm}/{dd}/{QueryID}/ 的标记。