資料群組

用量

datagroup: datagroup_name {
  max_cache_age: "24 hours"
  sql_trigger: SELECT max(id) FROM my_tablename ;;
  interval_trigger: "12 hours"
  label: "desired label"
  description: "description string"
}
階層
datagroup
預設值

接受
資料群組的 ID,以及定義資料群組屬性的子參數。

定義

使用 datagroup 為「探索」指派快取政策,和/或為持續衍生資料表 (PDT) 指定持續策略。如要為不同的探索和 PDT 設定多項政策,請使用個別的 datagroup 參數指定每項政策。

請提供資料群組的專屬名稱,只能使用英文字母、數字和底線。不得使用其他字元。

您可以為資料群組新增標籤和說明:

使用 datagroup 子參數指定快取和持續性政策的詳細資料:

  • max_cache_age:指定定義時間範圍的字串。如果查詢快取時間超過該時間範圍,Looker 就會使快取失效。下次發出查詢時,Looker 會將查詢傳送至資料庫,以取得最新結果。詳情請參閱本頁的max_cache_age部分。
  • sql_trigger:指定傳回一列一欄的 SQL 查詢。如果查詢傳回的值與查詢先前的結果不同,資料群組就會進入觸發狀態。詳情請參閱本頁的sql_trigger部分。
  • interval_trigger:指定觸發資料群組的時間表,例如 "24 hours"。詳情請參閱本頁的interval_trigger部分。

通常,最佳解決方案是搭配使用 max_cache_agesql_triggerinterval_trigger。指定與資料載入 (ETL) 至資料庫相符的 sql_triggerinterval_trigger 值,然後指定 max_cache_age 值,以便在 ETL 失敗時使舊資料失效。max_cache_age 參數可確保資料群組的快取不會由 sql_triggerinterval_trigger 清除,快取項目會在特定時間到期。這樣一來,資料群組的失敗模式就會是查詢資料庫,而不是從 Looker 快取提供過時資料。

資料群組不得同時含有 sql_triggerinterval_trigger 參數。如果您使用這兩個參數定義資料群組,資料群組會使用 interval_trigger 值並忽略 sql_trigger 值,因為查詢資料庫時,sql_trigger 參數需要使用資料庫資源。

如要使用 使用者屬性指定連線參數,並透過 SQL 查詢觸發條件定義資料群組快取政策,則必須使用 PDT 覆寫欄位建立個別連線。

即使沒有 PDT 覆寫,只要使用 max_cache_age (而非 sql_trigger) 定義資料群組的快取政策,您還是可以將資料群組用於模型及其探索。

max_cache_age

max_cache_age 參數會指定一個字串,其中包含整數,後接「seconds」、「minutes」或「hours」。如果「探索」查詢使用資料群組,快取結果最多可使用這段時間。

當查詢快取的存留時間超過 max_cache_age 時,Looker 會使快取失效。下次發出查詢時,Looker 會將查詢傳送至資料庫,以取得最新結果。如要瞭解資料在快取中的儲存時間,請參閱「快取查詢」說明文件頁面。

max_cache_age 參數只會定義快取失效的時間,不會觸發 PDT 重建作業。如果定義的資料群組只有 max_cache_age,且有任何衍生資料表指派給該資料群組,您就會收到 LookML 驗證警告。如果您將衍生資料表指派給只有 max_cache_age 參數的資料群組,系統會在首次查詢資料表時建構衍生資料表,但衍生資料表會無限期保留在暫存結構定義中,即使再次查詢也不會重建。如要讓 PDT 在特定時間間隔重建,請在資料群組中加入 interval_trigger 參數,定義 PDT 重建時間表。

sql_trigger

使用 sql_trigger 參數指定 SQL 查詢,傳回只有一個資料欄的單一資料列。Looker 會按照資料庫連線的「資料群組與 PDT 維護時間表」欄位中指定的時間間隔,執行 SQL 查詢。如果查詢傳回的值與先前的結果不同,資料群組就會進入觸發狀態。資料群組觸發後,Looker 會重建任何在 datagroup_trigger 參數中指定該資料群組的 PDT。PDT 重建完成後,資料群組會進入就緒狀態,Looker 會使使用該資料群組的任何「探索」快取結果失效。

通常 sql_trigger 會指定 SQL 查詢,指出何時發生新的資料載入 (ETL),例如查詢資料表中的 max(ID)。您也可以使用 sql_trigger 指定一天中的特定時間,方法是查詢目前日期,並視需要將額外時數加到該時間戳記,以達到所需時間 (例如凌晨 4 點)。

請注意 sql_trigger 的下列重要事項:

  • 如果資料庫連線使用 OAuth使用者屬性,且您已停用連線的 PDT,就無法使用 sql_trigger。這是因為 Looker 需要靜態憑證才能存取資料庫,進而執行 sql_trigger 參數中指定的查詢。啟用 PDT 後,即使連線使用動態憑證 (例如 OAuth 或使用者屬性),您仍可使用「PDT 覆寫」欄位,為 PDT 程序提供獨立的靜態登入憑證給 Looker。不過,如果停用 PDT,且連線使用 OAuth 或使用者屬性,您就無法提供 sql_trigger 查詢所需的靜態使用者憑證給 Looker。
  • Looker 不會對 sql_trigger 執行時區轉換。如要在一天中的特定時間觸發資料群組,請在資料庫設定的時區中設定觸發條件。

如要瞭解如何設定 SQL 查詢來觸發資料群組,請參閱 sql_trigger 參數說明文件中的範例

interval_trigger

您可以使用選用的 interval_trigger 子參數,指定重建的時間長度。在 interval_trigger 參數中,您會傳遞包含整數的字串,後接「seconds」、「minutes」或「hours」。

labeldescription

您可以使用選用的 labeldescription 子參數,新增自訂標籤和資料群組說明。您也可以使用語言代碼字串檔案,將這些子參數在地化。

這些子參數會顯示在「管理」面板的「資料庫」部分中,「資料群組」頁面上。如要進一步瞭解這些資料的顯示方式,請參閱「管理設定 - 資料群組」說明文件頁面。

範例

以下範例說明 datagroup 的用途,包括:

建立快取政策,在有新資料可用時或至少每 24 小時擷取新結果

如要建立快取政策,在有新資料可用時或至少每 24 小時擷取新結果,請按照下列步驟操作:

  • 使用 orders_datagroup 資料群組 (位於模型檔案中) 為快取政策命名。
  • 使用 sql_trigger 參數指定查詢,指出有新資料:select max(id) from my_tablename。資料更新時,這項查詢會傳回新號碼。
  • 如果資料已快取 24 小時,請使用 max_cache_age 設定使資料失效。
  • 使用選用的 labeldescription 參數,新增自訂標籤和資料群組說明。
datagroup: orders_datagroup {
  sql_trigger: SELECT max(id) FROM my_tablename ;;
  max_cache_age: "24 hours"
  label: "ETL ID added"
  description: "Triggered when new ID is added to ETL log"
}

如要將 orders_datagroup 快取政策設為模型中探索的預設政策,請在模型層級使用 persist_with 參數,並指定 orders_datagroup

persist_with: orders_datagroup

如要為特定探索使用 orders_datagroup 快取政策,請在 explore 參數下方新增 persist_with 參數,並指定 orders_datagroup。如果模型層級指定了預設資料群組,您可以使用 explore 下的 persist_with 參數,覆寫預設設定。

explore: customer_facts {
  persist_with: orders_datagroup
  ...
}

如要使用 orders_datagroup 資料群組快取政策重建 PDT,您可以在 derived_table 參數下方新增 datagroup_trigger,並指定 orders_datagroup

view: customer_order_facts {
  derived_table: {
    datagroup_trigger: orders_datagroup
    ...
  }
}

建立資料群組,安排在每個月的最後一天傳送資料

您可能想建立時間表,在每個月底傳送內容。不過,每個月的天數不盡相同。您可以建立資料群組,在每個月月底觸發內容傳送作業,無論該月有幾天。

  1. 使用 SQL 陳述式建立資料群組,在每個月底觸發:

    datagroup: month_end_datagroup {
    sql_trigger: SELECT (EXTRACT(MONTH FROM DATEADD( day, 1, GETDATE()))) ;;
    description: "Triggered on the last day of each month"
    }
    

    這個範例採用 Redshift SQL,可能需要稍微調整才能用於其他資料庫。

    這項 SQL 陳述式會傳回明天所在的月份 (如果當月最後一天是明天,則為下個月),因此資料群組會觸發。在其他日子,明天與今天同月,因此不會觸發資料群組。

  2. 在新的或現有排程中選取資料群組。

以資料群組為準的排程只會在以該資料群組參數保存的所有 PDT 完成重新產生程序後傳送,確保傳送的內容包含最新資料。

使用具有連鎖 PDT 的資料群組

如果是永久連鎖衍生資料表,也就是在一個永久衍生資料表 (PDT) 的定義中參照另一個 PDT,您可以使用資料群組,為連鎖 PDT 指定保留策略

舉例來說,以下是模型檔案的一部分,定義名為 user_facts_etl 的資料群組和名為 user_stuff 的探索。user_stuff「探索」會持續使用 user_facts_etl 資料群組:

datagroup: user_facts_etl {
  sql_trigger: SELECT max(ID) FROM etl_jobs ;;
}

explore: user_stuff {
  persist_with: user_facts_etl
  from: user_facts_pdt_1
  join: user_facts_pdt_2 {
    ...
  }
  ...
}

user_stuff「探索」會使用 user_facts_pdt_2 檢視區塊彙整 user_facts_pdt_1 檢視區塊。這兩個檢視區塊都是以 PDT 為基礎,並使用 user_facts_etl 資料群組做為持續性觸發條件。user_facts_pdt_2 衍生資料表會參照 user_facts_pdt_1 衍生資料表,因此這些是連鎖 PDT。以下是這些 PDT 檢視檔案中的部分 LookML:

view: user_facts_pdt_1 {
  derived_table: {
    datagroup_trigger: user_facts_etl
    explore_source: users {
      column: customer_ID {field:users.id}
      column: city {field:users.city}
      ...
    }
  }
}

view: user_facts_pdt_2 {
  derived_table: {
    sql:
      SELECT ...
      FROM ${users_facts_pdt_1.SQL_TABLE_NAME} ;;
  datagroup_trigger: user_facts_etl
  }
}

如果您有連鎖 PDT,請務必確保 PDT 沒有不相容的資料群組快取政策。

Looker 重新產生器會檢查這些 PDT 的狀態,並按照下列方式啟動重建作業:

  • 根據預設,Looker 再生器每五分鐘會檢查資料群組的 sql_trigger 查詢 (Looker 管理員可以使用資料庫連線的「資料群組和 PDT 維護時間表」設定指定這個間隔)。
  • 如果 sql_trigger 查詢傳回的值與先前檢查中的查詢結果不同,資料群組就會進入觸發狀態。在本例中,如果 etl_jobs 資料表有新的 ID 值,就會觸發 user_facts_etl 資料群組。
  • user_facts_etl 資料群組觸發後,Looker 重新產生器會重建使用該資料群組的所有 PDT (也就是以 datagroup_trigger: user_facts_etl 定義的所有 PDT)。在本例中,重新產生器會重建 user_facts_pdt_1,然後重建 user_facts_pdt_2

    如果 PDT 共用相同的 datagroup_trigger,再生器會依附屬關係重建 PDT,先建構其他資料表參照的資料表。如要進一步瞭解 Looker 如何重建連鎖衍生資料表,請參閱「Looker 中的衍生資料表」說明文件頁面。

  • 當再生器重建資料群組中的所有 PDT 時,再生器會將 user_facts_etl 資料群組從觸發狀態中取出。

  • user_facts_etl 資料群組不再處於觸發狀態後,Looker 會重設使用 user_facts_etl 資料群組的所有模型和探索的快取 (也就是以 persist_with: user_facts_etl 定義的所有模型和探索)。在本例中,這表示 Looker 會重設 user_stuff 探索的快取。

  • 系統會傳送任何以 user_facts_etl 資料群組為依據的排定內容傳送。在本範例中,如果排定的傳送作業包含來自「探索」的查詢,系統會從資料庫擷取排定的查詢,以取得最新結果。user_stuff

在模型檔案之間共用資料群組

這個範例說明如何與多個模型檔案共用資料群組。這種做法的優點是,如果需要編輯資料群組,您只需要在一個地方編輯資料群組,這些變更就會套用至所有模型。

如要與多個模型檔案共用資料群組,請先建立只包含資料群組的獨立檔案,然後使用 include 參數在模型檔案中 include 資料群組檔案。

建立資料群組檔案

建立個別的 .lkml 檔案來存放資料群組。您可以建立 .lkml 資料群組檔案,方法與建立個別 .lkml 探索檔案相同。

在本例中,資料群組檔案的名稱為 datagroups.lkml

datagroup: daily {
 max_cache_age: "24 hours"
 sql_trigger: SELECT CURRENT_DATE();;
}

在模型檔案中加入資料群組檔案

建立資料群組檔案後,您可以在兩個模型中include使用 persist_with,將資料群組套用至模型中的個別探索,或套用至模型中的所有探索。

舉例來說,下列兩個模型檔案都會 include datagroups.lkml 檔案。

這個檔案的名稱為 ecommerce.model.lkmldaily 資料群組是在 explore 層級使用,因此只會套用至 orders 探索:

include: "datagroups.lkml"

connection: "database1"

explore: orders {
  persist_with: daily
}

下一個檔案名為 inventory.model.lkmldaily 資料群組是在 model 層級使用,因此會套用至模型檔案中的所有探索:

include: "datagroups.lkml"
connection: "database2"
persist_with: daily

explore: items {
}

explore: products {
}