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

Posted

技术标签:

【中文标题】如何在 Azure ADF Pipelines 中更改 ADF 接收器数据集 Parquet 文件数据类型【英文标题】:How to change ADF sink dataset Parquet file datatypes in Azure ADF Pipelines 【发布时间】: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 是的,我通过导入小型镶木地板文件添加了架构。更新了截图,请见鬼。 【参考方案1】:

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

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

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

【讨论】:

以上是关于如何在 Azure ADF Pipelines 中更改 ADF 接收器数据集 Parquet 文件数据类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure Pipelines YAML 构建定义中接收修订

如何在 Azure 数据工厂触发时检查是不是正在上传某些文件(允许在 ADF 中上传时读取文件)

如何从 azure ADF 管道运行 Azure CLI 命令?

如何在 Azure Pipelines Yaml 上循环多个 Azure 订阅?

如何在 Azure Pipelines 中自动增加 Xamarin Android 内部版本号和版本号?

我可以通过 CLI 验证 azure-pipelines.yml 文件吗?