Импорт данных Datetime в хранилище SQL Server с использованием BCP - PullRequest
1 голос
/ 01 июля 2019

Каждый день я получаю текстовый файл, который выглядит следующим образом:

128CAFEE-38B0-5A6A-8C21-E2BDA1E57FE4    353386068937487 10320   2019-06-20T23:56:14Z
128CAFEE-38B0-5A6A-8C21-E2BDA1E57FE4    353386068937487 10320   2019-06-20T23:56:14Z
128CAFEE-38B0-5A6A-8C21-E2BDA1E57FE4    353386068937487 10320   2019-06-20T23:56:14Z

Я пытаюсь импортировать его в хранилище SQL Server Azure с помощью BCP.

ОпределениеЗагружаемая таблица выглядит следующим образом:

CREATE TABLE
 mytable
(var1 VARCHAR(36) NOT NULL, 
 var2 BIGINT NOT NULL, 
 var3 INTEGER NOT NULL, 
 var4 DATETIME2 NOT NULL)

Я использую файл fmt, который выглядит следующим образом:

13.0
4
1       SQLCHAR             0       36      "\t"   1     var1                                         SQL_Latin1_General_CP1_CI_AS
2       SQLBIT              0       1       "\t"   2     var2                                         ""
3       SQLINT              0       4       "\t"   3     var3                                         ""
4       SQLDATETIME         0       8       "\n"   4     var4                                         ""

У меня проблемы с элементом datetime этого - я получаюследующая ошибка:

Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid date format

Есть ли способ определить, что такое информация о дате и времени, т.е. могу ли я дать BCP ГГГГ-мм-ДД \ ТЧ: ММ: СС стиль строки, чтобы он мог правильно интерпретировать мою дату?

Пожалуйста, ограничьте ответы на использование BCP.

1 Ответ

1 голос
/ 01 июля 2019

Вы не сможете импортировать этот формат даты непосредственно в столбец datetime2 с помощью bcp (насколько я знаю - рад, что поправился).Используйте промежуточную таблицу, импортируйте в столбец char(20), затем используйте CAST для преобразования, например,

SELECT CAST( yourCharDateColumn AS DATETIME2 ) AS x
FROM yourStagingTable

. При таком подходе вы можете забыть файл форматирования и просто использовать переключатель - cс БКП.Приведение прошло успешно в моих тестах.

Я заметил, что второй столбец в вашем файле формата помечен как SQLBIT, когда он должен быть SQLBIGINT.

Что касается использования bcp, яМне интересно понять, почему вы выбрали использование этого унаследованного командного инструмента, где Polybase является рекомендуемым способом быстрой передачи данных в хранилище данных SQL Azure.CREATE EXTERNAL FILE FORMAT даже имеет переключатель DATE_FORMAT, который, хотя я и не пробовал, мог бы работать с этим форматом.Если вам нужно bcp, а исходные данные поступают с другого SQL Server, то использование родного (-n) переключателя при экспорте работает хорошо, а также устраняет необходимость в файле формата.В качестве альтернативы рассмотрим фабрику данных, которая должна быть в состоянии обработать преобразование, необходимое для вашего столбца даты.

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