如果先前 SQL 查詢的結果已快取,且快取政策允許使用這項功能,Looker 就會使用快取結果,藉此減輕資料庫的負擔並提升效能。本頁說明 Looker 的預設快取政策,以及修改 Looker 執行個體快取結果保留時間的可用選項。
Looker 如何使用快取查詢
如果是 SQL 查詢,Looker 的快取機制運作方式如下:
從「探索」、「Look」或資訊主頁執行 SQL 查詢時,Looker 會檢查快取,確認該查詢是否已有快取結果。只有在查詢的所有方面都相同時,系統才會使用快取的結果,包括欄位、篩選器、參數和資料列限制。
如果找到快取結果,Looker 會檢查 LookML 模型中定義的快取政策,判斷快取結果是否已過期。如果快取結果尚未過期,Looker 會使用快取結果來查詢。
如果系統找不到查詢的快取結果,或快取結果已過期,Looker 就會對資料庫執行查詢。系統隨後會快取新的查詢結果。
預設快取保留政策為一小時。下一節「修改快取保留政策」將說明如何縮短或延長這段時間,以及如何將快取保留政策與資料庫的 ETL (擷取、轉換及載入) 程序同步處理。
修改快取保留政策
您可以在 LookML 探索和 LookML 模型層級指定快取保留政策。
建議的快取機制是在模型層級使用 datagroup
參數。您可以透過資料群組,使用 sql_trigger
參數將模型的快取保留政策與資料庫的 ETL 排程同步,並使用 max_cache_age
參數設定快取到期間隔。詳情請參閱「使用資料群組快取查詢並重建永久衍生資料表 (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
間隔到期時,資料會從快取刪除。
如果快取達到儲存空間上限,系統會根據「最近最少使用 (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 會刪除快取。(您不需要將永久衍生資料表 (PDT) 的persist_for
參數設為0 minutes
,即可盡量減少儲存在快取中的資料量。PDT 會寫入資料庫本身,而非快取。) - 將
suggest_persist_for
參數設為較小的間隔。suggest_persist_for
值會指定 Looker 應在快取中保留篩選器建議的時間長度。篩選建議是根據要篩選的欄位值查詢結果而定。這些查詢結果會保留在快取中,因此當使用者在篩選文字欄位中輸入內容時,Looker 就能快速提供建議。預設值為將篩選器建議快取 6 小時。如要盡量縮短資料在快取中的時間,請將suggest_persist_for
值設為較低的值,例如5 minutes
。
檢查查詢是否從快取傳回
在「探索」視窗中,執行查詢後,您可以查看「執行」按鈕旁的資訊,判斷查詢是否從快取傳回。
如果查詢是從快取傳回,系統會顯示「來自快取」文字。否則會顯示查詢傳回結果所需的時間。
強制從資料庫產生新結果
在「探索」視窗中,您可以強制從資料庫擷取新結果。執行查詢 (包括合併結果查詢) 後,請從「探索動作」齒輪選單中選取「清除快取並重新整理」選項。
使用資料群組快取查詢,並重建永久衍生資料表 (PDT)
使用資料群組,根據 Looker 的快取政策和永久衍生資料表 (PDT) 重建時間表,協調資料庫的 ETL (擷取、轉換及載入) 時間表。
您可以根據新資料加入資料庫的時間,使用資料群組指定 PDT 的重建觸發條件。接著,您可以將相同的資料群組套用至 Explore 或模型,這樣一來,當 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 重建觸發條件,請使用 sql_trigger
或 interval_trigger
子參數建立 datagroup
參數。然後在 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
參數。除了在資料群組的 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
。
使用資料群組觸發排定傳送作業
資料群組也可觸發資訊主頁或資料夾的傳送作業。選擇這個選項後,Looker 會在資料群組完成時傳送資料,確保排定的內容是最新狀態。
使用資料群組的「管理」面板
如果您具備 Looker 管理員角色,可以使用「管理」面板的「資料群組」頁面,查看現有資料群組。您可以查看每個資料群組的連線、模型和目前狀態,以及每個資料群組的標籤和說明 (如果 LookML 中有指定)。您也可以重設資料群組的快取、觸發資料群組,或前往資料群組的 LookML。
使用 persist_for
快取查詢
在模型層級或探索層級使用 persist_for
參數,即可修改 Looker 的預設快取保留間隔 (1 小時)。間隔可以小至 0 minutes
,也可以大至 8760 hours
(1 年) 或更長。
定義 persist_for
參數比定義資料群組更快更簡單,但較不穩定。建議使用資料群組而非 persist_for
,原因如下:
- 資料群組可以與資料庫的 ETL 程序同步。
- 您可以在多個模型和「探索」中重複使用資料群組。也就是說,您可以更新資料群組的
max_cache_age
,系統會更新使用該資料群組的每個位置的快取政策。 - 您可以在「資料群組」頁面中,清除與資料群組相關聯的所有快取。