Looker 會在快取政策允許的情況下,使用先前 SQL 查詢的快取結果 (如果有),藉此減少資料庫負載並提升效能。本頁說明 Looker 的預設快取政策,以及可用選項 (用於修改 Looker 例項中快取結果的時間長度)。
Looker 如何使用快取查詢
就 SQL 查詢而言,Looker 中的快取機制運作方式如下:
當您透過探索、Look 或資訊主頁執行 SQL 查詢時,Looker 會檢查快取,看看是否已快取該查詢的結果。只有在查詢的所有方面都相同 (包括欄位、篩選器、參數和列限制) 時,系統才會使用快取結果。
如果找到快取結果,Looker 會檢查 LookML 模型中定義的快取政策,判斷快取結果是否已過期。如果快取結果未過期,Looker 就會使用查詢的快取結果。
如果查詢沒有快取結果,或是快取結果已過期,Looker 就會對資料庫執行查詢。系統就會快取新的查詢結果。
預設的快取保留政策為一小時。下一節「修改快取保留政策」將說明如何縮短或延長這段時間,並說明如何將快取保留政策同步處理至資料庫的 ETL (擷取、轉換及載入) 程序。
修改快取保留政策
您可以在 LookML Explore 層級和 LookML 模型層級指定快取保留政策。
建議的快取機制是在模型層級使用 datagroup
參數。您可以使用 sql_trigger
參數,並透過 max_cache_age
參數設定快取到期間隔,讓資料群組同步處理模型的快取保留政策與資料庫的 ETL 排程。詳情請參閱「使用資料群組快取查詢,並重建永久衍生資料表 (PDT)」一節。
如要採用更簡單的方法,您可以改為在模型層級或探索層級使用 persist_for
參數。以這種方式使用 persist_for
參數,可讓您設定快取到期間隔,覆寫預設的 1 小時間隔。不過,使用 persist_for
的穩定性不如使用 datagroups,原因請參閱「使用 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
間隔到期時,系統會從快取中刪除資料。
如果快取達到儲存空間上限,系統會根據最近最少使用 (LRU) 演算法移除資料,但無法保證會一次刪除所有已過期 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 就會刪除快取。(您不必將persist_for
參數的持久衍生資料表 (PDT) 設為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 檔案中定義資料群組。如果您想為專案中的不同 Explore 或 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 重建觸發條件,請使用 sql_trigger
或 interval_trigger
子參數建立 datagroup
參數。接著,使用 PDT derived_table
定義中的 datagroup_trigger
子參數,將資料群組指派給個別的 PDT。如果您將 datagroup_trigger
用於 PDT,則不需要為衍生資料表指定任何其他持久化策略。如果您為 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"]
}
}
如要進一步瞭解資料群組如何與持續衍生資料表搭配運作,請參閱「Looker 中的衍生資料表」說明文件頁面。
使用資料群組指定探索查詢快取重設
當資料群組觸發時,Looker 再生器會重建使用該資料群組做為持久化策略的 PDT。重建資料群組的 PDT 後,Looker 會清除使用資料群組重建 PDT 的探索作業快取。如果您想自訂資料群組的查詢快取重設時間表,可以將 max_cache_age
參數新增至資料群組定義。除了 Looker 在重建資料群組的 PDT 時執行的自動查詢快取重設作業外,您還可以使用 max_cache_age
參數,按照指定的時間表清除查詢快取。
如要使用資料群組定義查詢快取政策,請使用 max_cache_age
子參數建立 datagroup
參數。
如要指定要用於探索查詢快取重設作業的資料群組,請使用 persist_with
參數:
- 如要將資料群組指派為模型中所有 Explore 的預設值,請在模型層級 (模型檔案中) 使用
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
快取政策,也就是說,這會是模型中所有 Explore 的預設快取政策。不過,我們不想為 customer_facts
和 customer_background
Explore 使用模型的預設快取政策,因此可以新增 persist_with
參數,為這兩個 Explore 指定不同的快取政策。orders
和 orders_facts
Explore 沒有 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
,這樣系統就會在使用資料群組的每個位置更新快取政策。 - 您可以在「資料群組」頁面中,清除與資料群組相關聯的所有快取。