如何在 Python 中 Redshift 的卸载命令中添加列标题?
Posted
技术标签:
【中文标题】如何在 Python 中 Redshift 的卸载命令中添加列标题?【英文标题】:How to add column header in unload command of Redshift in Python? 【发布时间】:2018-12-11 09:36:20 【问题描述】:我想作为列标题返回,并将 upd_tracking_nbr 作为值返回,但它不起作用。
sql="""UNLOAD (\'select ups_tracking_nbr from (
SELECT as return, 1 AS rn
UNION ALL
SELECT ups_tracking_nbr, 2 AS rn
FROM Schema.Table
WHERE TRUNC(last_order_updated_dttm) > TRUNC(SYSDATE - 30))
ORDER BY rn\')
TO 's3://abc/ups/EXTRACT_FOR_file' \
credentials 'aws_iam_role=arn:aws:iam::xyz' \
ALLOWOVERWRITE \
DELIMITER ',' \
PARALLEL OFF;Commit;""".format(column_header)
它的抛出错误为“列“返回”不存在”。我希望将 return 作为字符串传递,以便可以用作卸载脚本的 column_header。
【问题讨论】:
我的回答有帮助吗? 【参考方案1】:UNLOAD
有一个HEADER
选项,可以解决您的问题,您甚至可以省略PARALLEL OFF
部分。它大大简化了您的代码:
sql="""UNLOAD (\'SELECT ups_tracking_nbr
FROM Schema.Table
WHERE TRUNC(last_order_updated_dttm) > TRUNC(SYSDATE - 30))
ORDER BY rn\')
TO 's3://abc/ups/EXTRACT_FOR_file' \
credentials 'aws_iam_role=arn:aws:iam::xyz' \
ALLOWOVERWRITE \
DELIMITER ',' \
HEADER;Commit;"""
但为了让您了解您遇到的问题:
当您UNION
两个表时,它们需要具有相同的架构。你想要做的是:
SELECT 'foo' as return, 1 as rn
UNION ALL
SELECT ups_tracking_nbr, 2 AS rn
...
上述方法不起作用,因为一个表具有 (return
, rn
) 架构,而另一表具有 (ups_tracking_nbr
, rn
)。
【讨论】:
以上是关于如何在 Python 中 Redshift 的卸载命令中添加列标题?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 aws unload 命令将数据从 AWS Redshift 卸载到 s3?