Снежинка - копировать заголовки столбцов для пустой строки - PullRequest
1 голос
/ 03 апреля 2020

Я использую команду copy into для сохранения результатов запроса из снежинки в файл в корзине s3. Он работает, как и ожидалось, но когда запрос не возвращает данных, я все же хочу сохранить имена столбцов в том же файле, чтобы я мог отобразить пустую строку с именами столбцов в пользовательском интерфейсе. Я указал header=true в команде, но он не работает, когда запрос не дает результата.

Спасибо

1 Ответ

1 голос
/ 04 апреля 2020

Согласно документам :

Если исходная таблица содержит 0 строк, то операция COPY не выгружает пустой файл данных; даже не файл, содержащий заголовки столбцов таблицы.

И, похоже, нет способа изменить это поведение.

Однако, прежде чем записывать таблицу в S3, вы можете записать заголовки (как данные), выполнив запрос INFORMATION_SCHEMA . Затем напишите свою таблицу как обычно (с OVERWRITE = TRUE) - и если не будет записано ни одной строки, файл заголовка останется.


UPDATE

Вот как создать заголовок :

select listagg(column_name,',') within group (order by ordinal_position)
from MY_DB.information_schema.columns 
where table_schema='MY_SCHEMA' and table_name='MY_TABLE';

Затем вы можете записать его в виде данных в файл CSV следующим образом:

copy into @my_stage/my_table  (
    select listagg(column_name,',') 
        within group (order by ordinal_position)
    from MY_DB.information_schema.columns 
    where table_schema='MY_SCHEMA' and table_name='MY_TABLE';
)
file_format = (type=csv compression=none field_delimiter=none)
header=false;
...