Как создать строку заголовка выгрузки красного смещения - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть запрос на выгрузку из красного смещения, который предоставляет необходимые данные.Я ищу, чтобы добавить строку заголовка в скрипт Python, который будет записан в каждый файл.Заранее спасибо.

Строка заголовка: должна выглядеть именно так.~ id ~ от ~ до ~ времени начала метки: время окончания даты: дата получения: строка srcaddr: строка dstaddr: строка srcport: строка dstport: строковый протокол: пакеты типа Int: байты Int: действие Int: строка

    def handler(event, context):
        now   = datetime.utcnow().replace(second=0, microsecond=0)
        past  = now - timedelta(minutes=120)

        cmd = """unload (SELECT 'pk' AS id,
        'version' AS version,
        'accountid' AS accountid,
        'interfaceid' AS interfaceid,
        'srcaddr' AS srcaddr,
        'dstaddr' AS dstaddr,
        'srcport' AS srcport,
        'dstport' AS dstport,
        'protocol' AS protocol,
        'packets' AS packets,
        'bytes' AS bytes,
        'starttime' AS startime,
        'endtime' AS endtime,
        'action' AS action,
        'logstatus' AS logstatus,
        'fromeni' AS fromeni,
        'toeni' AS toeni
    UNION ALL SELECT
        cast(pk AS varchar(255)) AS id,
        cast(version AS varchar(255)) AS version,
        cast(accountid AS varchar(255)) AS accountid,
        cast(interfaceid AS varchar(255)) AS interfaceid,
        cast(srcaddr AS varchar(255)) AS srcaddr,
        cast(dstaddr AS varchar(255)) AS dstaddr,
        cast(srcport AS varchar(255)) AS srcport,
        cast(dstport AS varchar(255)) AS dstport,
        cast(protocol AS varchar(255)) AS protocol,
        cast(packets AS varchar(255)) AS packets,
        cast(bytes AS varchar(255)) AS bytes,
        cast(starttime AS varchar(255)) AS starttime,
        cast(endtime AS varchar(255)) AS endtime,
        action,
        logstatus,
        cast(fromeni AS varchar(255)) AS fromeni,
        cast(toeni AS varchar(255)) AS toeni
    FROM dimension.vpc_flow_logs)\
            to 's3://xxxxxxxxxx/' \
            iam_role 'arn:aws:iam::xxxxxxxxx:role/task' \
            delimiter as ',' \
            PARALLEL OFF \
            ESCAPE \
            manifest allowoverwrite"""

        try:
            cursor = conn.cursor()
            cursor.execute(cmd)
            conn.commit()
        finally:
            cursor.close()
            conn.close()

    if __name__ == '__main__':
        handler({},{})

1 Ответ

0 голосов
/ 02 ноября 2018

Хорошие новости!Со 2 октября 2018 года Redshift начал развертывать поддержку опции HEADER в команде UNLOAD, которая будет экспортировать заголовки столбцов в качестве заголовка вашего CSV.

Вот их объявление: https://forums.aws.amazon.com/ann.jspa?annID=6136

Документы также были обновлены: https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html

например

UNLOAD ('SELECT * FROM customers')
TO 's3://<bucket-name>/customers.csv'
CREDENTIALS 'aws_iam_role=arn:aws:iam::<IAM_USER_ID#>:role/myRedshiftRole'
PARALLEL OFF DELIMITER ',' HEADER;

Я только что попробовална БД с 100-300 столбцами, работает лакомство.Прошли времена определений столбцов UNION!Экономит SOO много времени для любых исследователей данных, использующих Redshift, и позволяет экспортировать данные для сторонних платформ!

Также работает со стандартным PARALLEL ON с несколькими выходными файлами.

...