Как добавить заголовок столбца в команду выгрузки Redshift в Python? - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу вернуть в качестве заголовка столбца и 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 скрипта unload.

1 Ответ

0 голосов
/ 11 декабря 2018

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),

...