首页 > 解决方案 > Azure SQL DB 外部表在 csv 末尾添加列后抛出错误

问题描述

我需要以下帮助-

旧 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))

查询外部表会引发错误 -

1*** 行在查询执行的计划步骤 2 中被外部表 [Employee] 拒绝:位置:'Employee/New/Employee_2***.csv' 列序号:79,预期数据类型:datetime2。

仅出于调试目的,我增加了 REJECT_VALUE = 10000。我知道外部仅显示新文件数据而不显示旧文件数据。

标签: sqlsql-serverazure-sql-databaseexternal-tables

解决方案


仅从错误消息来看,它的列数据 dob无法转换为数据类型datetime2(7)

我们不知道您的dob数据是什么样的字符串,请按照以下链接进行检查:datetime2 支持的字符串文字格式

所以解决方案可能是更改datetime2为其他日期数据类型。

更新:

很高兴听到您找到原因:

  • 不仅仅是因为 datetime2,实际上它与任何数据类型都有关。由于以前的文件没有该列,因此将其视为错误数据。

推荐阅读