我知道运行已保存的Athena查询会根据查询名称和查询运行日期将结果存储在Amazon S3位置,如下所示:
QueryLocation} / {QueryName |保存} / {YYYY} / {毫米} / {DD} / {QueryID} /
是否可以覆盖它并将其存储在类似于
的路径上QueryLocation} / QueryName
在运行查询时覆盖结果文件?
当然可以通过在S3上重命名(移动+删除)文件来完成,但想知道是否有更直接的方式。
答案 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)