Snowflake

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

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

加密網路流量

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

在 Snowflake 建立 Looker 使用者

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

Snowflake 控制台,其中已勾選「All Queries」核取方塊。

建議您在每個 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;

如要為連線啟用自助式探索,也必須將 CREATE STAGE 授予 Looker 角色:

GRANT CREATE STAGE ON SCHEMA looker_scratch TO ROLE looker_role;

建立 Looker 與資料庫的連線

在 Looker 的「Admin」(管理) 部分,依序選取「Connections」(連線) 和「Add Connection」(新增連線)。

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

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

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

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

    • 如果客戶想導入 Snowflake 的金鑰組驗證來連線至資料庫,應使用金鑰組。在「使用者名稱」欄位中,指定用來連線至 Snowflake 的使用者帳戶。在「Key Pair File」(金鑰組檔案) 欄位中,上傳已加密或未加密的 p8 格式金鑰檔案。Snowflake 的說明文件說明如何建立私密金鑰檔案。如要上傳加密的 p8 檔案,請按照下列步驟操作:

      • 啟用「金鑰組已加密」切換鈕。
      • 在「金鑰組檔案解密密碼」欄位中,指定 p8 檔案的密碼。
    • 如果客戶不需要持續衍生資料表 (PDT),且想要為連線設定 OAuth,就應使用 OAuth。

  • 選用設定 - 其他 JDBC 參數:從 Snowflake JDBC 驅動程式新增其他 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」欄位中設定替代值,覆寫上述各項參數,例如:&AUTOCOMMIT=FALSE

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

  • 選用設定 - 啟用 PDT 覆寫:Snowflake 連線支援 PDT 覆寫,因此您可以輸入 PDT 程序專用的個別 JDBC 參數,例如主機、通訊埠、資料庫、使用者名稱、密碼、結構定義、額外參數,以及「PDT 覆寫的連線後陳述式」欄位的值。如要在 PDT 覆寫中使用金鑰組驗證,請按照下列步驟操作:

    • 在「PDT 覆寫金鑰組檔案」欄位中,上傳已加密或未加密的 p8 格式金鑰檔案。Snowflake 的說明文件說明如何建立私密金鑰檔案。
    • 如果您上傳的是加密的 p8 檔案,請在「PDT 覆寫密碼」欄位中指定 p8 檔案的密碼。

如要確認連線成功,請按一下「連線設定」頁面底部「狀態詳細資料」部分的「測試連線」按鈕。

如果 Looker 顯示「可連線」,請按下「連線」建立連線。

資料庫連線隨即會新增至 Looker「連線」管理頁面的清單。

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

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

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

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

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

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

    Looker 的「使用者屬性」頁面,顯示 Snowflake 倉儲使用者屬性,並將值指派給群組。

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

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

管理 Snowflake 的自動暫停功能

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

通常有兩種方法可以管理:

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

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

  2. 如果已啟用永久衍生資料表 (PDT),Looker 的預設設定是每 5 分鐘檢查一次衍生資料表是否需要重新產生。這項檢查會讓 Snowflake 倉儲保持啟用狀態。不過,您可能希望 Snowflake 在非工作時間暫停 warehouse,以降低成本。如要這麼做,請修改 PDT 重新產生排程,詳情請參閱維護排程說明文件。

PDT 支援

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

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

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

為 Snowflake 連線設定 OAuth

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

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

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

使用 OAuth 的 Snowflake 連線,在 OAuth 權杖到期時,使用者必須定期重新登入。Snowflake OAuth 權杖的效期上限是透過 Snowflake 設定。

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

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

設定 Snowflake 資料庫,以便與 Looker 搭配使用 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_ID 和 OAUTH_CLIENT_SECRET,您會在後續步驟中用到這些值。

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

  4. 貼上OAUTH_CLIENT_ID和OAUTH_CLIENT_SECRET值,這些值是您在本程序稍早從資料庫取得。

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

測試 OAuth 連線

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

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

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

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

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

登入 Snowflake 執行查詢

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

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

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

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

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

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

選取「登入」後,Looker 會顯示「授權 OAuth 連線」對話方塊,通知您授權連線後,Looker 執行個體就能代表您存取資料,且管理員或開發人員等具備權限的 Looker 使用者,可能可以查看您的資料。選取「授權」,繼續前往 Snowflake 登入對話方塊。(Looker 會將這項同意聲明儲存在瀏覽器的本機儲存空間中;如果您清除本機儲存空間,下次啟動 OAuth 授權流程時,系統會再次顯示對話方塊)。輸入 Snowflake 憑證並選取「登入」,然後選取「允許」,授予 Looker 存取 Snowflake 帳戶的權限。

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

支援的 JDBC 參數

如果是 Snowflake,Looker 支援在連線的「Additional JDBC parameters」欄位中使用下列 JDBC 參數。如要瞭解這些參數,請參閱資料庫的說明文件。

  • account
  • allowUnderscoresInHost
  • application
  • authenticator
  • AUTOCOMMIT
  • CLEAR_BATCH_ONLY_AFTER_SUCCESSFUL_EXECUTION
  • CLIENT_SESSION_KEEP_ALIVE
  • db
  • disableGcsDefaultCredentials
  • disableOCSPChecks
  • disableSamlURLCheck
  • disableSocksProxy
  • ENABLE_WILDCARDS_IN_SHOW_METADATA_COMMANDS
  • enablePatternSearch
  • HTTP_CLIENT_CONNECTION_TIMEOUT
  • HTTP_CLIENT_SOCKET_TIMEOUT
  • IMPLICIT_SERVER_SIDE_QUERY_TIMEOUT
  • insecureMode
  • JDBC_DEFAULT_FORMAT_DATE_WITH_TIMEZONE
  • JDBC_GET_DATE_USE_NULL_TIMEZONE
  • jdbc_use_session_timezone
  • JDBC_TREAT_DECIMAL_AS_INT
  • loginTimeout
  • MAX_TLS_VERSION
  • maxHttpRetries
  • MIN_TLS_VERSION
  • MULTI_STATEMENT_COUNT
  • networkTimeout
  • nonProxyHosts:如果是公開 Looker 執行個體,nonProxyHosts 參數的值必須是執行個體的公開 IP 位址。
  • oauthAuthorizationUrl:如果是公開 Looker 執行個體,oauthAuthorizationUrl 參數的值必須是執行個體的公開 IP 位址。
  • oauthClientId
  • oauthClientSecret
  • oauthScope
  • oauthTokenRequestUrl:如果是公開 Looker 執行個體,oauthTokenRequestUrl 參數的值必須是執行個體的公開 IP 位址。
  • ocspFailOpen
  • OWNER_ONLY_STAGE_FILE_PERMISSIONS_ENABLED
  • passcode
  • passcodeInPassword
  • password
  • private_key
  • private_key_base64
  • private_key_pwd
  • privatekey
  • proxyHost:如果是公開 Looker 執行個體,proxyHost 參數的值必須是執行個體的公開 IP 位址。
  • proxyPassword
  • proxyPort
  • proxyProtocol
  • proxyUser
  • QUERY_TAG
  • queryTimeout
  • QUOTED_IDENTIFIERS_IGNORE_CASE
  • ROLE
  • schema
  • STATEMENT_QUEUED_TIMEOUT_IN_SECONDS
  • STATEMENT_TIMEOUT_IN_SECONDS
  • stringsQuotedForColumnDef
  • TIMESTAMP_INPUT_FORMAT
  • TIMESTAMP_TYPE_MAPPING
  • TIMEZONE
  • token
  • tracing
  • useProxy
  • user
  • warehouse
  • WEEK_OF_YEAR_POLICY
  • WEEK_START
  • workloadIdentityProvider

功能支援

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

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

功能 是否支援?
Looker (Google Cloud Core)
對稱式匯總函式
衍生資料表
永久 SQL 衍生資料表
永久原生衍生資料表
穩定檢視畫面
終止查詢
以 SQL 為基礎的樞紐
時區
SSL
小計
JDBC 其他參數
區分大小寫
位置類型
名單類型
百分位數
不重複值的百分位數
SQL Runner 顯示程序
SQL Runner 說明資料表
SQL Runner 顯示索引
SQL Runner Select 10
SQL Runner 計數
SQL Explain
OAuth 2.0 憑證
內容留言
連線集區
HLL 草圖
匯總感知
增量 PDT
毫秒
微秒
materialized view
期間比較指標
近似不重複值的計數
資料庫內分析模型
自訂日曆

後續步驟

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