你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用映射数据流中的列模式

适用于: Azure 数据工厂 Azure Synapse Analytics

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用

通过多个映射数据流转换,你可以基于模式而不是硬编码列名称引用模板列。 这种匹配称为“列模式”。 你可以定义模式以根据名称、数据类型、流、源或位置来匹配列,而不是要求精确的字段名称。 有两种情况可以用到列模式:

  • 如果传入的源字段经常更改,如在文本文件或 NoSQL 数据库中更改列的情况下。 这种情况称为架构偏差
  • 如果要对一大组列执行常见操作, 例如,想要将列名称中具有“total”的每个列强制转换为双精度列。

“派生列”和“聚合”中的列模式

若要在“派生列”、“聚合”或“窗口”转换中添加列模式,请单击列表上方的“添加”或现有派生列旁的加号图标。 选择“添加列模式”。

Screenshot shows the plus icon to Add column pattern.

使用表达式生成器输入匹配条件。 基于列的 nametypestreamoriginposition 创建与列匹配的布尔表达式。 模式将影响条件返回 true 的任何列(偏差列或定义的列)。

Screenshot shows the Derived column's settings tab.

上述列模式匹配双精度类型的每个列,并为每个匹配创建一个派生列。 通过将 $$ 声明为列名称字段,每个匹配的列将使用相同的名称进行更新。 每列的值是现有值,四舍五入为两位小数。

若要验证匹配条件是否正确,可以在“检查”选项卡中验证已定义列的输出架构,或在“数据预览”选项卡中获取数据的快照 。

Screenshot shows the Output schema tab.

分层模式匹配

还可以在复杂的分层结构中生成模式匹配。 展开 Each MoviesStruct that matches 部分,该部分将提示数据流中的每个层次结构。 然后,你可以为所选层次结构中的属性生成匹配的模式。

Screenshot shows hierarchical column pattern.

平展结构

如果数据具有复杂的结构(如数组、层次结构和映射),你可以使用平展转换来展开数组,并使数据非规范化。 对于结构和映射,请在列模式下使用派生列转换从层次结构中形成平展关系表。 可以使用类似于此示例的列模式,它将地理层次结构平展为关系表形式:

Screenshot shows the Derived column's flatten structure.

“选择”和“接收器”转换中基于规则的映射

在“源”和“选择”转换中映射列时,可以添加固定映射或基于规则的映射。 基于列的 nametypestreamoriginposition 进行匹配。 可以具有固定映射和基于规则的映射的任意组合。 默认情况下,列数大于 50 的投影都将默认为基于规则的映射,其在每列上进行匹配并输出所输入的名称。

若要添加基于规则的映射,请单击“添加映射”,然后选择“基于规则的映射” 。

Screenshot shows Rule-based mapping selected from Add mapping.

每个基于规则的映射需要两个输入:要匹配的条件以及每个映射列的名称。 这两个值都是通过表达式生成器输入的。 在左侧表达式框中,输入布尔值匹配条件。 在右侧的表达式框中,指定要将匹配的列映射到的项。

Screenshot shows a mapping.

使用 $$ 语法来引用匹配列的输入名称。 以上图为例,假设用户想要在名称长度不到 6 个字符的所有字符串列上进行匹配。 如果一个传入列被命名为 test,则表达式 $$ + '_short' 会将列重命名为 test_short。 如果这是存在的唯一映射,则所有不符合该条件的列都将从输出的数据中删除。

模式同时匹配偏移列和已定义的列。 若要查看由规则映射的已定义的列,请单击规则旁边的眼镜图标。 使用数据预览来验证输出。

正则表达式映射

如果单击向下的 V 形图标,可指定正则表达式映射条件。 对于与指定的正则表达式条件匹配的列名称,正则表达式映射条件与所有这些名称全部匹配。 这可与标准的基于规则的映射结合使用。

Screenshot shows the regex-mapping condition with Hierarchy level and Name matches.

上述示例与正则表达式模式 (r) 或任何包含小写 r 的列名匹配。 与基于规则的标准映射类似,所有匹配的列都使用 $$ 语法由右侧的条件进行更改。

基于规则的层次结构

如果定义的投影具有层次结构,则可使用基于规则的映射来映射层次结构子列。 指定匹配条件和要映射其子列的复杂列。 每个匹配的子列都将使用右侧指定的“名称为”规则进行输出。

Screenshot shows a rule-based mapping using for a hierarchy.

上面的示例与复杂列 a 的所有子列匹配。 a 包含两个子列 - bc。 “名称为”条件是 $$因此输出架构将包含两个列 - bc

匹配表达式值的模式

  • $$ 在运行时转换为每个匹配项的名称或值。 将 $$ 视为与 this 等效
  • $0 转换为标量类型在运行时的当前列名匹配项。 对于分层类型,$0 表示当前匹配的列层次结构路径。
  • name 表示每个传入列的名称
  • type 表示每个传入列的数据类型。 在这里此处找到数据流类型系统中的数据类型列表。
  • stream 表示与流中的每个流式传输或转换相关联的名称
  • position 是数据流中列的序号位置
  • origin 是产生列或引起上次更新的转换