用量
层次结构
create_process |
默认值
无接受
一个或多个 sql_step 子参数
|
定义
如果您的数据库方言使用自定义数据定义语言 (DDL) 命令,则可以使用 create_process
创建永久性派生表 (PDT)。create_process
会定义将按照列出顺序执行的 SQL 语句列表。每个单独的 SQL 语句都使用 sql_step
子参数指定。每个 sql_step
子参数都可以包含任何合法的 SQL 查询。您可以定义多个 sql_step
子参数,它们会按照指定的顺序一次只执行一个参数。Looker 按原样发出 sql_step
子参数中的语句,而不会更正 Looker 的常规错误修正。
例如,某些数据库方言不支持将 CREATE TABLE as SELECT
作为单个 SQL 语句颁发;它们需要单独的 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
语句(由第二个 sql_step
子参数定义)发出 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 和 Datagroup 维护时间表设置(默认为 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 语句才能创建准确的增量。