问题描述
我创建了一些 ADF 管道来复制多个 csv 文件并合并为单个 Parquet 文件并放置在另一个存储帐户中。之后,我创建了 polybase sql 脚本以将数据从外部表复制到 sql Pool 数据库。
外部表创建查询:
CREATE EXTERNAL TABLE [dbo].[test]
(
[Field1] VARCHAR(100) null,[Field2] VARCHAR(100) null,[Value] decimal(10,7) null,[Field4] VARCHAR(100) null
)
WITH
(
LOCATION = '***',DATA_SOURCE = test_data_source,FILE_FORMAT = ParquetFileFormat
)
当我查询前 10 条记录时:
select top 10 * from [dbo].[test]
出现以下错误:
HdfsBridge::recordReaderFillBuffer - Unexpected error encountered filling record reader buffer: HadoopUnexpectedException: Request Failed due to an internal error that occurred during map-reduce job execution. Exception message = [Parquet column with primitive type [optional binary Value (UTF8)] cannot be converted to [DECIMAL] because parquet type is not annottated with decimal Metadata].
如果我将字段值转换为 varchar,则它可以工作。 下面是 ADF 复制活动的屏幕截图。
接收器数据集具有自定义架构字段:
我无法在 Parquet 文件中编辑目标数据类型。
如何解决这个问题?