将 VARCHAR 转换为 Datetime 并将 VARCHAR 转换为 Decimal 时创建外部表错误
Posted
技术标签:
【中文标题】将 VARCHAR 转换为 Datetime 并将 VARCHAR 转换为 Decimal 时创建外部表错误【英文标题】:Create External Table Error while converting VARCHAR to Datetime and VARCHAR to Decimal 【发布时间】:2021-11-04 18:48:43 【问题描述】:我尝试从 CSV 文件(位于云存储中)创建外部表,在将 Varchar 转换为 datetime 并将 Varchar 转换为十进制时出错。有人可以帮我解决这个问题吗
错误信息
HdfsBridge::recordReaderFillBuffer - 填充记录读取器缓冲区时遇到意外错误:HadoopSqlException:将数据类型 VARCHAR 转换为 DECIMAL 时出错。
CREATE EXTERNAL TABLE [ext].[Load_History_test]
( [Table_Name] [varchar](100) NULL,
[Loaded_On] [datetime] NULL,
[Transferred_Count] [decimal](30) NULL,
[Transferred_Volume_MB] [decimal](30) NULL,
[Load Duration] [time] NULL,
[Throughput_Records] [decimal](30) NULL,
[Throughput_Volume_KB_sec)] [decimal](30) NULL
)
WITH (DATA_SOURCE = [ADLS_External_Landing],LOCATION = N'/refdata/replicate/load_history',FILE_FORMAT = [CSVFileFormatwithHeaderloadhistory],REJECT_TYPE = VALUE,REJECT_VALUE = 0)
GO
CREATE EXTERNAL FILE FORMAT [CSVFileFormatwithHeaderloadhistory] WITH (FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (FIELD_TERMINATOR = N',',
STRING_DELIMITER = N'0x22',
DATE_FORMAT = N'dd/MM/yyyy HH:mm:ss',
FIRST_ROW = 2,
USE_TYPE_DEFAULT = FALSE))
GO
【问题讨论】:
您确定所有日期都在d/m/y
中吗?您确定没有任何行包含无效日期或无效小数或太多逗号或...请注意,导致问题的行可能不方便地位于屏幕截图中捕获的三行中。
谢谢亚伦,是的,有几行格式不合适。解决这个已解决的整个问题,谢谢
@user2703679,人们检查线程并浪费时间,因为您已经找到了解决方案。也许 Aaron 可以写他的评论作为你应该回答的答案,以便标记答案以关闭线程
【参考方案1】:
至少有一个日期不是d/m/y
格式,一位小数太大,或者一行或多行的逗号过多或过少导致格式无效。
请注意,导致问题的行可能不方便地位于屏幕截图中捕获的三行中。
【讨论】:
以上是关于将 VARCHAR 转换为 Datetime 并将 VARCHAR 转换为 Decimal 时创建外部表错误的主要内容,如果未能解决你的问题,请参考以下文章
将 varchar 转换为 datetime 以对日期进行排序?