Snowflake

如需将 Looker 连接到 Snowflake,请按照以下步骤操作:

  1. 在 Snowflake 上创建 Looker 用户并预配访问权限。
  2. 在 Looker 中设置数据库连接。

加密网络流量

对 Looker 应用与数据库之间的网络流量进行加密是一种最佳实践。可以考虑启用安全的数据库访问文档页面上介绍的某个选项。

在 Snowflake 上创建 Looker 用户

我们建议您使用以下命令创建 Looker 用户。请务必单独运行每一行,或在 Snowflake 连接面板中选择所有查询选项,以确保运行所有行(默认情况下,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;

如果您想在连接上启用自助式探索,还必须向 Looker 角色授予 CREATE STAGE:

GRANT CREATE STAGE ON SCHEMA looker_scratch TO ROLE looker_role;

创建与数据库的 Looker 连接

在 Looker 的管理部分中,选择连接,然后点击添加连接。

填写连接详情。大多数设置对于大多数数据库方言都是通用的。如需了解相关信息,请参阅将 Looker 连接到您的数据库文档页面。以下设置说明包含特定于 Snowflake 的备注:

  • 数据库设置 - 主机:输入 Snowflake 主机名。该路径类似于 <account_name>.snowflakecomputing.com。请查看按区域列出的 Snowflake 账号名称示例,确保为您的部署使用正确的值。

  • 数据库设置 - 身份验证方法:选择以下其中一种身份验证方法:

    • Database Account 仅供现有客户使用,这些客户需要在 Snowflake 的 2025 年 11 月截止日期之前过渡到多重身份验证方法。指定将用于连接到 Looker 的 Snowflake 用户账号的用户名和密码。

    • 密钥对:如果客户想要实现 Snowflake 的密钥对身份验证来连接到其数据库,则应使用此选项。在用户名字段中,指定将用于连接到 Snowflake 的用户账号。在密钥对文件字段中上传加密或未加密的 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

      您可以通过在其他 JDBC 参数字段中设置替代值来替换上述每个参数,例如:&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. 在连接设置页面的其他 JDBC 参数字段中,添加以下内容,并将 snowflake_warehouse 替换为您定义的用户属性的名称:

      warehouse={{ _user_attributes['snowflake_warehouse'] }}
    
  5. 如需测试各个连接设置,您可以 sudo 为您为其分配了仓库名称值的用户。

管理 Snowflake 的自动暂停功能

Snowflake 仓库具有自动暂停功能,该功能默认处于启用状态。在指定时间段后,仓库将自动暂停。如果仓库被暂停,所有查询都会出错。此错误不会显示在信息中心内(通常这些错误会导致不显示任何数据),但任何使用“探索”页面进行查询的用户都可以看到此错误。

通常有两种方法可以管理此问题:

  1. Snowflake 具有自动恢复功能,可在查询时恢复仓库。不过,恢复仓库最多可能需要 5 分钟,这会导致查询在返回之前停止响应 5 分钟。无法在 Looker 中配置自动恢复。在 Snowflake 界面的仓库标签页中启用此功能:

    Snowflake 界面中的“Warehouses”(仓库)标签页,其中显示了“autosuspend”(自动暂停)和“auto-resume”(自动恢复)复选框。

  2. 如果已启用永久性派生表 (PDT),Looker 的默认设置是每 5 分钟检查一次派生表重新生成情况。此检查将使 Snowflake 仓库保持活跃状态。不过,您可能希望 Snowflake 在非工作时间暂停仓库,以降低费用。这可以通过修改 PDT 重新生成时间表来实现,如维护时间表文档中所述。

PDT 支持

使用 OAuth 的 Snowflake 连接不支持 PDT。

如需支持永久性派生表,请为 PDT 创建一个 Snowflake 用户账号,该账号对您的数据库以及 Looker 将用于创建 PDT 的临时架构具有写入权限。在 Looker 连接设置页面上,在永久性派生表 (PDT) 设置部分下的可选设置标签页中,开启启用 PDT 切换开关。然后,在临时数据库字段中,输入 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 数据库配置 OAuth 以便与 Looker 搭配使用

如需使用 OAuth 创建与 Looker 的 Snowflake 连接,您必须在 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. 前往使用 Snowflake 连接的 Looker 项目的项目文件。
  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. 在账号页面中,前往 OAuth 连接凭证部分,然后选择相应 Snowflake 数据库的登录按钮。

选择登录后,Looker 中会显示授权 OAuth 连接对话框,通知您授权该连接后,Looker 实例便可代表您访问数据,并且管理员或开发者等具有 Looker 特权的用户可能会看到您的数据。选择授权,继续前往 Snowflake 登录对话框。(Looker 会将此同意信息存储在浏览器的本地存储空间中;如果您清除本地存储空间,则下次启动 OAuth 授权流程时,该对话框会再次出现。)输入您的 Snowflake 凭证,然后选择登录,接着选择允许,以授予 Looker 访问您的 Snowflake 账号的权限。

通过 Looker 登录 Snowflake 后,您可以随时通过账号页面退出账号或重新授权凭证,如对用户账号进行个性化设置文档页面中所述。

Snowflake 连接的上下文注释

对于大多数数据库方言,Looker 会在每个传出 SQL 查询的开头添加 SQL 上下文注释。对于 Snowflake 连接,Looker 会将上下文注释附加到每个 SQL 查询的末尾,而不是开头,因为 Snowflake 会移除前导注释。

如需详细了解上下文注释及其包含的字段,请参阅 SQL 查询的上下文注释。

支持的 JDBC 参数

对于 Snowflake,Looker 在连接的其他 JDBC 参数字段中支持以下 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 “Show Processes”
SQL Runner “Describe Table”
SQL Runner “Show Indexes”
SQL Runner “Select 10”
SQL Runner “Count”
SQL “Explain”
OAuth 2.0 凭证
背景信息评论
连接池
HLL 草图
汇总感知
增量 PDT
毫秒
微秒
物化视图
环比衡量
近似计数不同
数据库内分析模型
自定义日历

后续步骤

将数据库连接到 Looker 后,请为用户配置登录选项。