Коннектор Snowflake Python: этап csv -> создать таблицу -> ProgrammingError: ... data contains more columns ... column "TRANSIENT_STAGE_TABLE" ..., но только иногда...? -> скопировать в таблицу
Я пытаюсь загрузить в Snowflake кучу созданных вручную CSV-файлов.
Следующие действия производят желаемый эффект:
f"""
create or replace table {table} using template (
select array_agg(object_construct(*))
within group (order by order_id)
from table (infer_schema(
location=>'@files/{file}',
file_format=>'public.generic_csv')))
"""
Иногда это приводит к следующей ошибке:
ProgrammingError: 100332 (22000): Error with CSV header: header defined (2) columns while data contains more columns
File 'my_file.csv.gz', line 22, character 30
Row 21, column "TRANSIENT_STAGE_TABLE"[2]
File 'my_file.csv.gz'
Row 0 starts at line 0, column
f"""
copy into {table}
from @webforms
files = (
{"'" + file + ".gz'"}
)
file_format = (
skip_header = 1
)
"""
Я загрузил файлы, которые вызывают проблемы. Ни один столбец не указан, и я не знаю, почему эти столбцы «TRANSIENT_STAGE_TABLE» вызывают проблемы.
Любая помощь будет принята с благодарностью!
После обновления параметра field_optionally_enclosed_by до '"', как предложил NickW, я получаю новую ошибку в том же месте:
100016 (22000): Field delimiter ',' found while expecting record delimiter '\n'
File 'my_file.csv.gz', line 22, character 29
Row 21, column ""My File""["Letters":2]
If you would like to continue loading when an error is encountered, use other values such as 'SKIP_FILE' or 'CONTINUE' for the ON_ERROR option. For more information on loading options, please run 'info loading_data' in a SQL client.
public.generic_csvcreate or replace file format generic_csv
type = csv field_delimiter = ','
parse_header = true
field_optionally_enclosed_by = '"';
my_file.csvYear,Letters
2021,AsdfFSeqDSF
2021,AS DF fs eDdsf
2021,asdF AaasDFFe we
2021,asdD. sdf sdDD cSQ
2021,asdF AaasDFFe we
2021,asdF AaasDFFe we
2021,asdF AaasDFFe we
2021,asdF AaasDFFe we
2021,asdflo WSd 123 fs
2021,asdF AaasDFFe we
2021,asdF AaasDFFe we
2021,asdF AaasDFFe we
2022,asdF AaasDFFe we
2022,asdF AaasDFFe we
2022,asdF AaasDFFe we
2022,ASsd jlsf (ASkdl)
2022,asdF AaasDFFe we
2022,asdF AaasDFFe we
2022,asSD asd-asdf
2022,asdF AaasDFFe we
2022,"ASdskdkl josf, asdf"
2022,"ASsslkf jsdf, fao. "
2022,asdF AaasDFFe we
2022,asdD. sdf sdDD cSQ
2022,asdD. sdf sdDD cSQ
2022,asdD. sdf sdDD cSQ
2022,asdD. sdf sdDD cSQ
2022,asdF AaasDFFe we
Обновлено: исправлен порядок событий и место возникновения ошибки.
Редактирование 2: добавлен сценарий создания public.generic_csv и образец my_file.csv.
.
Редактирование 3: исправлена отсутствующая скобка в команде create or replace table....
@NickW Я добавил их в приложение (при этом my_file.csv очищается от конфиденциальных данных, но сохраняет специальные символы, которые там использовались). Каждая из ошибок начинается с первого появления двойных кавычек, которые моя система генерирует, когда значение поля содержит запятые.






Таким образом, единственная настройка, которую вы использовали в своем формате файла, — это то, что разделителем полей является запятая, поэтому, когда у вас есть 2 запятые, Snowflake думает, что есть 3 поля.
Если вы хотите рассматривать все в кавычках как одно поле, вам нужно будет использовать параметр FIELD_OPTIONALLY_ENCLOSED_BY в формате вашего файла.
Я последовал вашему предложению. Я обновил свой вопрос новой проблемой, возникающей в той же строке.
Используя данные вашего примера и ваш последний формат файла, когда я запускаю вашу команду «создать или заменить таблицу...», она работает без ошибок (хотя в команде в вашем вопросе отсутствует финальная «)»
Пожалуйста, обновите свой вопрос, указав сценарий создания файла формата public.generic_csv и содержимое файла my_file.csv.gz, вызывающего ошибку.