在 csv 末尾添加列后,Azure SQL DB 外部表抛出错误

问题描述

我在以下方面需要帮助-

旧的 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,实际上它与任何数据类型有关。由于以前的文件没有 将该列视为错误数据。