【问题标题】:How to add column header in unload command of Redshift in Python?如何在 Python 中 Redshift 的卸载命令中添加列标题?
【发布时间】: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。

【问题讨论】:

  • 我的回答有帮助吗?

标签: python sql python-3.x python-2.7 amazon-redshift


【解决方案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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2014-09-01
    • 2013-03-11
    • 2021-09-29
    • 2015-11-28
    相关资源
    最近更新 更多