【问题标题】:How to modify CTAS query to append query results to table based on if new partition doesn't exist? - Athena如果新分区不存在,如何修改 CTAS 查询以将查询结果附加到表中? - 雅典娜
【发布时间】:2021-10-04 18:24:22
【问题描述】:

我有一个要每天执行的查询,该查询将按执行日期进行分区。此查询的结果应附加到同一个表中。

我的想法是最好有类似于CREATE TABLE IF NOT EXISTS 命令的东西能够将其集成到我的查询中。

我的查询:

CREATE TABLE IF NOT EXISTS db_name.table_name
WITH (
   external_location = 's3://my-query-results-location/',
   format = 'PARQUET',
   parquet_compression = 'SNAPPY',
   partitioned_by = ARRAY['date_executed'])
AS
SELECT
{columns_that_I_am_selecting_here_including_'date_executed'}

这样做是在它执行的第一天创建一个新表,但随后几天没有任何反应,我假设是因为 CREATE TABLE IF NOT EXISTS 验证表已经存在并且不继续执行逻辑。

有没有办法修改我的查询,为执行的第一天创建一个表,并为随后的每一天添加一个新分区的结果?

我很确定 ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION 不会适用于我的用例,因为我正在运行 CTAS 查询。

【问题讨论】:

    标签: sql amazon-web-services amazon-athena presto partition


    【解决方案1】:

    您可以简单地使用INSERT INTO existing_table SELECT...

    大概您的表已经分区,因此在 SELECT 中包含该分区列,Amazon Athena 会自动将数据放入正确的目录中。

    例如,您可能包含这样的 hte 列:SELECT ... CURRENT_DATE as date_executed

    见:INSERT INTO - Amazon Athena

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 1970-01-01
      • 2022-01-03
      • 2019-03-28
      • 1970-01-01
      • 2023-01-04
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多