Ошибка «Снежинка» с заголовком CSV: ... столбец «TRANSIENT_STAGE_TABLE»

вр; доктор

Коннектор Snowflake Python: этап csv -> создать таблицу -> ProgrammingError: ... data contains more columns ... column "TRANSIENT_STAGE_TABLE" ..., но только иногда...? -> скопировать в таблицу

Полная ситуация

Вариант использования

Я пытаюсь загрузить в Snowflake кучу созданных вручную CSV-файлов.

Шаг 1: Работаем

Следующие действия производят желаемый эффект:

  1. Я использую соединитель Python Snowflake для размещения файлов в именованной стадии.

Шаг 2: Ошибка

  1. Я использую приведенную ниже команду, адаптированную из этой статьи на Medium, чтобы создать таблицу на основе каждого файла:
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

Шаг 3: Работаем

  1. Скопируйте файл в ранее созданную таблицу:
f"""
copy into {table} 
from @webforms 
  files = ( 
    {"'" + file + ".gz'"} 
  ) 
  file_format = ( 
    skip_header = 1
  )
"""

Я загрузил файлы, которые вызывают проблемы. Ни один столбец не указан, и я не знаю, почему эти столбцы «TRANSIENT_STAGE_TABLE» вызывают проблемы.

Любая помощь будет принята с благодарностью!


Обновление от 30 мая 2024 г.

После обновления параметра 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_csv

create or replace file format generic_csv
  type = csv field_delimiter = ',' 
  parse_header = true
  field_optionally_enclosed_by = '"';

my_file.csv

Year,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....

Пожалуйста, обновите свой вопрос, указав сценарий создания файла формата public.generic_csv и содержимое файла my_file.csv.gz, вызывающего ошибку.

NickW 29.05.2024 23:25

@NickW Я добавил их в приложение (при этом my_file.csv очищается от конфиденциальных данных, но сохраняет специальные символы, которые там использовались). Каждая из ошибок начинается с первого появления двойных кавычек, которые моя система генерирует, когда значение поля содержит запятые.

Skouzini 30.05.2024 00:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
173
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Таким образом, единственная настройка, которую вы использовали в своем формате файла, — это то, что разделителем полей является запятая, поэтому, когда у вас есть 2 запятые, Snowflake думает, что есть 3 поля.

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

Я последовал вашему предложению. Я обновил свой вопрос новой проблемой, возникающей в той же строке.

Skouzini 31.05.2024 00:49

Используя данные вашего примера и ваш последний формат файла, когда я запускаю вашу команду «создать или заменить таблицу...», она работает без ошибок (хотя в команде в вашем вопросе отсутствует финальная «)»

NickW 31.05.2024 11:11

Другие вопросы по теме