ADF复制S3中Parquet文件时列未拆分,如何按~分隔处理?
ADF复制S3 Parquet文件数据集中单列的问题解决
问题原因分析
- 源Parquet文件物理结构为单列:可能源文件本身仅包含一个物理列,所有业务数据以
~分隔的字符串或嵌套结构体形式存储在该列中,ADF自动生成schema时只能识别到这个物理列。 - ADF自动schema推断的局限性:自动推断仅能识别Parquet的物理列,若列内是拼接字符串或嵌套结构,无法自动拆分出子字段,导致所有数据集中显示。
- 数据源配置错误:若误将Parquet格式数据源配置为文本格式(如CSV),ADF会把整个Parquet文件当作单一行文本读取,最终集中到单列。
按分隔符~拆分数据的解决方案
方法1:使用ADF数据流动(Data Flow)处理
- 读取数据源:创建数据流动,以S3的Parquet文件为源,确认文件格式设置为Parquet。
- 拆分单列数据:
- 添加派生列转换,用
split()函数拆分目标列,示例表达式:split(your_single_column_name, '~'),生成包含拆分后字段的数组。 - 若拆分后字段数量固定,继续添加派生列,将数组元素映射为单独列,比如
split_result[0]对应第一列、split_result[1]对应第二列,依次配置。 - 也可使用解析器转换,选择“分隔符”模式,指定分隔符为
~,直接将单列字符串解析为多列。
- 添加派生列转换,用
- 输出结果:将处理后的数据写入目标存储或数据库。
方法2:在复制活动中手动配置映射与表达式
- 手动编辑schema:在复制活动的源或目标端,放弃自动生成的schema,手动添加需要的目标列。
- 映射时使用拆分表达式:在列映射界面,为每个目标列设置表达式,比如目标列1的表达式为
split(source_single_column, '~')[0],目标列2为split(source_single_column, '~')[1],依次配置所有字段。 - 嵌套结构处理:若源列是嵌套结构体,先在映射界面点击“展开”按钮,将嵌套字段展开为单独列后再处理。
方法3:检查并修正数据源配置
- 确认S3数据源的文件格式设置为Parquet,未误选为CSV或其他文本格式。
- 检查Parquet读取选项,确保启用了“读取嵌套结构”的相关设置(若源文件为嵌套结构)。
内容的提问来源于stack exchange,提问作者Alex Housden
相关产品推荐
相关产品推荐

