持续集成 SQL 验证器

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

默认情况下,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 项目中的所有模型和探索运行 SQL 验证。

您可以使用要查询的探索字段指定要包含在 SQL 验证中的探索和模型。

您可以按以下格式指定探索: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 的每个探索,您需要输入以下内容:

    */users
    

要排除的探索

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

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

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

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

快速失败

默认情况下,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 验证器会运行完整验证。
  • 增量验证运行不支持快速失败模式,因为需要单独的维度查询来显示特定于项目开发分支的增量错误。