sql - 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。我知道外部仅显示新文件数据而不显示旧文件数据。
解决方案
仅从错误消息来看,它的列数据 dob
无法转换为数据类型datetime2(7)
。
我们不知道您的dob
数据是什么样的字符串,请按照以下链接进行检查:datetime2 支持的字符串文字格式。
所以解决方案可能是更改datetime2
为其他日期数据类型。
更新:
很高兴听到您找到原因:
- 不仅仅是因为 datetime2,实际上它与任何数据类型都有关。由于以前的文件没有该列,因此将其视为错误数据。
推荐阅读
- string - VHDL - 将字符串转换为 32 位整数
- python - 从列表中删除可被 5 整除的数字的 Python 程序返回错误值
- scheme - 呼叫 cc 示例球拍
- c - 如何在 vs 代码中优先考虑用户片段而不是扩展片段?
- android - BroadcastReceiver(已注册清单)生命周期
- c++ - 哪种排序算法最适合这个特性?
- sql-server - 如何将 SQL Server CTE 查询转换为普通查询
- android - 应用程序运行时调试器未连接
- c# - C# - 将数据从十进制转换为浮点数在从数据库中检索数据时截断小数点后
- react-native - 如何在 createMaterialTopTabNavigator 选项卡中设置两种颜色