如果新分区不存在,如何修改 CTAS 查询以将查询结果附加到 table? - 雅典娜
How to modify CTAS query to append query results to table based on if new partition doesn't exist? - Athena
我有一个每天要执行的查询,该查询将按执行日期进行分区。此查询的结果应附加到相同的 table.
我的想法理想情况下是有类似于 CREATE TABLE IF NOT EXISTS
命令的东西,如果分区尚不存在,则每天通过新分区将数据添加到现有 table,但我可以'我不知道如何将其集成到我的查询中。
我的查询:
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'}
这样做是在执行的第一天创建一个新的 table,但随后几天没有任何反应,我假设是因为 CREATE TABLE IF NOT EXISTS
验证了 table已经存在并且不继续逻辑。
有没有办法修改我的查询以在第一天执行时创建一个 table 并在随后的每一天通过一个新分区追加结果?
我很确定 ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION
不适用于我的用例,因为我是 运行 CTAS 查询。
您可以简单地使用 INSERT INTO existing_table SELECT...
。
推测您的 table 已经分区,因此在 SELECT 中包含该分区列,Amazon Athena 会自动将数据放入正确的目录中。
例如,您可以像这样包含 hte 列:SELECT ... CURRENT_DATE as date_executed
我有一个每天要执行的查询,该查询将按执行日期进行分区。此查询的结果应附加到相同的 table.
我的想法理想情况下是有类似于 CREATE TABLE IF NOT EXISTS
命令的东西,如果分区尚不存在,则每天通过新分区将数据添加到现有 table,但我可以'我不知道如何将其集成到我的查询中。
我的查询:
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'}
这样做是在执行的第一天创建一个新的 table,但随后几天没有任何反应,我假设是因为 CREATE TABLE IF NOT EXISTS
验证了 table已经存在并且不继续逻辑。
有没有办法修改我的查询以在第一天执行时创建一个 table 并在随后的每一天通过一个新分区追加结果?
我很确定 ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION
不适用于我的用例,因为我是 运行 CTAS 查询。
您可以简单地使用 INSERT INTO existing_table SELECT...
。
推测您的 table 已经分区,因此在 SELECT 中包含该分区列,Amazon Athena 会自动将数据放入正确的目录中。
例如,您可以像这样包含 hte 列:SELECT ... CURRENT_DATE as date_executed