持续集成 SQL 验证器

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

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

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

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

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

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

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

资源消耗量

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

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

从 SQL 验证中排除维度

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

您可能还需要排除没有 sql 参数的维度,例如 type: distance、type: location 或 type: 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 ;;
    }
    

持续集成和 OAuth 数据库连接

如果您的 LookML 项目使用配置了 OAuth 的数据库连接,则自动化 CI 服务账号无法完成向数据库进行身份验证所需的交互式 OAuth 流程。这会导致 SQL 验证器失败并显示 OAuth log in required 错误。

如需使用持续集成 SQL 验证器,请实施以下解决方法之一:

  • 将数据库连接配置为使用服务账号:将数据库连接的身份验证设置更改为使用服务账号(例如应用默认凭证),而不是 OAuth。
  • 为 CI 使用非 OAuth 模型:创建一个使用非 OAuth 数据库连接的新 LookML 模型,并将其他模型导入其中。确保 Looker CI 用户有权访问此新模型。

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_name 或 explore_name 中使用 * 通配符。

下面是一些示例:

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

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

    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 进行任何更改。如需查看增量验证结果示例,请参阅查看增量验证结果。

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

对于增量验证,请注意以下事项:

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