跳至主要內容
在 GitHub 上編輯此頁面

快取

Superset 使用 Flask-Caching 作為快取用途。Flask-Caching 支援各種快取後端,包括 Redis(建議)、Memcached、SimpleCache(記憶體內)或本機檔案系統。也支援自訂快取後端

可以透過在 superset_config.py 中提供符合 Flask-Caching 設定規格的字典來設定快取。

以下快取設定可以透過這種方式自訂

  • 儀表板篩選器狀態(必要):FILTER_STATE_CACHE_CONFIG
  • 探索圖表表單資料(必要):EXPLORE_FORM_DATA_CACHE_CONFIG
  • 中繼資料快取(選用):CACHE_CONFIG
  • 從資料集查詢的圖表資料(選用):DATA_CACHE_CONFIG

例如,若要使用 Redis 設定篩選器狀態快取

FILTER_STATE_CACHE_CONFIG = {
'CACHE_TYPE': 'RedisCache',
'CACHE_DEFAULT_TIMEOUT': 86400,
'CACHE_KEY_PREFIX': 'superset_filter_cache',
'CACHE_REDIS_URL': 'redis://127.0.0.1:6379/0'
}

相依性

為了使用專用的快取儲存,必須安裝額外的 Python 程式庫

  • 對於 Redis:我們建議使用 redis Python 套件
  • Memcached:我們建議使用 pylibmc 用戶端程式庫,因為 python-memcached 無法正確處理二進位資料的儲存。

可以使用 pip 安裝這些程式庫。

備用中繼資料儲存快取

請注意,某些形式的篩選器狀態和探索快取是必要的。如果未定義其中任一快取,Superset 會回退使用將資料儲存在中繼資料資料庫中的內建快取。雖然建議使用專用快取,但內建快取也可以用於快取其他資料。

例如,若要使用內建快取來儲存圖表資料,請使用以下設定

DATA_CACHE_CONFIG = {
"CACHE_TYPE": "SupersetMetastoreCache",
"CACHE_KEY_PREFIX": "superset_results", # make sure this string is unique to avoid collisions
"CACHE_DEFAULT_TIMEOUT": 86400, # 60 seconds * 60 minutes * 24 hours
}

圖表快取逾時

圖表的快取逾時可能會被個別圖表、資料集或資料庫的設定覆寫。在回退至 DATA_CACHE_CONFIG 中定義的預設值之前,將依序檢查每個設定。

請注意,透過將快取逾時設定為 -1,可以停用圖表資料的快取,無論是每個圖表、資料集或資料庫,或是在 DATA_CACHE_CONFIG 中設定的預設值。

SQL Lab 查詢結果

當啟用非同步查詢時,會使用 SQL Lab 查詢結果的快取,並使用 RESULTS_BACKEND 進行設定。

請注意,此設定並未使用 flask-caching 字典進行設定,而是需要一個 cachelib 物件。

請參閱 透過 Celery 進行非同步查詢 以取得詳細資訊。

快取縮圖

這是一項選用功能,可以透過啟用其在設定上的 功能旗標 來開啟

FEATURE_FLAGS = {
"THUMBNAILS": True,
"THUMBNAILS_SQLA_LISTENERS": True,
}

預設情況下,縮圖會針對每個使用者進行轉譯,對於匿名使用者則會回退使用 Selenium 使用者。若要始終將縮圖轉譯為固定使用者(在此範例中為 admin),請使用以下設定

from superset.tasks.types import ExecutorType

THUMBNAIL_SELENIUM_USER = "admin"
THUMBNAIL_EXECUTE_AS = [ExecutorType.SELENIUM]

對於此功能,您將需要快取系統和 Celery 工作者。所有縮圖都儲存在快取中,並由工作者非同步處理。

一個將影像儲存在 S3 上的範例設定可能是

from flask import Flask
from s3cache.s3cache import S3Cache

...

class CeleryConfig(object):
broker_url = "redis://127.0.0.1:6379/0"
imports = (
"superset.sql_lab",
"superset.tasks.thumbnails",
)
result_backend = "redis://127.0.0.1:6379/0"
worker_prefetch_multiplier = 10
task_acks_late = True


CELERY_CONFIG = CeleryConfig

def init_thumbnail_cache(app: Flask) -> S3Cache:
return S3Cache("bucket_name", 'thumbs_cache/')


THUMBNAIL_CACHE_CONFIG = init_thumbnail_cache
# Async selenium thumbnail task will use the following user
THUMBNAIL_SELENIUM_USER = "Admin"

使用上述範例,儀表板的快取金鑰將會是 superset_thumb__dashboard__{ID}。您可以使用以下方式覆寫 Selenium 的基本網址

WEBDRIVER_BASEURL = "https://superset.company.com"

可以使用 WEBDRIVER_CONFIGURATION 設定其他 Selenium Web Drive 設定。您可以實作自訂函式來驗證 Selenium。預設函式會使用 flask-login 會話 Cookie。以下是自訂函式簽章的範例

def auth_driver(driver: WebDriver, user: "User") -> WebDriver:
pass

然後在設定上

WEBDRIVER_AUTH_FUNC = auth_driver