跳到主要内容 跳到补充内容

添加 SQL 转换

可以在转换任务中包含基于 SQL 的表。SQL 转换允许您将 SQL SELECT 查询输入到管道中,以定义复杂或简单的转换。您可以让 SQL 助手使用生成式人工智能根据文本提示生成查询。如果执行了初始加载或增量加载,则也可以使用宏调整查询以运行。

有关创建转换任务的详细信息,请参阅转换数据

添加 SQL 转换

要在转换数据任务中添加 SQL 转换,请执行以下操作:

  1. 转换中,选择要包含在查询中的数据集,然后单击添加 SQL 转换

    名称 中设置转换的名称。有关其他设置的更多信息,请参阅设置

    当您准备好创建 SQL 转换时,单击添加

    显示编辑 SQL 转变

  2. 在查询窗格中编写查询以返回基于 SQL 的表。

    有关更多信息,请参阅编辑 SQL 查询

  3. 单击 运行查询

    这将获取元数据和数据预览。

  4. 查看 参数中的参数。

    有关更多信息,请参阅参数

  5. 元数据中设置主键。

    有关更多信息,请参阅元数据

  6. 如果对查询结果满意,单击 保存并关闭。数据集现在被添加到目标列表中,您可以预览它。

编辑 SQL 查询

在查询窗格中键入查询以返回基于 SQL 的表。查询只能读取您选择的源数据集,但您可以使用添加来添加更多源数据集。

  • 您可以创建语句以从 对象 加载数据集。单击 更多,然后单击 在编辑器中生成 select 语句

  • 您可以通过单击 更多,然后单击 复制,将数据集的名称复制到剪贴板。

  • 单击 > 可将数据集或列名移动到编辑器。

  • 单击 搜索 可在编辑器中查找和替换文本。

信息注释您可以使用 SQL 助手 通过生成式 AI 生成查询。有关更多信息,请参阅从文本提示生成 SQL 转换SQL 助手Qlik Cloud 政府 中不可用。

如果使用增量加载,则可以使用调整查询以在执行初始加载或增量加载时运行。

有关更多信息,请参阅使用宏使查询适应加载类型

键盘快捷键

信息注释以下指明的键盘快捷键适用于 Windows 工作环境。对于 macOS,使用 Command 替代 Ctrl 键。
  • Ctrl+F 搜索与替换

  • Ctrl+/ 注释/取消注释当前行

  • Ctrl+Enter 运行查询

  • Ctrl+Z 撤消

  • Ctrl+Y 重做

预览结果

您可以使用结果中的数据示例预览结果。

信息注释必须在 Administration 中的租户级别启用数据预览。您可以在设定中的特性控制下找到数据集成 中查看数据选项。

必须为您分配以下角色才能预览数据:

  • 连接所在空间中的可以查看数据

  • 项目所在空间中的可以查看

将显示使用数据样本的结果。可以使用行数设置要包含在示例中的数据行数。

  • 点击上次执行的查询以查看上次执行的查询的上次运行时间和持续时间。

筛选结果

您可以按一列或多列筛选结果。

  • 点击第一列上的更多以进行筛选,然后点击筛选

    选择要使用的运算符和要筛选的值。

    您可以通过点击添加筛选器来添加更多列筛选器。

筛选器只会影响现有的样本数据。

对结果进行排序

您可以按特定列对数据样本进行排序。

  • 点击要排序的列上的 更多,然后选择 升序排序降序排序

排序只会影响现有的样本数据。如果您使用筛选器只包括 2024 年的订单并反转排序顺序,则样本数据仍将只包含 2024 年的订单。

管理显示的列

您可以选择要在结果中显示的列。保存转换时不会保存此选择。

  • 通过单击列上的 更多,然后单击隐藏列来隐藏列。

  • 通过单击任意列上的 更多,然后单击显示的列来管理所有列的显示。

参数

单击参数以更改 SELECT 查询中的参数。参数应映射到源对象或目标对象。

当您执行以下操作时,参数会自动映射:

  • Objects 中使用 在编辑器中生成 select 语句

  • 单击 > 将数据集或列名移动到编辑器中。

  • 参数名称与 Objects 中表的表名称匹配。

信息注释如果您使用任意参数名称,则必须手动映射参数。只有与数据集名称匹配的参数名称才会自动映射。

您可以映射至

  • 历史 2 型结构 (_history)

  • 当前结构

  • 目标对象

    只有在增量宏中定义参数时,才能映射目标对象。

提示注释您可以用引用替换参数,以使查询更易于阅读。更改参数r中的值,SELECT 查询中的引用也将更改。

元数据

您可以在元数据中编辑元数据设置。

  • 列中设置主键。

  • 如果列在 Nullable 列中是可为 Null 的,则进行设置。

  • 选择一列,单击编辑按钮,设置列名、键、可为 null 的项和数据类型。

运行查询

您可以在开发过程中随时通过点击运行查询来运行查询。首次运行查询时,将检索元数据。当查询运行时,您可以前往元数据并设置主键,这是完成转换所必需的。

信息注释如果编辑器包含多个查询,您可以通过选择查询并点击运行查询来运行单个查询。

使用宏使查询适应加载类型

如果使用增量加载,则可以使用调整查询以在执行初始加载或增量加载时运行。

选择宏并将查询添加到相应的子句中。

  • Q_RUN_INCREMENTAL 添加了一个子句,您可以在其中放置仅在执行增量加载时运行的查询。

  • Q_RUN_INITIAL_LOAD 添加了一个子句,您可以在其中放置仅在执行初始加载时运行的查询。

不需要为每个宏指定完整的查询。您可以根据您的用例调整或添加代码。.

用例:使用日期范围的增量筛选器:

在这个用例中,需要使用自定义 SQL 转换一组订单数据。由于这是一个大型数据集,您希望包括增量筛选,以确保增量负载只考虑过去 12 小时的订单。

这是基本查询:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

这是在增量运行期间应用的筛选器,您只考虑过去 12 小时内添加的订单:

WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP())
提示注释在实现基于 SQL 的表时,建议使用 ${TABLE} 符号替换表名。这可以防止对数据库和模式名称进行硬编码,这些名称可能会随着环境的变化而变化,例如在从开发转移到生产时。

这是一个完整的查询,使用筛选器宏,表名用 ${TABLE} 符号替换:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() ) {{/QLIK_FUNC_IF}}

这将产生一个初始加载查询:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

以及增量加载查询:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() )

用例:使用目标中的数据进行增量筛选:

在这个用例中,需要使用自定义 SQL 转换一组订单数据。由于订单是一个大型数据集,因此需要包括增量筛选,以确保增量加载只考虑比目标表中的数据更新的订单详细信息记录。您还需要标记一行是由初始加载还是增量加载处理的。

信息注释正如您在本例中看到的那样,宏可以用于调整查询的任何部分以进行初始加载或增量加载。

这是基本查询:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

这是要在增量运行期间应用的筛选器。“ORDERS_DERIVED” 是目标数据集的名称。

WHERE OD.UPDATE_DTM > = (SELECT MAX(LAST_UPDATE_DTM) FROM “mydb”.”myTrasformTask”.”ORDERS_DERIVED” )
提示注释增量加载还可以将 ${TABLE} 符号映射到由转换任务创建的目标对象。

这是一个完整的查询,使用筛选器宏,表名用 ${TABLE} 符号替换。如果负载是初始的,则 LOADED_BY 设置为 INIT,如果负载是增量的,则为 INCR

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, {{#QLIK_FUNC_IF Q_RUN_INITIAL_LOAD}} ‘INIT’ as LOADED_BY {{/QLIK_FUNC_IF}} {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} ‘INCR’ as LOADED_BY {{/QLIK_FUNC_IF}} FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} ) {{/QLIK_FUNC_IF}}

这将产生一个初始加载查询:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INIT’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

以及增量加载查询:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INCR’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} )

设置

点击设置以编辑 SQL 转换的设置。

  • 名称中输入目标数据集的名称。

    也可以在描述中添加较长的说明。

  • 具体化中,选择转换后的输出是否应具体化。您可以选择从数据任务设置中继承设置。

    • 如果开启,将创建表格并处理相关的 ELT 处理。

    • 选择关闭将创建即时执行转换的视图。

  • 历史数据存储(类型 2)中,选择是否要保留历史数据。您可以选择从数据任务设置中继承设置。此设置要求开启物化功能。

  • 增量加载允许您通过应用筛选器或其他条件来调整增量数据加载的查询,以减少使用宏处理的数据集。只有当数据具体化为表时,增量加载才可用。

    • 如果增量加载开启

      任务的第一次执行将执行初始加载,将查询的所有结果插入到目标表中。后续执行将利用您为增量处理定义的筛选器或特定条件执行增量加载。在增量加载期间,任务将只把数据作为更新或插入处理,不管理删除。

    • 如果增量加载关闭

      任务的第一次执行将执行初始加载,将查询的所有结果插入到目标表中。后续执行将通过与目标表进行比较来处理查询的所有结果,并处理新的、更改的或删除的记录。

    信息注释如果查询将选择目标中应该存在的所有记录,请将增量加载设置为关闭。将从目标中删除未选择的记录。
  • 最佳实践

    • 添加 SQL 转换时,不会自动定义主键。在数据集选项卡中向数据集添加键。

    • 不要在转换后的输出中手动创建列标题。

    • 避免将 SELECT 与 * 一起使用,因为每次运行查询时这都可能返回不同的列。如果模式发生了更改,请相应地更改查询,然后再次执行描述表。然后可以编辑列和调整表。

    本页面有帮助吗?

    如果您发现此页面或其内容有任何问题 – 打字错误、遗漏步骤或技术错误 – 请告诉我们!