Загрузка CSV-файла через Polybase без знания последовательности столбцов

Я пытаюсь загрузить несколько файлов CSV из озера данных Azure в Azure Synapse с помощью Polybase. В каждом CSV-файле есть фиксированный набор столбцов, и имена столбцов указаны в первой строке. Однако столбцы могут располагаться в разной последовательности.

В Polybase мне нужно объявить внешнюю таблицу, в которой мне нужно знать точную последовательность столбцов во время разработки, и, следовательно, я не могу создать внешнюю таблицу. Есть ли другие способы загрузить файл CSV?


person Victor Ng    schedule 07.05.2020    source источник


Ответы (1)


Я не верю, что вы можете сделать это напрямую с помощью Polybase, потому что, как вы заметили, для оператора CREATE EXTERNAL TABLE требуются объявления столбцов. Затем во время выполнения данные CSV сопоставляются с именами этих столбцов.

Вы можете легко сделать это с помощью фабрики данных и потока данных Azure (которая использует Polybase для перемещения данных в Synapse), разрешив потоку данных создать таблицу. Это работает, потому что таблица создается после того, как данные были прочитаны, а не до того, как с EXTERNAL.

Для набора данных приемника создайте его с параметризованным именем таблицы [и, возможно, схемой]: введите описание изображения здесь

В действии Sink укажите «Recreate table»:  введите описание изображения здесь

Передайте желаемое имя таблицы в набор данных приемника из конвейера:  введите описание изображения здесь

Имейте в виду, что все столбцы на основе строк будут определены как VARCHAR (MAX).

person Joel Cochran    schedule 11.05.2020
comment
Спасибо, Джоэл. Могу ли я узнать, в какой момент это решение действительно создает столбцы? Я бы получил CSV-файл с первой строкой, показывающей имена моих столбцов, но порядок их неизвестен. - person Victor Ng; 19.05.2020
comment
Приемник создаст таблицу с любыми столбцами, которые найдет - порядковый номер столбцов не имеет значения. - person Joel Cochran; 19.05.2020
comment
если Sink создает таблицу динамически, как он узнает, какой столбец использует какой тип данных? - person Victor Ng; 26.05.2020
comment
Он экстраполируется из типов столбцов в потоке данных. Если все они являются строками, вы можете использовать производный столбец, чтобы преобразовать их в нужный тип перед приемником. Как я отметил в своем ответе, все столбцы String будут иметь вид VARCHAR (MAX). - person Joel Cochran; 26.05.2020
comment
Спасибо, Джоэл, я, вероятно, приму это решение вместо того, чтобы зависеть от создания ВНЕШНИХ таблиц. - person Victor Ng; 28.05.2020