create_process

用法

derived_table: {
  create_process: {
    sql_step:
      CREATE TABLE ${SQL_TABLE_NAME}
      (customer_id int(11),
      lifetime_orders int(11)) ;;
    sql_step:
      INSERT INTO ${SQL_TABLE_NAME}
      (customer_id,
      lifetime_orders)
      SELECT customer_id, COUNT(*)
      AS lifetime_orders
      FROM order
      GROUP BY customer_id ;;
  }
}
层次结构
create_process
默认值

接受
一个或多个 sql_step 子形参

定义

如果您的数据库方言使用自定义数据定义语言 (DDL) 命令,您可以使用 create_process 创建持久性派生表 (PDT)create_process 定义了将按列出的顺序执行的 SQL 语句列表。每个单独的 SQL 语句都使用 sql_step 子参数指定。每个 sql_step 子参数都可以包含任何合法的 SQL 查询。您可以定义多个 sql_step 子形参,它们将按指定顺序依次执行。Looker 会按原样发出 sql_step 子参数中的语句,而不会进行 Looker 常规的错误修正。

例如,某些数据库方言不支持作为单个 SQL 语句发布的 CREATE TABLE as SELECT;它们需要单独的 SQL 语句。因此,无法基于这些方言创建传统的基于 SQL 的永久性派生表create_process 参数提供了一种创建 PDT 的替代方法,即创建按顺序发出的一系列单独的 SQL 语句。

您还可以使用 create_process 来支持各种方言,例如 Google 预测性 BigQuery ML 机器学习模型。

create_process 参数表示您正在为派生表编写完整的 CREATE 语句,包括任何索引。如需为具有 create_process 的派生表添加索引,请使用 sql_step 参数指定索引的 SQL。

对于使用 create_process 定义的 PDT,您不能使用以下任何参数:

  • indexes
  • cluster_keys
  • distribution
  • distribution_style
  • partition_keys
  • sortkeys
  • 示例

    通过两个步骤在 MySQL 数据库中创建ctasless_customer_order_facts永久性派生表。首先,发出由第一个 sql_step 子形参定义的 CREATE TABLE SQL 语句。其次,发出包含 SELECT 语句的 INSERT INTO SQL 语句,该语句由第二个 sql_step 子参数定义:

    view: ctasless_customer_order_facts {
      derived_table: {
        datagroup_trigger: some_datagroup
        create_process: {
          sql_step: CREATE TABLE ${SQL_TABLE_NAME} (
                             customer_id int(11),
                             lifetime_orders int(11)
                           ) ;;
          sql_step: INSERT INTO ${SQL_TABLE_NAME}(customer_id, lifetime_orders)
                            SELECT customer_id, COUNT(*) AS lifetime_orders
                             FROM order
                             GROUP BY customer_id ;;
        }
      }
    }
    

    注意事项

    ${SQL_TABLE_NAME} 替换运算符

    您可以使用 ${SQL_TABLE_NAME} 替换运算符来替换正在创建的 PDT 的计算名称。这样可确保 SQL 语句正确包含 LookML view 参数中给定的 PDT 名称。

    create_process 必须创建一个名称由 ${SQL_TABLE_NAME} 替换运算符指示的表,否则系统会在连接的数据组和 PDT 维护时间表设置中指定的每个触发检查间隔(默认值为 5 分钟)从头开始重建该表。这可能会导致数据库或数据仓库出现意外的查询流量。

    使用 sql_create 一步创建 PDT

    如果您的数据库方言需要自定义 DDL 命令,并且您想一步创建 PDT,可以使用 sql_create 定义要执行的完整 SQL CREATE 语句,并一步创建 PDT。

    使用 create_process 定义的表无法用于增量 PDT

    如需用作增量 PDT,基于 SQL 的 PDT 必须使用 sql 参数定义查询。使用 sql_create 参数或 create_process 参数定义的基于 SQL 的 PDT 无法以增量方式构建。

    这是因为 Looker 使用 INSERT 或 MERGE 命令来创建增量 PDT 的增量。派生表无法使用自定义数据定义语言 (DDL) 语句进行定义,因为 Looker 无法确定创建准确增量所需的 DDL 语句。