Azure Фабрика данных: неправильное и неожиданное преобразование типов данных при импорте из csv на sql сервер по конвейеру - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь загрузить данные из csv в серверную базу данных sql с помощью оператора Azure конвейерного копирования данных. Во время импорта данные преобразуются в другие типы.

в предварительном просмотре источника в конвейере я вижу следующее

1 - значение "0044" преобразуется в 44

2 - значение 2020000000000000 преобразуется в 2E + 16

3 - значение 5,2 преобразуется в 5 февраля

4 - значение 9,78 преобразуется в сентябрь 1978

, поэтому пока я не смог найти решение для 0044,

В других случаях вот что я сделал:

для 2 Я заключил число 2020000000000000 в "", тогда это сработало, хотя по какой-то причине Я заключил его в четыре слова «вот так:», «2020000000000000» »для 3 и 4. Я заменил точку запятой, и тогда она заработала.

Но я бы хотел сообщить утилите импорта: обрабатывать все как строки и выполнять преобразования в базе данных.

как этого добиться?

код показывает следующее для одного из столбцов в 3 и 4:

(

       "source":(

              "name": "Amount"

              "type": "String"

       )

       "sink":(

              "name": "Amount"

              "type": "String"

       )

)

С наилучшими пожеланиями,

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

моя таблица приемников в базе данных содержит только столбцы nvarchar. Я сделал это после многих головных болей с типами данных и длиной.

Я решил, что мне проще сделать преобразования из nvarchar в базе данных в промежуточную таблицу.

Что помогло в итоге, так это сделать импорт схемы в исходном наборе данных, где читается csv. Есть вкладка «Соединение» и рядом с ней еще одна вкладка «Схема», куда вы можете импортировать схему. После этого все заработало.

0 голосов
/ 02 апреля 2020

Все типы данных по умолчанию в csv: String.

enter image description here

Для Azure SQL database / SQL Server, мы можем не хранить данные «0044» как тип данных int . Вам нужно преобразовать '0044' в строку:

enter image description here

Мы можем использовать команду select для преобразования в 44 в '0044':

select right('0000'+ltrim([a]),4) new_a, b from test12

enter image description here

Когда мы копируем данные из файла CSV, вам нужно подумать о том, являются ли данные в файле CSV действительным типом данных в Azure SQL database / SQL Сервер. Например, данные «2020000000000000» имеют длину int.

Очень важно спроектировать таблицу приемников. Поэтому рекомендуется сначала создать таблицу приемников в вашей базе данных Azure SQL с подходящим типом данных для каждого столбца, а затем установить сопоставления столбцов в разделе Копировать активно вручную:

Настройки отображения :

enter image description here

Трубопровод работает:

enter image description here

Проверка данных в SQL базе данных:

enter image description here

Обновление:

Проблема теперь решает сам Рамиро Коллманнспергер:

"моя таблица приемников в базе данных содержит только столбцы nvarchar. Я сделал это после многих головных болей с типами данных и длиной. Я решил, что мне проще просто сделать преобразования из nvarchar в базе данных в промежуточную таблицу. В итоге помог импорт схемы в исходный набор данных, где читается csv. Есть вкладка «соединение» и рядом с ней еще одна вкладка «схема» куда вы можете импортировать схему. После этого все заработало. "

Hop Это помогает.

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