用法
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,您不能使用以下任何形参:
示例
分两步在 MySQL 数据库上创建 ctasless_customer_order_facts 永久性派生表。首先,发出由第一个 sql_step 子形参定义的 CREATE TABLE SQL 语句。其次,发出由第二个 sql_step 子形参定义的包含 SELECT 语句的 INSERT INTO SQL 语句:
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 语句。