ADF中GetMetadata无Structure选项及非数据流验证Schema问题
关于ADF中GetMetadata活动Structure选项及Schema验证的问题
一、Structure选项显示的条件
GetMetadata活动的字段列表中出现Structure选项,必须满足以下前提:
- 对应的Parquet/CSV数据集已预定义明确的Schema结构:
- 手动在数据集配置界面添加列名、指定数据类型;
- 通过「导入Schema」功能从样本文件读取Schema并保存到数据集配置中;
- 若数据集设置为自动检测Schema(比如CSV数据集的Schema选项设为「None」,或Parquet数据集未手动保存导入的Schema),GetMetadata不会返回Structure字段——因为此时数据集本身没有固定的Schema定义。
二、不使用数据流验证Schema与列数的方法
1. 验证列数
使用GetMetadata活动的Column Count字段获取文件实际列数,再通过If Condition活动对比预期值:
- 步骤:
- 配置GetMetadata活动,勾选「Column Count」字段;
- 在后续
If Condition中使用表达式判断:@equals(activity('GetMetadata_File').output.columnCount, 5) // 5为预期列数 - 根据判断结果执行后续逻辑(如抛出错误、记录日志等)。
2. 验证Schema结构
分两种场景处理:
场景A:数据集已预定义Schema
- 配置GetMetadata活动,勾选「Structure」字段,该字段会返回数据集预定义的Schema结构(包含列名、数据类型、是否允许空等信息);
- 通过表达式对比返回的Structure与预期Schema,示例:
注:嵌套结构需按层级构建对比对象。@equals(activity('GetMetadata_File').output.structure, createArray( createObject('name', 'id', 'type', 'Int32'), createObject('name', 'name', 'type', 'String'), createObject('name', 'create_time', 'type', 'DateTime') ))
场景B:数据集未预定义Schema
- 使用GetMetadata活动的Columns字段获取文件实际列名列表,再与预期列名数组对比:
若需验证数据类型,可结合Lookup活动读取少量数据行,通过表达式判断字段类型(如@equals(activity('GetMetadata_File').output.columns, createArray('id', 'name', 'create_time'))@typeof(activity('Lookup_File').output.firstRow.id))。
内容的提问来源于stack exchange,提问作者CloudEngineer
相关产品推荐
相关产品推荐

