用量
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 參數指定每項政策。
請提供資料群組的專屬名稱,只能使用英文字母、數字和底線。不得使用其他字元。
label:指定資料群組的選用標籤。詳情請參閱本頁的label和description部分。description:指定資料群組的選用說明,可用於說明資料群組的用途和機制。詳情請參閱本頁的label和description部分。
使用 datagroup 子參數指定快取和持續性政策的詳細資料:
max_cache_age:指定定義時間範圍的字串。如果查詢快取時間超過該時間範圍,Looker 就會使快取失效。下次發出查詢時,Looker 會將查詢傳送至資料庫,以取得最新結果。詳情請參閱本頁的max_cache_age部分。sql_trigger:指定傳回一列一欄的 SQL 查詢。如果查詢傳回的值與查詢先前的結果不同,資料群組就會進入觸發狀態。詳情請參閱本頁的sql_trigger部分。interval_trigger:指定觸發資料群組的時間表,例如"24 hours"。詳情請參閱本頁的interval_trigger部分。
通常,最佳解決方案是搭配使用 max_cache_age 與 sql_trigger 或 interval_trigger。指定與資料載入 (ETL) 至資料庫相符的 sql_trigger 或 interval_trigger 值,然後指定 max_cache_age 值,以便在 ETL 失敗時使舊資料失效。max_cache_age 參數可確保資料群組的快取不會由 sql_trigger 或 interval_trigger 清除,快取項目會在特定時間到期。這樣一來,資料群組的失敗模式就會是查詢資料庫,而不是從 Looker 快取提供過時資料。
資料群組不得同時含有
sql_trigger和interval_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」。
label 和 description
您可以使用選用的 label 和 description 子參數,新增自訂標籤和資料群組說明。您也可以使用語言代碼字串檔案,將這些子參數在地化。
這些子參數會顯示在「管理」面板的「資料庫」部分中,「資料群組」頁面上。如要進一步瞭解這些資料的顯示方式,請參閱「管理設定 - 資料群組」說明文件頁面。
範例
以下範例說明 datagroup 的用途,包括:
建立快取政策,在有新資料可用時或至少每 24 小時擷取新結果
如要建立快取政策,在有新資料可用時或至少每 24 小時擷取新結果,請按照下列步驟操作:
- 使用
orders_datagroup資料群組 (位於模型檔案中) 為快取政策命名。 - 使用
sql_trigger參數指定查詢,指出有新資料:select max(id) from my_tablename。資料更新時,這項查詢會傳回新號碼。 - 如果資料已快取 24 小時,請使用
max_cache_age設定使資料失效。 - 使用選用的
label和description參數,新增自訂標籤和資料群組說明。
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
...
}
}
建立資料群組,安排在每個月的最後一天傳送資料
您可能想建立時間表,在每個月底傳送內容。不過,每個月的天數不盡相同。您可以建立資料群組,在每個月月底觸發內容傳送作業,無論該月有幾天。
使用 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 陳述式會傳回明天所在的月份 (如果當月最後一天是明天,則為下個月),因此資料群組會觸發。在其他日子,明天與今天同月,因此不會觸發資料群組。
在新的或現有排程中選取資料群組。
以資料群組為準的排程只會在以該資料群組參數保存的所有 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.lkml。daily 資料群組是在 explore 層級使用,因此只會套用至 orders 探索:
include: "datagroups.lkml"
connection: "database1"
explore: orders {
persist_with: daily
}
下一個檔案名為 inventory.model.lkml。daily 資料群組是在 model 層級使用,因此會套用至模型檔案中的所有探索:
include: "datagroups.lkml"
connection: "database2"
persist_with: daily
explore: items {
}
explore: products {
}