使用 BCP 将日期时间数据导入 SQL 服务器仓库
Importing Datetime data into SQL Server Warehouse using BCP
我每天都会收到一个如下所示的文本文件:
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
我正在尝试使用 BCP 将其导入 Azure SQL 服务器仓库。
正在加载的table定义如下:
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 ""
我的日期时间元素有问题 - 我收到以下错误:
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid date format
有没有办法定义日期时间信息是什么,即我可以给 BCP a YYYY-mm-DD\THH:MM:SS 样式字符串,以便它可以正确解释我的日期?
请限制使用 BCP 的答案。
您将无法使用 bcp 将该日期格式直接导入到 datetime2
列中(据我所知 - 很高兴得到更正)。使用分段 table,导入到 char(20)
列,然后使用 CAST
转换,例如
SELECT CAST( yourCharDateColumn AS DATETIME2 ) AS x
FROM yourStagingTable
您可以使用这种方法忘记格式文件,只需将 -c
开关与 bcp 一起使用即可。转换在我的测试中是成功的。
我注意到你的格式文件中的第二列被标记为 SQLBIT
而它应该是 SQLBIGINT
.
关于 bcp 的使用,我很想知道您为什么选择使用这个遗留命令工具,其中 Polybase 是将数据快速导入 Azure SQL 数据仓库的推荐方式。 CREATE EXTERNAL FILE FORMAT
甚至有一个 DATE_FORMAT
开关,虽然我没有尝试过,但可以使用这种格式。如果您必须 bcp 并且源数据来自另一个 SQL 服务器,那么在导出时使用本机 (-n
) 开关效果很好,并且还将消除对格式文件的需要。或者考虑数据工厂,它应该能够处理日期列所需的转换。
我每天都会收到一个如下所示的文本文件:
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
我正在尝试使用 BCP 将其导入 Azure SQL 服务器仓库。
正在加载的table定义如下:
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 ""
我的日期时间元素有问题 - 我收到以下错误:
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid date format
有没有办法定义日期时间信息是什么,即我可以给 BCP a YYYY-mm-DD\THH:MM:SS 样式字符串,以便它可以正确解释我的日期?
请限制使用 BCP 的答案。
您将无法使用 bcp 将该日期格式直接导入到 datetime2
列中(据我所知 - 很高兴得到更正)。使用分段 table,导入到 char(20)
列,然后使用 CAST
转换,例如
SELECT CAST( yourCharDateColumn AS DATETIME2 ) AS x
FROM yourStagingTable
您可以使用这种方法忘记格式文件,只需将 -c
开关与 bcp 一起使用即可。转换在我的测试中是成功的。
我注意到你的格式文件中的第二列被标记为 SQLBIT
而它应该是 SQLBIGINT
.
关于 bcp 的使用,我很想知道您为什么选择使用这个遗留命令工具,其中 Polybase 是将数据快速导入 Azure SQL 数据仓库的推荐方式。 CREATE EXTERNAL FILE FORMAT
甚至有一个 DATE_FORMAT
开关,虽然我没有尝试过,但可以使用这种格式。如果您必须 bcp 并且源数据来自另一个 SQL 服务器,那么在导出时使用本机 (-n
) 开关效果很好,并且还将消除对格式文件的需要。或者考虑数据工厂,它应该能够处理日期列所需的转换。