【发布时间】:2021-09-20 00:13:46
【问题描述】:
我创建了一些 ADF 管道来复制多个 csv 文件并合并到单个 Parquet 文件中并放置在另一个存储帐户中。之后,我创建了 Polybase sql 脚本以将数据从外部表复制到 SQL 池数据库。
外部表创建查询:
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 Copy 活动的屏幕截图。
我无法在 Parquet 文件中编辑目标数据类型。
如何解决?
【问题讨论】:
-
您的接收器数据集是否定义了架构?
-
@JoelCochran 是的,我通过导入小型镶木地板文件添加了架构。更新了截图,请见鬼。
标签: azure-data-factory parquet azure-data-factory-2 azure-synapse polybase