# 创建规则以转换数据集

您可以创建可重用的转换规则，以在 Replication、登陆、存储、转换和数据集市数据任务中对数据集执行全局转换。

信息注释由于[模式演变](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/Landing-data-data-sources.htm#Schema)而添加到任务中的数据集和列不支持全局转换。

选择数据集，单击转换规则，然后单击添加转换规则以创建新的转换规则。

1. 选择转换类型并单击下一步。

   您可以执行以下转换：

   * 重命名数据集

   * 覆盖数据消息发布

     信息注释

     * 仅适用于 Kafka 目标。

     * 如果您正在使用 Data Movement gateway（本地 Kafka 必需），则需要版本 2025.5.40 或更高版本。

   * 重命名列

   * 添加列

   * 放置列

   * 转换数据类型

   * 更换列值

2. 选择转换范围并单击下一步。

3. 选择要执行的转换操作，然后单击下一步。

4. 为规则添加名称和说明，然后单击完成。

运行数据任务时将应用该规则。如果添加了多个规则，则这些规则将按其列出的顺序执行。

提示注释可以在规则的表达式中使用变量，例如列名。有关更多信息，请参阅[在表达式中包含元数据](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Transformation-rules.htm#Using)。

## 转变类型

当多个转换应用于同一数据集或列时，范围始终在原始源名称上，而操作与应用前一规则后的值相关。例如，如果您有以下规则：

1. 重命名所有以 Abc\_ (`Abc_%`) 开头的数据集，将前缀更改为 ABC\_。

2. 将后缀 \_zzz 添加到以 ABC\_ (`ABC_%`) 开头的数据集。

将规则应用于这些数据集将提供这些结果。请注意，在第二条规则之后， \_zzz 后缀不会添加到 ABC\_customers，因为作用域始终位于原始名称 (Abc\_customers) 上。

| 初始数据集名称 | 规则 1 之后的数据集名称 | 规则 2 之后的数据集名称 |
| --- | --- | --- |
| Abc\_customers | ABC\_customers | ABC\_customers |
| ABC\_Suppliers | ABC\_Suppliers | ABC\_Suppliers\_zzz |

## 重命名数据集

1. 选择重命名数据集，然后单击下一步。

2. 设置转换范围，即要重命名的数据集。您可以使用 % 作为通配符从一个或多个数据资产中选择多个数据集。

   单击下一步。

3. 设置转变操作。您可以执行以下操作：

   * 将数据集重命名为固定名称。

   * 添加前缀或后缀。

   * 删除前缀或后缀。

   * 替换前缀或后缀。

   * 将大小写更改为小写或大写。

   * 使用表达式替换数据集名称。

   * 使用字典替换数据集名称。

     有关更多信息，请参阅[使用字典重命名数据集或列](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Transformation-rules.htm#Renaming)。

   准备好后单击下一步。

4. 设置规则的名称，然后单击完成。

## 自定义数据消息发布

信息注释仅适用于 Kafka 目标。

1. 选择 自定义数据消息发布，然后点击 下一步。

2. 设置转换范围，即要覆盖数据消息发布设置的哪些数据集。您可以使用 % 作为通配符从一个或多个数据资产中选择多个数据集。

   单击下一步。

3. 设置转变操作。

   对于每个设置，当前任务设置由字段任务设置: &lt;设置&gt;指示（例如，任务设置: 特定主题）。

   有关这些设置的说明，请参阅[数据消息发布](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings.htm#Data3)。

   您可以保留任务设置，或使用表达式构建器指定自定义主题、消息键或分区键。

   信息注释这些设置将覆盖任务设置，但不会覆盖为单个数据集配置的设置。

   要使用表达式构建器：

   1. 

      根据需要选择自定义主题、自定义消息键或自定义分区键字段，然后单击the 表达式图标 icon。

      信息注释自定义主题必须已经存在，或者必须配置代理以创建它们。

      表达式生成器已打开。

   2. 

      构建表达式。

      您可以使用函数、运算符和元数据来构建表达式。

      单击 the 右箭头图标 icon 以将项目移动到表达式中。

      您还可以在表达式中使用 Kafka 支持的所有函数。

   3. 

      单击提取参数。

      现在，您可以将测试值添加所有参数的要测试的值。

   4. 

      单击测试表达式。

      现在应该可以使用测试值看到表达式的结果。

   5. 

      准备好后，单击确定。

      表达式已添加到字段。

   ### 构建表达式

   您需要构建一个表达式来定义自定义值。您可以使用：

   * 函数

     字符串函数、数字函数、空校验函数、数据和时间函数以及逻辑函数。

   * 运算符

     数学和逻辑运算符表达式上方的工具栏中也提供了一些运算符。这也是查找字符串连接运算符的地方，||。

   * 元数据

     以下元数据可用：

     * $Q\_M\_SCHEMA\_NAME
     * $Q\_M\_SOURCE\_SCHEMA\_NAME
     * $Q\_M\_SOURCE\_TABLE\_NAME
     * $Q\_M\_TABLE\_NAME

   单击 the 右箭头图标 icon 以将项目移动到表达式中。

   您还可以在表达式中使用 Kafka 支持的所有函数。

   准备好后单击下一步。

4. 设置规则的名称，然后单击完成。

## 重命名列

1. 选择重命名列，然后单击下一步。

2. 设置转换范围，即要重命名的列。您可以使用 % 作为通配符从一个或多个数据任务和数据集中选择多个列。

   您还可以将操作限制为特定的数据类型。将数据类型设置为 UNSPECIFIED，可对所有匹配列执行该操作，无论其数据类型如何。

   单击下一步。

   也可以将作用域限制为键或可为 null 的列。

3. 设置转变操作。您可以执行以下操作：

   * 将列重命名为固定名称。

   * 添加前缀或后缀。

   * 删除前缀或后缀。

   * 替换前缀或后缀。

   * 将列大小写更改为小写或大写。

   * 使用表达式替换列名称。

   * 使用字典替换列名。

     有关更多信息，请参阅[使用字典重命名数据集或列](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Transformation-rules.htm#Renaming)。

   准备好后单击下一步。

4. 设置规则的名称，然后单击完成。

## 添加列

1. 选择添加列，然后单击下一步。

2. 设置转换范围，即要添加列的数据集。您可以使用 % 作为通配符，将该列添加到一个或多个数据集。

   单击下一步。

3. 设置新列的详细信息：

   * 列名称。

   * 使用表达式生成器设置列的值。

   * 选择添加到主键以将此列用作主键。

   * 在目标数据类型中设置数据类型。

   * 如果数据类型为 BYTES、STRING 或 WSTRING，请指定长度。

     如果数据类型为 NUMERIC，请同时指定精确度和比例。

   准备好后单击下一步。

4. 设置规则的名称，然后单击完成。

## 放置列

1. 选择放置列，然后单击下一步。

2. 设置转换范围，即要放置的列。您可以使用 % 作为通配符从一个或多个数据资产和数据集中选择多个列。

   您还可以将操作限制为特定的数据类型。将数据类型设置为 UNSPECIFIED，可对所有匹配列执行该操作，无论其数据类型如何。

   单击下一步。

   也可以将作用域限制为键或可为 null 的列。

3. 设置规则的名称，然后单击完成。

## 转换数据类型

1. 选择转换数据类型，然后单击下一步。

2. 设置转换范围，即要转换数据类型的列。您可以使用 % 作为通配符从一个或多个数据资产和数据集中选择多个列。

   您还可以将操作限制为特定的数据类型。将数据类型设置为 UNSPECIFIED，可对所有匹配列执行该操作，无论其数据类型如何。

   单击下一步。

   也可以将作用域限制为键或可为 null 的列。

3. 设置转变操作。

   * 将目标数据类型设置为要转换到的数据类型。

     * 如果数据类型为 BYTES、STRING 或 WSTRING，请选择以下选项之一来更改其长度：

       * 固定值：指定长度。

       * 表达式：按照下文 [创建表达式](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Transformation-rules.htm#Creating) 中的说明创建表达式。

     * 如果数据类型为 NUMERIC 或 DATETIME，请为 精度 和 小数位数 选择以下选项之一：

       * 固定值： 指定一个值。

       * 表达式：按照下文 [创建表达式](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Transformation-rules.htm#Creating) 中的说明创建表达式。

4. 准备好后单击下一步。

5. 设置规则的名称，然后单击完成。

另请参阅：[管理数据类型](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Managing-data-types.htm)

### 创建表达式

有关共享编辑器指南和移动任务参考，请参阅 [构建表达式](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Building-expressions.htm)。以下步骤也支持规则元数据表达式。

若要创建表达式：

1. 使用 函数、运算符和 元数据 构建表达式。

   单击 the 右箭头图标 icon 可将项目移至构建表达式区域。

   您还可以在表达式中使用云数据平台支持的所有函数。

2. 单击提取参数。

   现在，您可以将测试值添加所有参数的要测试的值。

3. 单击测试表达式。

   现在应该可以使用测试值看到表达式的结果。

4. 准备好后，单击确定。

该表达式定义了目标数据类型。

数据类型长度的示例表达式：

$Q\_M\_DATATYPE\_LENGTH\*2

## 更换列值

1. 选择替换列值，然后单击下一步。

2. 设置转换范围，即要替换哪些列的值。您可以使用 % 作为通配符从一个或多个数据资产和数据集中选择多个列。

   您还可以将操作限制为特定的数据类型。将数据类型设置为 UNSPECIFIED，可对所有匹配列执行该操作，无论其数据类型如何。

   单击下一步。

   也可以将作用域限制为键或可为 null 的列。

3. 设置转变操作。

   * 设置表达式以定义目标值中的替换值。

   * 将目标数据类型设置为替换列的数据类型。

   * 如果数据类型为 BYTES、STRING 或 WSTRING，请指定长度。

     如果数据类型为 NUMERIC，请同时指定精确度和比例。

   准备好后单击下一步。

4. 设置规则的名称，然后单击完成。

## 使用字典重命名数据集或列

您可以使用字典重命名数据集或列。当您处理大量使用模糊命名约定的对象时，这很有用。您可以在字典编辑器中添加翻译，也可以导入包含翻译的 CSV 文件。您还可以将字典导出为 CSV 文件，并在另一个数据资源中重复使用。

选择重命名数据集或重命名列后，转换操作中可以使用按字典重命名。单击 the 书籍 icon 以打开字典编辑器。

* 单击添加翻译并填写源名称和已翻译名称以将翻译添加到词典中。

创建所需翻译后，单击确定关闭词典编辑器。

信息注释只有在字典中有与源名称的完全匹配时，才会替换该名称。不支持部分匹配。

### 导入翻译

您可以从包含字典的CSV文件导入翻译。文件每行应包含一个翻译。示例：

```
sourcename1,translatedname1
sourcename2,translatedname2
sourcename3,translatedname3
```

* 单击从 CSV 附加并选择要导入的 CSV 文件。

导入的词典中的翻译将附加到词典中。

### 导出翻译

您可以将字典导出为 CSV 文件，以便在其他数据资产中重用。

* 单击导出到 CSV。

字典将导出为 CSV 文件。

## 在表达式中包含元数据

表达式编辑器中的元数据选项卡包含可以在转换规则中的表达式中使用的以下变量。

信息注释在数据移动过程中，原始源数据类型会先映射到 Qlik Talend Data Integration 数据类型，然后再选择性地进行转换并映射到目标。例如，MySQL 中的 BIT 数据类型映射到 Qlik Talend Data Integration 中的 BOOLEAN 数据类型。因此，名称中包含 DATATYPE 的变量要么指 Qlik Talend Data Integration 数据类型，要么指转换后的数据类型，而不是原始源数据类型。

可以在转换规则中使用的变量

| 变量 | 说明 |
| --- | --- |
| $Q\_D\_COLUMN\_DATA | 源表中的列值。 |
| $Q\_M\_COLUMN\_NAME | 修改后的列名。 |
| $Q\_M\_DATATYPE\_LENGTH | 修改后的列的数据类型长度。 |
| $Q\_M\_DATATYPE\_NAME | 修改后的列的数据类型。 |
| $Q\_M\_DATATYPE\_PRECISION | 修改后的列的数据类型精度。 |
| $Q\_M\_DATATYPE\_SCALE | 修改后的列的数据类型刻度。 |
| $Q\_M\_SCHEMA\_NAME | 源模式的名称。 |
| $Q\_M\_SOURCE\_COLUMN\_NAME | 源表中列的名称。 |
| $Q\_M\_SOURCE\_DATATYPE\_LENGTH | 源表中列的数据类型长度。 |
| $Q\_M\_SOURCE\_DATATYPE\_NAME | 源表中列的数据类型。 |
| $Q\_M\_SOURCE\_DATATYPE\_PRECISION | 源表中列的数据类型精度。 |
| $Q\_M\_SOURCE\_DATATYPE\_SCALE | 源表中列的数据类型刻度。 |
| $Q\_M\_SOURCE\_TABLE\_NAME | 源表的名称。 |
| $Q\_M\_TABLE\_NAME | 修改后的源表的名称。 |

可以重命名转换范围内的所有表，以使用以下表达式将架构名称添加为前缀：

`${Q_M_SCHEMA_NAME}||'.'||${Q_M_SOURCE_TABLE_NAME}`.

例如，这会将 dwprod 模式中的表 products 重命名为 dwprod.products。

## 管理规则

您可以在规则 窗格中管理规则。

* 单击规则。

您可以启用/禁用规则、删除规则和编辑规则。