如果先前 SQL 查詢的結果已快取,且快取政策允許使用這項功能,Looker 就會使用快取結果,藉此減輕資料庫的負擔並提升效能。本頁說明 Looker 的預設快取政策,以及在 Looker 執行個體上修改快取結果保留時間的可用選項。
Looker 如何使用快取查詢
如果是 SQL 查詢,Looker 的快取機制運作方式如下:
從「探索」、「Look」或資訊主頁執行 SQL 查詢時,Looker 會檢查快取,確認該查詢是否已有快取結果。只有在查詢的所有方面都相同時,系統才會使用快取結果,包括欄位、篩選器、參數和資料列限制。
如果找到快取結果,Looker 會檢查 LookML 模型中定義的快取政策,判斷快取結果是否已過期。如果快取結果尚未過期,Looker 會使用快取結果執行查詢。
如果系統找不到查詢的快取結果,或快取結果已過期,Looker 就會對資料庫執行查詢。系統隨後會快取新的查詢結果。
預設快取保留政策為一小時。下一節「修改快取保留政策」將說明如何縮短或延長這段時間,以及如何將快取保留政策與資料庫的 ETL (擷取、轉換及載入) 程序同步處理。
修改快取保留政策
您可以在 LookML 探索層級和 LookML 模型層級指定快取保留政策。
建議的快取機制是在模型層級使用 datagroup 參數。您可以使用 sql_trigger 參數,並透過 max_cache_age 參數設定快取到期間隔,藉此透過資料群組,將模型的快取保留政策與資料庫的 ETL 排程同步處理。詳情請參閱「使用資料群組快取查詢並重建永久衍生資料表 (PDT)」一節。
如要簡化做法,可以改為在模型層級或探索層級使用 persist_for 參數。以這種方式使用 persist_for 參數,即可設定快取到期間隔,覆寫預設的一小時間隔。不過,如「使用 persist_for 快取查詢」一節所述,使用 persist_for 的穩定性不如使用資料群組。
如果探索或模型有定義資料群組或 persist_for,快取政策會依下列方式修改:
- 在
persist_for間隔或資料群組的max_cache_age間隔到期前:如果重新執行查詢,Looker 會從快取提取資料。 - 在
persist_for間隔或資料群組的max_cache_age間隔到期時:Looker 會刪除快取中的資料。 - 經過
persist_for間隔或資料群組的max_cache_age間隔到期後:如果重新執行查詢,Looker 會直接從資料庫提取資料,並重設persist_for或max_cache_age間隔。
這裡的重點是,當 persist_for 或 max_cache_age 間隔到期時,資料會從快取刪除。
如果快取達到儲存空間上限,系統會根據「最近最少使用」演算法清除資料,但無法保證過期 persist_for 或 max_cache_age 間隔的資料會一次全數刪除。
盡可能縮短資料在快取中的時間
Looker 一律會將查詢結果寫入快取。即使 persist_for 和 max_cache_age 間隔設為零,快取資料最多仍會儲存 10 分鐘。儲存在磁碟快取中的所有客戶資料,都會經過進階加密標準 (AES) 加密。
如要盡量縮短資料在快取中的儲存時間,請採取下列做法:
- 針對任何
persist_for參數 (適用於模型或探索) 或max_cache_age參數 (適用於資料群組),將值設為0 minutes。persist_for間隔到期,或資料達到 datagroup 中指定的max_cache_age間隔時,Looker 會刪除快取。(不必將永久衍生資料表 (PDT) 的persist_for參數設為0 minutes,即可盡量減少儲存在快取中的資料量。PDT 會寫入資料庫本身,而非快取。) - 將
suggest_persist_for參數設為較小的間隔。suggest_persist_for值會指定 Looker 應在快取中保留篩選器建議的時間長度。篩選建議是根據要篩選的欄位值查詢結果而來。這些查詢結果會保留在快取中,因此當使用者在篩選文字欄位中輸入內容時,Looker 可以快速提供建議。預設值為將篩選器建議快取 6 小時。如要盡量縮短資料在快取中的時間,請將suggest_persist_for值設為較低的值,例如5 minutes。
檢查查詢是否從快取傳回
在「探索」視窗中,執行查詢後,您可以查看「執行」按鈕旁的資訊,判斷查詢是否從快取傳回。
如果查詢是從快取傳回,系統會顯示「from cache」文字。否則會顯示查詢傳回結果所需的時間。
強制從資料庫產生新結果
在「探索」視窗中,您可以強制從資料庫擷取新結果。執行查詢 (包括合併結果查詢) 後,請從「探索動作」齒輪選單中選取「清除快取並重新整理」選項。
使用資料群組快取查詢,並重建永久衍生資料表 (PDT)
使用資料群組,將資料庫的 ETL (擷取、轉換及載入) 時間表,與 Looker 的快取政策和永久衍生資料表 (PDT) 重建時間表相互協調。
您可以根據新資料加入資料庫的時間,使用資料群組指定 PDT 的重建觸發條件。接著,您可以將相同的資料群組套用至探索或模型,這樣一來,快取結果也會在 PDT 重建時過期。
或者,您也可以使用資料群組,將 PDT 重建觸發條件與快取時間上限分開。如果您的探索項目同時以更新頻率極高的資料為基礎,並加入重建頻率較低的 PDT,這項功能就非常實用。在這種情況下,您可能希望查詢快取重設的頻率高於 PDT 重建的頻率。
定義資料群組
使用 datagroup 參數定義資料群組,位置可以是模型檔案,也可以是專屬的 LookML 檔案。如果您想為專案中的不同探索或永久衍生資料表 (PDT) 設定不同的快取和 PDT 重建政策,可以定義多個資料群組。
datagroup 參數可包含下列子參數:
label:指定資料群組的選用標籤。description:指定資料群組的選填說明,可用於說明資料群組的用途和機制。max_cache_age:指定定義時間範圍的字串。如果查詢快取的存留時間超過該時間範圍,Looker 就會使快取失效。下次發出查詢時,Looker 會將查詢傳送至資料庫,以取得最新結果。sql_trigger:指定會傳回一列一欄的 SQL 查詢。如果查詢傳回的值與查詢先前的結果不同,資料群組就會進入觸發狀態。interval_trigger:指定觸發資料群組的時間表,例如"24 hours"。
資料群組至少必須有 max_cache_age 參數、sql_trigger 參數或 interval_trigger 參數。
以下範例資料群組已設定 sql_trigger,每天重建 PDT。此外,max_cache_age 會每兩小時清除一次查詢快取,以防任何「探索」將 PDT 加入其他資料,而這些資料的重新整理頻率高於一天一次。
datagroup: customers_datagroup {
sql_trigger: SELECT DATE(NOW());;
max_cache_age: "2 hours"
}
定義資料群組後,您可以將其指派給探索和 PDT:
- 如要將資料群組指派給 PDT,請使用
derived_table參數下的datagroup_trigger參數。如需範例,請參閱本頁的「使用資料群組指定 PDT 的重建觸發條件」一節。 - 如要將資料群組指派給探索,請在模型層級或探索層級使用
persist_with參數。如需範例,請參閱本頁的「使用資料群組指定探索的查詢快取重設」一節。
使用資料群組指定 PDT 的重建觸發條件
如要使用資料群組定義 PDT 重建觸發條件,請建立 datagroup 參數,並使用 sql_trigger 或 interval_trigger 子參數。然後在 PDT 的 derived_table 定義中,使用 datagroup_trigger 子參數將資料群組指派給個別 PDT。如果 PDT 使用 datagroup_trigger,則衍生資料表不需要指定任何其他保存策略。如果為 PDT 指定多個持續性策略,Looker IDE 會顯示警告,且只會使用 datagroup_trigger。
以下是使用 customers_datagroup 資料群組的 PDT 定義範例。這項定義也會在 customer_id 和 first_order_date 上新增多個索引。如要進一步瞭解如何定義 PDT,請參閱「Looker 中的衍生資料表」說明文件頁面。
view: customer_order_facts {
derived_table: {
sql: ... ;;
datagroup_trigger: customers_datagroup
indexes: ["customer_id", "first_order_date"]
}
}
如要進一步瞭解資料群組如何與 PDT 搭配運作,請參閱「Looker 中的衍生資料表」說明文件頁面。
使用資料群組指定探索的查詢快取重設
觸發資料群組時,Looker 再生器會重建使用該資料群組做為持續性策略的 PDT。資料群組的 PDT 重建完成後,Looker 會清除使用資料群組重建 PDT 的探索快取。如要自訂資料群組的查詢快取重設時間表,可以在資料群組定義中加入 max_cache_age 參數。除了 Looker 在重建資料群組的 PDT 時自動重設查詢快取外,您也可以使用 max_cache_age 參數,依指定時間表清除查詢快取。
如要使用資料群組定義查詢快取政策,請建立含有 max_cache_age 子參數的 datagroup 參數。
如要指定用於探索查詢快取重設的資料群組,請使用 persist_with 參數:
- 如要將資料群組指派為模型中所有探索的預設群組,請在模型層級 (模型檔案中) 使用
persist_with參數。 - 如要將資料群組指派給個別探索,請使用
explore參數下的persist_with參數。
以下範例顯示在模型檔案中定義的資料群組,名稱為 orders_datagroup。資料群組具有 sql_trigger 參數,指定查詢 select max(id) from my_tablename 用於偵測 ETL 何時發生。即使 ETL 暫時不會發生,資料群組的 max_cache_age 也會指定快取資料最多只能使用 24 小時。
模型的 persist_with 參數會指向 orders_datagroup 快取政策,因此這會是模型中所有探索的預設快取政策。不過,我們不想對 customer_facts 和 customer_background 探索使用模型的預設快取政策,因此可以新增 persist_with 參數,為這兩項探索指定不同的快取政策。orders 和 orders_facts 探索不含 persist_with 參數,因此會使用模型的預設快取政策:orders_datagroup。
datagroup: orders_datagroup {
sql_trigger: SELECT max(id) FROM my_tablename ;;
max_cache_age: "24 hours"
}
datagroup: customers_datagroup {
sql_trigger: SELECT max(id) FROM my_other_tablename ;;
}
persist_with: orders_datagroup
explore: orders { ... }
explore: order_facts { ... }
explore: customer_facts {
persist_with: customers_datagroup
...
}
explore: customer_background {
persist_with: customers_datagroup
...
}
如果同時指定 persist_with 和 persist_for,系統會顯示驗證警告,並使用 persist_with。
使用資料群組觸發排定傳送作業
資料群組也可以用來觸發資訊主頁或 Look 的傳送作業。選擇這個選項後,Looker 會在資料群組完成時傳送資料,確保排定的內容為最新狀態。
使用資料群組的「管理」面板
如果您具備 Looker 管理員角色,可以使用「管理」面板的「資料群組」頁面,查看現有資料群組。您可以查看每個資料群組的連線、模型和目前狀態,以及每個資料群組的標籤和說明 (如果 LookML 中有指定)。您也可以重設資料群組的快取、觸發資料群組,或前往資料群組的 LookML。
使用 persist_for 快取查詢
在模型層級或探索層級使用 persist_for 參數,即可修改 Looker 的預設快取保留間隔 (1 小時)。你可以設定的間隔範圍為 0 minutes 到 8760 hours (1 年) 以上。
定義 persist_for 參數比定義資料群組更快更簡單,但較不穩定。建議使用資料群組而非 persist_for,原因如下:
- 資料群組可以與資料庫的 ETL 程序同步。
- 您可以在多個模型和探索中重複使用資料群組。也就是說,您可以更新資料群組的
max_cache_age,系統會更新使用該資料群組的每個位置中的快取政策。 - 您可以在「資料群組」頁面中,清除與資料群組相關聯的所有快取。