Скопируйте файлы данных из внутренней таблицы этапов в логические таблицы - PullRequest
0 голосов
/ 24 марта 2020

Я имею дело с json и CSV-файлами, перемещающимися из корзины Unix / S3 на внутреннюю / внешнюю ступень, и у меня нет проблем с копированием файлов json с внутренней / внешней ступени в Stati c или логическая таблица, в которой я храню как JsonFileName и JsonFileContent

Попытка копирования в таблицу Stati c (parse_ json ($ 1) работает для JSON)

COPY INTO LogicalTable (FILE_NM, JSON_CONTENT) 
from (
  select METADATA$FILENAME AS FILE_NM, parse_json($1) AS JSON_CONTENT 
  from @$TSJsonExtStgName
) 
file_format = (type='JSON' strip_outer_array = true);

Я ищу что-то похожее для CSV, скопируйте имя файла CSV и содержимое файла CSV из внутренней / внешней обработки в Stati c или логические таблицы. В основном, ища это, чтобы разделить копию файла и загрузку файла, загрузка может завершиться с ошибкой из-за несоответствия количества столбцов, символа новой строки или неверных данных в одной из записей.

Если какая-либо из приведенных ниже причин выяснена, подойдет, пожалуйста, предложить

1) Попытка скопировать в таблицу Stati c (METADATA $ ?????? не работает для CSV)

select METADATA$FILENAME AS FILE_NM, METADATA$?????? AS CSV_CONTENT 
from @INT_REF_CSV_UNIX_STG

2) Попытка создания динамических c столбцов (Т. * не работает для CSV)

SELECT METADATA$FILENAME,$1, $2, $3, T.* 
FROM @INT_REF_CSV_UNIX_STG(FILE_FORMAT => CSV_STG_FILE_FORMAT)T

1 Ответ

0 голосов
/ 25 марта 2020

Независимо от того, является ли файл CSV или JSON, вам необходимо убедиться, что ваш SELECT соответствует макету таблицы целевой таблицы. Я предполагаю, что с вашей JSON ваша целевая таблица состоит из 2 столбцов ... имя файла и столбец VARIANT для содержимого JSON. Для CSV вам нужно сделать то же самое. Итак, вам нужно сделать $ 1, $ 2 и др. c. для каждого столбца, который вы хотите из файла ... который соответствует вашей целевой таблице.

Я понятия не имею, на что вы ссылаетесь с METADATA $ ??????, кстати.

--- ДОБАВЛЕНО

Исходя из вашего комментария ниже, у вас есть 2 варианта, которые не являются родными для оператора COPY INTO:

1) Создайте хранимую процедуру, которая просматривает таблицу DDL и генерирует инструкцию COPY INTO, для которой определены столбцы stati c, а затем выполняет COPY INTO из SP.

2) Использование внешней таблицы. Определив Внешнюю таблицу с METADATA $ FILENAME и остальными столбцами, Внешняя таблица вернет вам содержимое CSV как JSON. Оттуда вы можете обращаться с ним так же, как с вашими JSON таблицами.

...