如何更改 Azure ADF Pipelines 中的 ADF 接收器数据集 Parquet 文件数据类型

问题描述

我创建了一些 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 复制活动的屏幕截图。

enter image description here

接收器数据集具有自定义架构字段:

enter image description here

我无法在 Parquet 文件中编辑目标数据类型。

如何解决这个问题?

解决方法

您可以从示例文件中import schema,而不是从存储中。

在属性中,您可以提及从示例文件中导入架构并上传所需格式的架构文件。

enter image description here

您还可以通过从示例文件中添加导入模式浏览文件,在模式下的接收器数据集中添加示例模式文件。

enter image description here