Получение «Ошибка преобразования типа данных VARCHAR в DATETIM» E при копировании данных из Azure blob в Azure DW через Polybase - PullRequest
0 голосов
/ 05 февраля 2020

Я новичок в среде Azure и использую фабрику данных, пытаясь скопировать данные, присутствующие в CSV-файле, в хранилище BLOB-объектов Azure с тремя столбцами (идентификатор, возраст, дата рождения) в таблицу в Azure хранилище данных. Дата рождения имеет формат «MM / dd / yyyy», и я использую polybase для копирования данных из BLOB-объекта в мою таблицу в azure DW. Столбцы таблицы определены как (int, int, datetime).

Я могу скопировать свои данные, если я использую опцию «Массовая вставка» в фабрике данных, но это дает мне ошибку, когда я выбираю копию Polybase , Также изменение формата даты в пиплайне также не приносит никакой пользы. Polybase успешно копирует, если я изменяю формат даты в моем файле на «гггг / мм / дд».

Есть ли способ скопировать данные из моего большого двоичного объекта в мою таблицу, не меняя формат даты в исходный файл в "гггг / мм / дд".

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Я предполагаю, что вы создали внешний формат файла, который вы указали в своей внешней таблице?

В CREATE EXTERNAL FILEFORMAT есть возможность определить, как представляется дата: DATE_FORMAT, и вы задаете для нее, как ваши исходные данные представляют дату и время.

Так что-то вроде этого:

CREATE EXTERNAL FILE FORMAT your-format  
WITH 
(  
  FORMAT_TYPE = DELIMITEDTEXT,  
  FORMAT_OPTIONS (  
      FIELD_TERMINATOR = '|',  
      DATE_FORMAT = 'MM/dd/yyyy' ) 
);  

Подробнее об этом можно узнать по адресу: https://docs.microsoft.com/en-us/sql/t-sql/statements/create-external-file-format-transact-sql?view=sql-server-ver15

0 голосов
/ 24 февраля 2020

Похоже, эта ошибка устранена. Я предоставлял формат даты как «MM / dd / yyyy», тогда как фабрика данных ожидала, что это будет просто MM / dd / yyyy без кавычек.

Так что, насколько я понимаю, я обобщу то, что узнал при копировании данных из Azure blob в Azure SQL Хранилище данных с форматом даты 'MM / dd / yyy', в нескольких пунктах здесь:

1) Если вы используете azure портал для копирования данных из BLOB-объекта в azure sql хранилище данных с помощью параметра копирования фабрики данных.

  • Создание линии передачи данных с использованием фабрики данных.
  • Укажите свои входные данные источник и ваше хранилище данных назначения.
  • В полевых сопоставлениях выберите дату и время в столбце, который содержит дату, щелкните по маленькому значку справа от него, чтобы вывести поле пользовательского формата даты, и введите формат даты без кавычек, например. ММ / ДД / ГГГГ, как в моем случае.
  • Запустите свою линию трубопровода, и она должна успешно завершиться.

2) Вы можете использовать polybase напрямую:

  • Создание внешнего источника данных e, который указывает местоположение вашего входного файла, например, CSV-файл в хранилище BLOB-объектов в моем случае.
  • Внешний формат файла, который определяет разделитель и пользовательский формат даты, например, MM / dd / yyyy во входном файле.
  • Внешняя таблица, которая определяет все столбцы, присутствующие в исходном файле, и использует внешнее хранилище данных и формат файла, который вы определили выше.
  • Затем вы можете создавать свои пользовательские таблицы как выбранные, используя внешнюю таблица (CTAS). То, что Нильс заявил в своем ответе выше. Я использовал Microsoft SQL Server Management Studio для этого процесса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...