Как я могу получить количество столбцов в Staged File Snowflake

Я помещаю файл в Snowflake и загружаю его в таблицу с помощью Copy. Перед загрузкой я хочу проверить количество столбцов в файле, чтобы убедиться, что оно соответствует таблице.

Как я могу получить количество столбцов для этого поэтапного файла?


person PythonDeveloper    schedule 01.10.2020    source источник


Ответы (3)


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

cat test.csv
a|b|c
1|2|3

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

create or replace stage stg_col_count file_format = ( type = 'csv');

select $1 Col from @stg_col_count; 

+-------+                                                                       
| COL   |
|-------|
| a|b|c |
+-------+

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

select array_size(split($1,'|')) no_of_col from @stg_col_count limit 1;
+-----------+                                                                   
| NO_OF_COL |
|-----------|
|         3 |
+-----------+
person PIG    schedule 02.10.2020
comment
Ваше решение сработало для меня. - person alim1990; 03.02.2021

Я не думаю, что есть способ сделать это. Но если это файл CSV, который вы подготовили и хотите просмотреть данные перед загрузкой в ​​таблицу, вы можете использовать SQL, как показано ниже.

SELECT $1,$2,$3, ...$n from @<your stage name> - n is the number of columns in the CSV file
person Rajib Deb    schedule 02.10.2020

Я не думаю, что есть способ подсчитать количество столбцов из поэтапных файлов. Если вы хотите проверить входной файл (ы) перед загрузкой в ​​фактическую таблицу, вы можете использовать VALIDATION_MODE в команде копирования, он проверит и вернет ошибку, если таковая имеется.

[VALIDATION_MODE = RETURN__ROWS | RETURN_ERRORS | RETURN_ALL_ERRORS]

person Sriga    schedule 02.10.2020