Snowflake

如要將 Looker 連接至 Snowflake,請按照下列步驟操作:

  1. 在 Snowflake 上建立 Looker 使用者,並佈建存取權。
  2. 在 Looker 中設定資料庫連線

加密網路流量

最佳做法是加密 Looker 應用程式與資料庫之間的網路流量。請考慮使用「啟用安全資料庫存取權」說明文件頁面所述的其中一個選項。

在 Snowflake 上建立 Looker 使用者

建議使用下列指令建立 Looker 使用者。請務必個別執行每一行,或在 Snowflake 連線面板中選取「All Queries」(所有查詢) 選項,確保所有行都會執行 (根據預設,Snowflake 只會執行選取的行):

已選取「All Queries」核取方塊的 Snowflake 控制台。

建議您在每個 GRANT 陳述式中加入 ON FUTURE 關鍵字,這樣新建立的物件就會擁有相同權限,不需採取進一步行動。

-- change role to ACCOUNTADMIN
use role ACCOUNTADMIN;

-- create role for looker
create role if not exists looker_role;
grant role looker_role to role SYSADMIN;
    -- Note that we are not making the looker_role a SYSADMIN,
    -- but rather granting users with the SYSADMIN role to modify the looker_role

-- create a user for looker
create user if not exists looker_user
password = <enter password here>;
grant role looker_role to user looker_user;
alter user looker_user
set default_role = looker_role
default_warehouse = looker_wh;

-- change role
use role SYSADMIN;

-- create a warehouse for looker (optional)
create warehouse if not exists looker_wh

-- set the size based on your dataset
warehouse_size = medium
warehouse_type = standard
auto_suspend = 1800
auto_resume = true
initially_suspended = true;
grant all privileges
on warehouse looker_wh
to role looker_role;

-- grant read only database access (repeat for all database/schemas)
grant usage on database <database> to role looker_role;
grant usage on schema <database>.<schema> to role looker_role;

-- rerun the following any time a table is added to the schema
grant select on all tables in schema <database>.<schema> to role looker_role;
-- or
grant select on future tables in schema <database>.<schema> to role looker_role;

-- create schema for looker to write back to
use database <database>;
create schema if not exists looker_scratch;
use role ACCOUNTADMIN;
grant ownership on schema looker_scratch to role SYSADMIN revoke current grants;
grant all on schema looker_scratch to role looker_role;

建立 Looker 資料庫連線

在 Looker 的「管理」部分中,選取「連線」,然後按一下「新增連線」

填寫連線詳細資料。在這些設定中,有絕大部分都是多數資料庫方言的常用設定。詳情請參閱「將 Looker 連線至資料庫」說明文件頁面。以下設定說明包含 Snowflake 專用的附註:

資料庫設定 - 主機:輸入 Snowflake 主機名稱。看起來會像 <account_name>.snowflakecomputing.com。請參閱各區域的 Snowflake 帳戶名稱範例,確保您為部署作業使用正確的值。

資料庫設定 - 驗證方法:選取下列其中一種驗證方法:

  • 資料庫帳戶僅適用於需要時間改用多重驗證方法的現有客戶,且必須在 2025 年 11 月前完成。指定用於連線至 Looker 的 Snowflake 使用者帳戶使用者名稱密碼

  • 如果客戶想實作 Snowflake 的金鑰組驗證,以便連線至資料庫,就應使用金鑰組。在「使用者名稱」欄位中,指定要用來連線至 Snowflake 的使用者帳戶。在「金鑰組檔案」欄位中,上傳未加密的 p8 格式金鑰檔案;系統不支援加密金鑰檔案。如要瞭解如何建立私密金鑰檔案,請參閱 Snowflake 的說明文件

  • 如果客戶不需要持續性衍生資料表 (PDT),且想為連線設定 OAuth,就應使用 OAuth

選用設定 - 啟用 PDT:使用 OAuth 驗證的 Snowflake 連線不支援 PDT。如果需要 PDT,請改用「金鑰配對」驗證選項。

選用設定 - 其他 JDBC 參數:從 Snowflake JDBC 驅動程式新增其他 JDBC 參數。

  • 新增 warehouse=<YOUR WAREHOUSE NAME>
  • 此外,根據預設,Looker 會在每個工作階段中設定下列 Snowflake 參數

    • TIMESTAMP_TYPE_MAPPING=TIMESTAMP_LTZ
    • JDBC_TREAT_DECIMAL_AS_INT=FALSE
    • TIMESTAMP_INPUT_FORMAT=AUTO
    • AUTOCOMMIT=TRUE

      您可以在「Additional JDBC parameters」(額外 JDBC 參數) 欄位中設定替代值,藉此覆寫每個參數,例如:&AUTOCOMMIT=FALSE

如要確認連線是否成功,請按一下「測試」。如需疑難排解資訊,請參閱「測試資料庫連線」說明文件頁面。

如要儲存這些設定,請按一下「連線」

依據群組或使用者指定 Snowflake 倉庫

您可以使用 Looker 使用者屬性,為個別 Looker 使用者或群組指派不同的 Snowflake 資料倉儲。舉例來說,如果使用者需要不同等級的運算能力,這項功能就非常實用。您可以為需要更多運算資源的使用者指派這類倉儲,並為需求較少的使用者指派資源較少的倉儲。

如要依群組或使用者指定倉庫,請按照下列步驟操作:

  1. 在 Looker 中新增群組使用者
  2. 在 Looker 中定義使用者屬性,用於儲存 Snowflake 倉庫名稱。你可以為這項屬性命名,例如 snowflake_wh

    Looker 的「使用者屬性」頁面,顯示 Snowflake 倉庫使用者屬性。

  3. 在您剛定義的使用者屬性中,將倉庫名稱值指派給需要不同倉庫存取權的群組使用者

    Looker 中的「使用者屬性」頁面,顯示已指派給群組值的 Snowflake 倉庫使用者屬性。

  4. 在「連線設定」頁面的「其他 JDBC 參數」欄位中,新增下列內容,並將 snowflake_warehouse 替換為您定義的使用者屬性名稱:

      warehouse={{ _user_attributes['snowflake_warehouse'] }}
    
  5. 如要測試個別連線設定,您可以sudo指派倉庫名稱值的使用者。

管理 Snowflake 的自動暫停功能

Snowflake 倉庫預設會啟用自動暫停功能。一段時間後,倉庫會自動暫停。如果倉庫遭到停權,所有查詢都會產生錯誤。這項錯誤不會顯示在資訊主頁上 (通常這些錯誤會導致系統不顯示任何資料),但會顯示在透過「探索」頁面查詢的任何使用者面前。

通常會使用下列兩種方法管理這項設定:

  1. Snowflake 具有自動繼續功能,可在查詢時繼續執行倉庫。不過,恢復倉庫最多可能需要五分鐘,因此查詢作業會停止回應五分鐘,然後才會傳回結果。您無法在 Looker 中設定自動繼續播放功能。在 Snowflake UI 的「倉庫」分頁中啟用這項功能:

    Snowflake UI 中的「倉庫」分頁,顯示自動暫停和自動恢復核取方塊。

  2. 如果已啟用持續衍生資料表 (PDT),Looker 的預設設定是每 5 分鐘檢查一次衍生資料表是否需要重新產生。這項檢查會讓 Snowflake 倉庫保持啟用狀態。不過,您可能會希望 Snowflake 在非工作時間暫停倉庫,以降低成本。如要達成這個目標,請按照維護時間表說明文件所述,修改 PDT 重新產生時間表。

支援 PDT

使用 OAuth 的 Snowflake 連線不支援 PDT。

如要支援永久衍生資料表,請為 PDT 建立 Snowflake 使用者帳戶,該帳戶必須具備資料庫的寫入權限,以及 Looker 用於建立 PDT 的暫存結構定義。在 Looker 的「連線設定」頁面中,開啟「永久衍生資料表 (PDT) 設定」部分下「選用設定」分頁中的「啟用 PDT」切換鈕。接著,在「暫存資料庫」欄位中,輸入 Looker 用來建立 PDT 的暫存結構定義名稱。

請注意,使用金鑰組驗證的 Snowflake 連線不支援PDT 覆寫

如果是 Snowflake 連線,Looker 會將 Snowflake 的 AUTOCOMMIT 參數值設為 TRUE,這是 Snowflake 的預設值。Looker 執行 SQL 指令來維護 PDT 註冊系統時,需要 AUTOCOMMIT

設定 Snowflake 連線的 OAuth

Looker 支援 Snowflake 連線的 OAuth,也就是說,每位 Looker 使用者都會透過自己的 OAuth 使用者帳戶向資料庫進行驗證。

資料庫管理員可透過 OAuth 執行下列工作:

  • 稽核哪些 Looker 使用者對資料庫執行查詢
  • 使用資料庫層級權限,強制執行角色型存取權控管
  • 針對存取資料庫的所有程序和動作使用 OAuth 權杖,而不是在多個位置嵌入資料庫 ID 和密碼
  • 直接透過資料庫撤銷特定使用者的授權

如果 Snowflake 連線使用 OAuth,使用者必須在 OAuth 權杖到期時重新登入。Snowflake OAuth 權杖的最高有效期限由 Snowflake 本身設定。

請注意資料庫層級 OAuth 連線的下列事項:

  • 使用 OAuth 的 Snowflake 連線不支援永久衍生資料表 (PDT)
  • 如果使用者的 OAuth 權杖過期,他們擁有的任何 Looker 排程或快訊都會受到影響。為防範這種情況,Looker 會在權杖到期前 14 天、7 天和 1 天,傳送通知電子郵件給每個排程和快訊的擁有者。使用者可以前往 Looker 使用者頁面,重新授權 Looker 存取資料庫,避免排程和快訊中斷。詳情請參閱「個人化使用者帳戶設定」說明文件頁面。
  • 由於使用 OAuth 的資料庫連線是「每個使用者」專屬,因此快取政策也是每個使用者專屬,而不只是每個查詢專屬。也就是說,只有在快取期間內同一位使用者執行相同查詢時,Looker 才會使用快取結果。如要進一步瞭解快取,請參閱「快取查詢」說明文件頁面。
  • 使用 OAuth 時,您無法在 Snowflake 使用者帳戶中切換至其他角色。如 Snowflake 說明文件所述,除非預設角色為 ACCOUNTADMIN 或 SECURITYADMIN,否則 Snowflake 會使用 Snowflake 使用者帳戶的預設角色。由於這些角色已遭 OAuth 封鎖,Snowflake 會改用 PUBLIC 角色。詳情請參閱 Snowflake 說明文件
  • 當 Looker 管理員以其他使用者身分執行 sudo 時,管理員會使用該使用者的 OAuth 存取權杖。如果使用者的存取權杖已過期,管理員就無法代表該使用者建立新權杖。如要瞭解如何使用 sudo 指令,請參閱「使用者」文件頁面。

為 Looker 設定 Snowflake 資料庫的 OAuth

如要使用 OAuth 建立 Snowflake 與 Looker 的連線,必須在 Snowflake 中設定 OAuth 整合功能。這需要具備 ACCOUNTADMIN 權限的 Snowflake 使用者帳戶。

  1. 在 Snowflake 中執行下列指令,其中 <looker_hostname> 是 Looker 執行個體的主機名稱:

    CREATE SECURITY INTEGRATION LOOKER
      TYPE = OAUTH
      ENABLED = TRUE
      OAUTH_CLIENT = LOOKER
      OAUTH_REDIRECT_URI = 'https://<looker_hostname>/external_oauth/redirect';
    
  2. 執行下列指令,取得 OAuth 用戶端 ID 和密鑰:

    SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('LOOKER');
    

    回應會包含 OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET,您會在後續步驟中用到。

  3. 在 Looker 中,按照本頁「建立 Looker 與資料庫的連線」一節所述,建立與 Snowflake 倉庫的新連線。建立新連結時,請在「驗證」欄位中選取「OAuth」選項。選取「OAuth」選項後,Looker 會顯示「OAuth 用戶端 ID」和「OAuth 用戶端密鑰」欄位。

  4. 貼上您在本程序稍早從資料庫取得的 OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET 值。

  5. 完成將 Looker 連線至資料庫的其餘程序。

測試 OAuth 連線

設定 Looker 與資料庫的連線後,您可以透過下列任一方式測試連線:

  • 如「將 Looker 連線至資料庫」說明文件頁面所述,選取「連線設定」頁面底部的「測試」按鈕。
  • 在「連線」管理頁面中,選取連線清單旁的「測試」按鈕,如「連線」說明文件頁面所述。

此外,您也可以按照下列步驟測試連線,並將連線部署至模型:

  1. 在 Looker 中進入開發模式
  2. 前往使用 Snowflake 連線的 Looker 專案檔案
  3. 開啟模型檔案,將模型的 connection 值替換為新的 Snowflake 連線名稱,然後儲存模型檔案。
  4. 開啟任一模型中的探索或資訊主頁,然後執行查詢。嘗試執行查詢時,Looker 會提示您登入 Snowflake
  5. 按照 Snowflake 的登入提示操作,然後輸入 Snowflake 憑證。

成功登入 Snowflake 後,Looker 會將您帶回查詢。如果查詢執行無誤,您可以提交新的連線值,並將變更部署至正式環境

登入 Snowflake 執行查詢

為 OAuth 設定 Snowflake 連線後,系統會提示使用者登入 Snowflake,才能執行查詢。包括來自「探索」、「資訊主頁」、「Look」和「SQL Runner」的查詢。

Looker 使用者介面,顯示 OAuth 登入提示。

使用者也可以在「帳戶」頁面的「OAuth 連線憑證」部分登入 Snowflake。

如要使用 Looker 登入 Snowflake 帳戶,請按照下列步驟操作:

Looker 的「帳戶」頁面,顯示「OAuth 連線憑證」部分。

  1. 按一下 Looker 使用者選單。
  2. 選取「帳戶」
  3. 在「帳戶」頁面中,前往「OAuth 連線憑證」部分,然後選取適當 Snowflake 資料庫的「登入」按鈕。

選取「Log In」會顯示 Snowflake 登入對話方塊。輸入 Snowflake 憑證並選取「登入」,然後選取「允許」,授予 Looker 存取 Snowflake 帳戶的權限。

透過 Looker 登入 Snowflake 後,您隨時可以透過「帳戶」頁面登出或重新授權憑證,詳情請參閱「個人化使用者帳戶」說明文件頁面。

功能支援

如要讓 Looker 支援某些功能,資料庫方言也必須支援這些功能。

自 Looker 25.10 起,Snowflake 支援下列功能:

功能 是否支援?
支援級別
支援
Looker (Google Cloud Core)
對稱式匯總函式
衍生資料表
永久 SQL 衍生資料表
永久原生衍生資料表
穩定版檢視畫面
終止查詢
以 SQL 為基礎的樞紐
時區
SSL
小計
JDBC 其他參數
區分大小寫
位置類型
名單類型
百分位數
不重複值的百分位數
SQL Runner 顯示程序
SQL Runner 說明資料表
SQL Runner 顯示索引
SQL Runner 選取 10
SQL Runner 計數
SQL 說明
OAuth 2.0 憑證
背景資訊註解
連線集區
HLL 草圖
匯總知名度
增量 PDT
毫秒
微秒
具體化檢視表
與前一段時期相比的指標
不重複值的概略計數

後續步驟

將資料庫連線至 Looker 後,請為使用者設定登入選項