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 子參數中的陳述式,不會進行錯誤修正。

舉例來說,部分資料庫方言不支援以單一 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 陳述式。接著,使用第二個 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} 替代運算子指定的名稱建立資料表,否則系統會在連線的「Datagroup and PDT Maintenance Schedule」(資料群組和 PDT 維護時間表) 設定中指定的每個觸發檢查間隔 (預設為五分鐘),從頭重建資料表。這可能會導致資料庫或資料倉儲出現非預期的查詢流量。

    使用 sql_create 一次建立 PDT

    如果資料庫方言需要自訂 DDL 指令,且您想在單一步驟中建立 PDT,可以使用 sql_create 定義要執行的完整 SQL CREATE 陳述式,並在單一步驟中建立 PDT。

    create_process 定義的資料表無法用於增量 PDT

    如要將以 SQL 為基礎的 PDT 做為累加 PDT,必須使用 sql 參數定義查詢。以 sql_create 參數或 create_process 參數定義的 SQL PDT 無法逐步建構。

    這是因為 Looker 會使用 INSERT 或 MERGE 指令建立累加 PDT 的增量。衍生資料表無法使用自訂資料定義語言 (DDL) 陳述式定義,因為 Looker 無法判斷建立準確增量所需的 DDL 陳述式。