Snowflake

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

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

加密网络流量

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

在 Snowflake 上创建 Looker 用户

我们建议使用以下命令创建 Looker 用户。请务必单独运行每一行,或在 Snowflake 连接面板中选择 All Queries 选项,以确保运行所有行(默认情况下,Snowflake 只运行所选的行):

选中“所有查询”复选框的 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 账号名称示例,确保您为部署使用了正确的值。

数据库设置 - 身份验证方法:选择以下身份验证方法之一:

可选设置 - 启用 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

      您可以在其他 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 具有自动恢复功能,可在仓库被查询时恢复仓库。不过,恢复数据仓库最多可能需要 5 分钟,导致查询在返回之前停止响应 5 分钟。无法在 Looker 中配置自动恢复。在 Snowflake 界面中的 Warehouses 标签页上启用此功能:

    Snowflake 界面中的“仓库”标签页,显示了“自动挂起”和“自动恢复”复选框。

  2. 如果已启用永久性派生表 (PDT),Looker 的默认设置是每 5 分钟检查一次派生表是否需要重新生成。此检查将使 Snowflake 数据仓库保持活跃状态。不过,您可能希望 Snowflake 在非工作时间暂停数据仓库,以降低费用。为此,您可以修改 PDT 再生时间表,具体方法请参阅维护时间表文档

PDT 支持

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

如需支持持久性派生表,请为 PDT 创建一个 Snowflake 用户账号,该账号对您的数据库和 Looker 将用于创建 PDT 的临时架构具有写入权限。在 Looker 的连接设置页面上,在永久性派生表 (PDT) 设置部分下的可选设置标签页中,开启启用 PDT 开关。然后,在临时数据库字段中,输入 Looker 将用于创建 PDT 的临时架构的名称。

请注意,PDT 替换不适用于使用密钥对身份验证的 Snowflake 连接。

对于 Snowflake 连接,Looker 会将 Snowflake 的 AUTOCOMMIT 参数的值设置为 TRUE,这是 Snowflake 的默认值。Looker 运行 SQL 命令来维护其 PDT 注册系统,因此需要 AUTOCOMMIT

为 Snowflake 连接配置 OAuth

Looker 支持通过 OAuth 连接到 Snowflake,这意味着每位 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 访问令牌。如果用户的访问令牌已过期,管理员无法代表 sudo 用户创建新令牌。如需了解如何使用 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 客户端 IDOAuth 客户端密钥字段。

  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 以运行查询

为 Snowflake 连接设置 OAuth 后,系统会在用户运行查询之前提示其登录 Snowflake。这包括来自探索、信息中心、Look 和 SQL Runner 的查询。

Looker 界面,显示 OAuth 登录提示。

用户还可以通过其账号页面上的 OAuth 连接凭据部分登录 Snowflake。

如需使用 Looker 登录 Snowflake 账号,请按以下步骤操作:

Looker 中的“账号”页面,显示“OAuth 连接凭据”部分。

  1. 点击 Looker 用户菜单。
  2. 选择账号
  3. 账号页面中,前往 OAuth 连接凭据部分,然后为相应的 Snowflake 数据库选择登录按钮。

选择登录后,系统会显示 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 Explain
OAuth 2.0 凭据
上下文注释
连接池
HLL 草图
汇总认知度
增量 PDT
毫秒
微秒
具体化视图
与前一时间段相比的指标
近似计数不同

后续步骤

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