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

时间:2017-11-23 06:44:34

标签: amazon-web-services amazon-s3 amazon-athena

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

  

QueryLocation} / {QueryName |保存} / {YYYY} / {毫米} / {DD} / {QueryID} /

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

的路径上
  

QueryLocation} / QueryName

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

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

3 个答案:

答案 0 :(得分:1)

无法设置输出位置,只能设置前缀。雅典娜将始终使用查询执行ID作为S3键的最后一部分,即可以认为是文件名。原因之一是GetQueryResults API调用从S3读取数据,并且如果查询可以覆盖彼此的输出,则状态将不一致。

答案 1 :(得分:1)

创建表为选择

将Athena查询结果存储在S3中特定位置的另一种方法是使用CTAS-Query(创建表为SELECT )。

使用它有很多优点,因为您甚至可以指定结果格式。压缩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 ....

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

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 ....

答案 2 :(得分:0)

好问题,

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

enter image description here

但是,所有这一切都是在您指定的“文件夹”中创建一系列标记为{QueryName} / {yyyy} / {mm} / {dd} / {QueryID} /的标记。