快取查詢

如果先前 SQL 查詢的結果已快取,且快取政策允許使用這項功能,Looker 就會使用快取結果,藉此減輕資料庫的負擔並提升效能。本頁說明 Looker 的預設快取政策,以及修改 Looker 執行個體快取結果保留時間的可用選項。

Looker 如何使用快取查詢

如果是 SQL 查詢,Looker 的快取機制運作方式如下:

  1. 從「探索」、「Look」或資訊主頁執行 SQL 查詢時,Looker 會檢查快取,確認該查詢是否已有快取結果。只有在查詢的所有方面都相同時,系統才會使用快取的結果,包括欄位、篩選器、參數和資料列限制。

  2. 如果找到快取結果,Looker 會檢查 LookML 模型中定義的快取政策,判斷快取結果是否已過期。如果快取結果尚未過期,Looker 會使用快取結果來查詢。

  3. 如果系統找不到查詢的快取結果,或快取結果已過期,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_formax_cache_age 間隔。

這裡的重點是,當 persist_formax_cache_age 間隔到期時,資料會從快取刪除

如果快取達到儲存空間上限,系統會根據「最近最少使用 (LRU)」演算法逐一清除資料,但無法保證過期的 persist_formax_cache_age 間隔資料會一次全數刪除。

盡可能縮短資料在快取中的時間

Looker 一律會將查詢結果寫入快取。即使 persist_formax_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 的重建觸發條件

如要使用資料群組定義 PDT 重建觸發條件,請使用 sql_triggerinterval_trigger 子參數建立 datagroup 參數。然後在 PDT 的 derived_table 定義中,使用 datagroup_trigger 子參數,將資料群組指派給個別 PDT。如果為 PDT 使用 datagroup_trigger,則不需要為衍生資料表指定任何其他持續性策略。如果為 PDT 指定多個持續性策略,Looker IDE 會顯示警告,且只會使用 datagroup_trigger

以下是使用 customers_datagroup 資料群組的 PDT 定義範例。這個定義也會在 customer_idfirst_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_factscustomer_background 探索使用模型的預設快取政策,因此可以新增 persist_with 參數,為這兩項探索指定不同的快取政策。ordersorders_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_withpersist_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,系統會更新使用該資料群組的每個位置的快取政策。
  • 您可以在「資料群組」頁面中,清除與資料群組相關聯的所有快取。