Подтвердить что ты не робот

Выгрузка с красного смещения на s3 с заголовками

Я уже знаю, как выгрузить файл из redshift в s3 как один файл. Мне нужно знать, как разгружать заголовки столбцов. Может ли кто-нибудь помочь или дать мне ключ?

Я не хочу, чтобы это делать вручную в оболочке или python.

4b9b3361

Ответ 1

Прямой вариант, предоставляемый красным смещением, отсутствует.

Но мы можем настроить запросы для создания файлов с строками с добавленными заголовками.

Сначала мы попытаемся использовать параметр параллельного вывода, чтобы он создавался только в файле.

"По умолчанию UNLOAD записывает данные параллельно нескольким файлам в соответствии с количеством срезов в кластере. Значение по умолчанию ON или TRUE. Если PARALLEL выключен или FALSE, UNLOAD записывает в один или несколько файлов данных поочередно, отсортированный в соответствии с предложением ORDER BY, если он используется. Максимальный размер файла данных составляет 6,2 ГБ. Так, например, если вы выгружаете 13,4 ГБ данных, UNLOAD создает следующие три файла."

Чтобы иметь заголовки в файлах разгрузки, мы будем делать, как показано ниже.

Предположим, что у вас есть таблица ниже

create table mutable
(
    name varchar(64) default NULL,
    address varchar(512) default NULL
)

Затем попробуйте использовать команду select из выгрузки, как показано ниже, чтобы добавить заголовки.

( select 'name','address') union ( select name,address from mytable )

это добавит имя и адрес заголовков в первую строку вашего вывода.

Ответ 2

Если какой-либо из ваших столбцов несимвольный, тогда вам нужно явно указать их как char или varchar, потому что UNION заставляет выполнить бросок.

Вот пример полного оператора, который создаст файл в S3 с заголовками в первой строке.

Выходным файлом будет один CSV файл с кавычками.

В этом примере предполагается числовое значение в столбце_1. Вам нужно будет отрегулировать предложение ORDER BY к числовому столбцу, чтобы убедиться, что строка заголовка находится в строке 1 файла S3.

    ******************************************

    /* Redshift export to S3 CSV single file with headers - limit 6.2GB */

    UNLOAD ('

        SELECT \'column_1\',\'column_2\'

      UNION 

        SELECT 


          CAST(column_1 AS varchar(255)) AS column_1,
          CAST(column_2 AS varchar(255)) AS column_2


        FROM source_table_for_export_to_s3 


      ORDER BY 1 DESC

      ;



    ')

    TO 's3://bucket/path/file_name_for_table_export_in_s3_' credentials
     'aws_access_key_id=<key_with_no_<>_brackets>;aws_secret_access_key=<secret_access_key_with_no_<>_brackets>' 


    PARALLEL OFF 


    ESCAPE


    ADDQUOTES


    DELIMITER ','


    ALLOWOVERWRITE


    GZIP


    ;


    ****************************************

Ответ 3

Начиная с версии кластера 1.0.3945, Redshift теперь поддерживает выгрузку данных в S3 со строками заголовка в каждом файле, т.е.

UNLOAD('select column1, column2 from mytable;')
TO 's3://bucket/prefix/'
IAM_ROLE '<role arn>'
HEADER;

Примечание: Вы не можете использовать HEADER варианты в сочетании с FIXEDWIDTH.

https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html

Ответ 4

Чтобы дополнить ответ, чтобы строка заголовка была на первом месте, вам не нужно упорядочивать данные по конкретному столбцу данных. Вы можете заключить выборки UNIONed в другой выбор, добавить к ним порядковый столбец и затем во внешнем порядке выбора по этому столбцу, не включая его в список выбранных столбцов.

UNLOAD ('

  SELECT column_1, column_2 FROM (

     SELECT 1 AS i,\'column_1\' AS column_, \'column_2\' AS column_2
     UNION ALL
     SELECT 2 AS i, column_1::varchar(255), column_2::varchar(255)
     FROM source_table_for_export_to_s3

  ) t ORDER BY i

')
TO 's3://bucket/path/file_name_for_table_export_in_s3_'

CREDENTIALS
 'aws_access_key_id=...;aws_secret_access_key=...' 

DELIMITER ','
PARALLEL OFF 
ESCAPE
ADDQUOTES;

Ответ 5

Redshift теперь поддерживает разгрузку с заголовками. 19 сентября - 10 октября 2018 года выпуск.

Синтаксис для выгрузки с заголовками -

UNLOAD ("оператор выбора")
TO 's3://object-path/name-prefix'

авторизацииHEADER

Ответ 6

К сожалению, команда UNLOAD изначально не поддерживает эту функцию (см. Другие ответы о том, как это сделать с помощью обходных путей).

Я разместил запрос на добавление функций на форумах AWS, так что, надеюсь, он когда-нибудь будет добавлен.

Редактировать: функция теперь была реализована в Redshift ! 🎉

Ответ 7

Попробуйте вот так:

Выгрузить VENUE с помощью заголовка:

unload ('select * from venue where venueseats > 75000')
to 's3://mybucket/unload/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
header
parallel off;

Ниже показано содержимое выходного файла со строкой заголовка:

venueid|venuename|venuecity|venuestate|venueseats
6|New York Giants Stadium|East Rutherford|NJ|80242
78|INVESCO Field|Denver|CO|76125
83|FedExField|Landover|MD|91704
79|Arrowhead Stadium|Kansas City|MO|79451

Ответ 8

Чтобы упростить процесс, вы можете использовать предварительно построенное изображение докеров для извлечения и включения строки заголовка.

https://github.com/openbridge/ob_redshift_unload

Он также сделает несколько других вещей, но, похоже, имеет смысл упаковать их в простой в использовании формат.

Ответ 9

Чтобы выгрузить таблицу как csv в s3, включая заголовки, вам просто нужно сделать это следующим образом

UNLOAD ('SELECT * FROM {schema}.{table}')
        TO 's3://{s3_bucket}/{s3_key}/{table}/'
        with credentials
        'aws_access_key_id={access_key};aws_secret_access_key={secret_key}'
        CSV HEADER ALLOWOVERWRITE PARALLEL OFF;