问题描述
我在以下方面需要帮助-
旧的 CSV 文件有 3 列 - id、fname、lname
新的 CSV 文件有 4 列 - id、fname、lname、dob
我已经更新了外部架构如下-
CREATE EXTERNAL TABLE [dbo].[employee]
(
[id] [int] NOT NULL,[fname] [nvarchar](50) NULL,[lname] [nvarchar](50) NULL,[dob] [datetime2](7) NULL
)
WITH (DATA_SOURCE = [EmpWarehouseStorage],LOCATION = N'Employee/New',FILE_FORMAT = [PipeFileFormat],REJECT_TYPE = VALUE,REJECT_VALUE = 10)
外部数据源查询-
CREATE EXTERNAL DATA SOURCE [EmpWarehouseStorage]
WITH (TYPE = HADOOP,LOCATION = N'abfss://emp@****.dfs.core.windows.net',CREDENTIAL = [EmpWarehouseStorageKey])
外部文件格式 -
CREATE EXTERNAL FILE FORMAT [PipeFileFormat] WITH (FORMAT_TYPE = DELIMITEDTEXT,FORMAT_OPTIONS (FIELD_TERMINATOR = N'|',USE_TYPE_DEFAULT = False))
在计划步骤 2 中从外部表 [Employee] 拒绝 1*** 行 查询执行:位置:'Employee/New/Employee_2***.csv' 列序号:79,预期数据类型:datetime2。
仅出于调试目的,我增加了 REJECT_VALUE = 10000。 我知道external只显示新文件数据,不显示旧文件数据。
解决方法
仅从错误信息来看,dob
的列数据无法转换为数据类型datetime2(7)
。
我们不知道您的 dob
数据是什么样的字符串,请通过以下链接进行检查:Supported string literal formats for datetime2。
因此解决方案可能是将 datetime2
更改为其他日期数据类型。
更新:
很高兴听到您找到原因:
- 不仅仅是因为datetime2,实际上它与任何数据类型有关。由于以前的文件没有 将该列视为错误数据。