持续集成 SQL 验证器

持续集成 (CI) SQL 验证器可验证探索中的维度是否能针对您的数据库正确运行。为此,SQL 验证器会在 LookML 项目中对探索运行一系列查询。

默认情况下,SQL 验证器会执行以下任务:

  1. 对于项目中的每个探索,SQL 验证器都会运行一个包含相应探索中每个维度的探索查询。
  2. 如果 Looker 针对探索查询返回错误,SQL 验证器随后会针对探索中的每个维度运行单独的探索查询。

如果您不希望 SQL 验证器测试每个探索中的每个维度,可以选择执行以下一项或多项操作:

如需详细了解在创建或修改 CI 套件时可以配置的选项,请参阅本页面的 SQL 验证器选项部分。如需了解如何运行 SQL 验证器,请参阅运行持续集成套件文档页面。

运行结果页面中,SQL 验证器会显示每个 SQL 错误(按维度和探索归类),并提供指向有问题 LookML 的链接以及用于调试的从此处探索链接

持续集成结果页面,显示 SQL 验证器发现的结果

资源消耗量

SQL 验证器旨在尽可能减少 Looker 和数据仓库中的资源消耗。所有 SQL 验证器查询都包含 LIMIT 0WHERE 1=2 子句。这些子句可有效地指示数据仓库中的查询规划器不处理数据,而是检查 SQL 的有效性。

例如,在 BigQuery 中,此类查询类似于在 BigQuery 中运行试运行查询。对于 BigQuery,LIMIT 0 查询不会扫描数据,因此您不应为 SQL 验证器运行的查询付费。

从 SQL 验证中排除维度

您可能需要从 SQL 验证中排除某些维度,例如依赖于参数的维度,因为在验证期间参数的值将为 null,并且始终会导致 SQL 错误。

您可能还需要排除没有 sql 参数的维度,例如 type: distancetype: locationtype: duration 维度。

如需从 SQL 验证中排除某个维度,您可以通过以下两种方式之一修改该维度的 LookML:

  • 您可以在维度的 LookML 定义的 tags 参数中添加 ci: ignore 语句,如以下示例所示:

    dimension: addresses {
      sql: ${TABLE}.addresses ;;
      tags: ["ci: ignore"]
    }
    
  • 您可以将注释 -- ci: ignore 添加到维度的 LookML 的 sql 字段中,如以下示例所示:

    dimension: addresses {
      sql:
        -- ci: ignore
        ${TABLE}.addresses ;;
    }
    

SQL 验证器选项

您可以在创建或修改持续集成套件时指定多个选项,以配置 SQL 验证器的运行方式。本页面的以下部分介绍了这些选项:

要查询的探索

默认情况下,SQL 验证器会对 LookML 项目中的所有模型和 Explore 运行 SQL 验证。

您可以使用要查询的 Explore 字段来指定要纳入 SQL 验证的 Explore 和模型。

您可以按以下格式指定探索:model_name/explore_name

请注意以下几点:

  • 对于 model_name,请使用不含 .model.lkml 扩展名的模型文件名。例如,如需指定在 thelook.model.lkml 中定义的模型,您应输入 thelook
  • 对于 explore_name,请使用 explore LookML 参数中的 explore_name。例如,如需指定 LookML 项目中定义为 explore: users 的探索,您应输入 users
  • 您可以创建一个以英文逗号分隔的列表来指定多个探索。
  • 您可以在 model_nameexplore_name 中使用 * 通配符。

下面是一些示例:

  • 如需仅指定在文件 thelook.model.lkml 中使用 explore: users 定义的用户探索,您需要输入以下内容:

    thelook/users
    
  • 如需在 thelook.model.lkml 文件中指定名为 usersorders 的探索,您需要输入以下内容:

    thelook/users, thelook/orders
    
  • 如需指定 thelook.model.lkml 中的所有探索,您需要输入以下内容:

    thelook/*
    
  • 如需指定项目内所有模型中名为 users 的每个 Explore,您需要输入以下内容:

    */users
    

要排除的探索

默认情况下,SQL 验证器会对 LookML 项目中的所有模型和 Explore 运行 SQL 验证。

您可以使用要排除的 Explore 字段来指定要从 SQL 验证中排除的 Explore 和模型。

您可以按以下格式指定探索:model_name/explore_name

如需详细了解如何为 SQL 验证器指定 Explore,请参阅要查询的 Explore 部分。

快速失败

默认情况下,SQL 验证器会针对每个探索运行一个查询,其中包含查询中的所有维度。如果该探索查询失败,SQL 验证器随后会单独针对探索中的每个维度执行探索查询。

为了更快地进行验证,您可以启用快速失败选项,这样 SQL 验证器将仅运行探索的初始查询(即一次包含所有维度的查询)。如果该查询返回错误,SQL 验证程序将在 CI 运行结果中显示该错误,然后继续验证下一个探索。

启用快速失败后,验证通常会更快完成。不过,SQL 验证器结果只会显示每个探索的第一个错误,即使多个维度可能存在错误也是如此。这意味着,在您修复第一个错误后,SQL 验证器的下一次运行可能会显示其他错误。

忽略隐藏项

如果您希望 SQL 验证器忽略 Looker 开发者使用 hidden: yes 定义的 LookML 维度,请启用忽略隐藏字段。在验证期间,SQL 验证器不会在探索查询中包含这些维度。

查询并发

默认情况下,SQL 验证器一次最多运行 10 个查询,以避免 Looker 实例不堪重负。您可以使用查询并发数字段指定 SQL 验证器可同时运行的查询数量上限。

查询并发字段的最大值受数据库连接的此连接的并发查询数上限设置限制。

如果您在运行 SQL 验证时发现 Looker 实例运行速度变慢,可以减小此值。

增量验证

增量验证是一种用于查找特定开发分支中独有的错误(在生产环境中尚不存在)的方法。增量验证有助于开发者查找并修复自己负责的错误,而不会受到项目中现有错误的干扰,还可以加快验证速度,尤其是对于包含大量探索的 LookML 项目。

对于增量验证,SQL 验证器仅运行在开发版本(基本参考)和正式版(目标参考)之间发生更改的探索查询。即使生产版本本身存在错误,SQL 验证器也只会返回开发版本独有的错误。

在验证器结果中,SQL 验证器会指明因分支或提交中已编译的 SQL 没有变化而跳过的每个 explore。如需查看增量验证结果示例,请参阅查看增量验证的结果

您可以在创建或修改持续集成套件时,通过在 SQL 验证器部分中选中仅增量错误复选框,为 SQL 验证器启用增量验证。

请注意以下有关增量验证的事项:

  • 在 SQL 验证器验证生产分支本身时(例如在生产分支上手动运行时),增量验证设置不适用。在验证生产分支时,SQL 验证器会运行完整的验证。
  • 快速失败模式不支持增量验证运行,因为需要单独的维度查询来显示项目开发分支特有的增量错误。