Snowflake

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

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

加密网络流量

最佳做法是加密 Looker 应用与数据库之间的网络流量。不妨考虑启用安全的数据库访问文档页面中介绍的选项之一。

在 Snowflake 上创建 Looker 用户

我们建议您使用以下命令创建 Looker 用户。请务必单独运行每行代码。

(可选)添加 ON FUTURE 关键字,以便在新创建的对象上保留 GRANT 语句。我们建议您针对 Looker 将要使用的所有架构中的表运行此命令,这样您就不必在创建新表时重新运行 GRANT 语句。

-- 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;

如果您将上述命令批量粘贴到 Snowflake 连接面板中,请选中 All Queries 复选框,以确保运行所有行。默认情况下,Snowflake 仅运行所选行。

选中“所有查询”复选框的 Snowflake 控制台。

创建 Looker 与数据库的连接

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

填写连接详情。大多数设置对于大多数数据库方言都是通用的。如需了解详情,请参阅将 Looker 连接到数据库文档页面。下面介绍了其中一些设置:

  • 名称:为连接命名。LookML 模型将以这种方式引用连接。
  • 方言:选择 Snowflake
  • 主机:输入 Snowflake 主机名。该路径类似于 <account_name>.snowflakecomputing.com。请参阅按区域划分的 Snowflake 账号名称示例,确保您为部署使用了正确的值。
  • 端口:默认值为 443。
  • 数据库:输入要使用的默认数据库。此字段区分大小写。
  • 架构:输入默认架构。
  • Authentication:选择 Database AccountOAuth
    • 使用数据库账号指定将用于连接到 Looker 的 Snowflake 用户账号的用户名密码
    • 如果您想为连接配置 OAuth,请使用 OAuth
  • 启用 PDT:使用此切换开关可启用永久性派生表 (PDT)。启用 PDT 后,系统会显示其他 PDT 字段以及连接的 PDT 替换项部分。

  • 临时数据库:如果启用了 PDT,请将此字段设置为用户拥有创建、删除、重命名和修改表的完整权限的架构。

  • 每个节点的连接数上限:此设置最初可以保留默认值。如需详细了解此设置,请参阅将 Looker 连接到数据库文档页面中的每个节点的最大连接数部分。

  • 费用估算:启用连接的“探索”查询费用估算SQL Runner 查询费用估算汇总感知查询的计算节省估算

  • 数据库时区:您的 Snowflake 数据库用于存储日期和时间的时区。默认值为 UTC。这是可选操作。

  • 查询时区:您希望查询显示的时区。例如,美国东部(美国 - 纽约)。这是可选操作。

  • 其他 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'] }}
    

    例如:

    Looker 中的“Connection Settings”(连接设置)页面,其中显示了包含仓库用户属性参数的“Additional JDBC parameters”(其他 JDBC 参数)字段。

  5. 如需测试各个连接设置,您可以使用为其分配了仓库名称值的用户执行 sudo 命令。

如需详细了解此过程,请参阅 Red Pill Analytics 博客

Snowflake 的自动暂停功能

Snowflake 数据仓库具有一项默认处于启用状态的自动暂停功能。在指定期限后,仓库将自动暂停。如果仓库被暂停,所有查询都会出错。此错误不会显示在信息中心中(通常不会显示任何数据),但会显示在“探索”页面中。

Snowflake 还提供自动恢复功能,可在有查询时恢复数据仓库。不过,恢复数据仓库最多可能需要 5 分钟,这会导致查询在 5 分钟内停止响应,然后才会返回结果。这些功能无法在 Looker 中配置。在 Snowflake 界面的仓库标签页中启用这些功能。

Snowflake 界面中的“仓库”标签页,其中显示了“自动暂停”和“自动恢复”复选框

PDT 支持

如需获得永久派生表支持,请为 PDT 创建一个 Snowflake 用户账号,该账号应对数据库和 Looker 将用于创建 PDT 的临时架构拥有写入权限。在 Looker 的连接设置页面上的永久性派生表 (PDT) 部分,开启启用 PDT 切换开关。然后,在临时数据库字段中,输入 Looker 将用于创建 PDT 的临时架构的名称。接下来,在 PDT 替换项部分,输入 PDT 用户的用户名和密码。如需了解详情,请参阅将 Looker 连接到数据库文档页面。

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

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

为 Snowflake 连接配置 OAuth

Looker 支持使用 OAuth 连接到 Snowflake,这意味着每位 Looker 用户都需要对数据库进行身份验证,并授权 Looker 使用用户自己的 OAuth 用户账号对数据库运行查询。

借助 OAuth,数据库管理员可以执行以下任务:

  • 审核哪些 Looker 用户正在针对数据库运行查询
  • 使用数据库级权限强制执行基于角色的访问控制
  • 对访问数据库的所有进程和操作使用 OAuth 令牌,而不是在多个位置嵌入数据库 ID 和密码
  • 直接通过数据库撤消给定用户的授权

对于使用 OAuth 的 Snowflake 连接,当 OAuth 令牌过期时,用户必须定期重新登录。Snowflake OAuth 令牌的有效期是通过 Snowflake 本身设置的。

请注意以下数据库级 OAuth 连接:

  • 如果用户让其 OAuth 令牌过期,其拥有的所有 Looker 时间表或提醒都会受到影响。为防止这种情况,Looker 会在当前有效的 OAuth 令牌过期之前,向每个时间表和每个提醒的所有者发送一封通知电子邮件。Looker 会在令牌到期前 14 天、7 天和 1 天发送这些通知电子邮件。用户可以前往其 Looker 用户页面,重新授权 Looker 访问数据库,从而避免其时间表和提醒中断。如需了解详情,请参阅对用户账号设置进行个性化设置文档页面。
  • 由于使用 OAuth 的数据库连接是“按用户”的,因此缓存政策也是按用户的,而不仅仅是按查询。也就是说,Looker 只会在缓存期限内同一用户运行了同一查询时使用缓存结果,而不是在缓存期限内每次运行同一查询时都使用缓存结果。如需详细了解缓存,请参阅缓存查询文档页面。

  • 使用 OAuth 时,您无法在 Snowflake 用户账号中切换到其他角色。如 Snowflake 文档中所述,除非默认角色为 ACCOUNTADMIN 或 SECURITYADMIN,否则 Snowflake 会使用 Snowflake 用户账号的默认角色。由于这些角色已被禁止使用 OAuth,因此 Snowflake 将改用 PUBLIC 角色。如需了解详情,请参阅 Snowflake 文档

  • 不支持使用 OAuth 连接的 Snowflake 连接使用永久性派生表 (PDT)

  • 当 Looker 管理员以其他用户身份使用 sudo 命令时,管理员将使用该用户的 OAuth 访问令牌。如果用户的访问令牌已过期,管理员将无法代表使用 sudo 命令的用户创建新令牌。如需了解如何使用 sudo 命令,请参阅用户文档页面。

使用 Looker 为 Snowflake 数据库配置 OAuth

如需使用 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 和 Secret:

      SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('LOOKER');
    

    响应中包含 OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET,您稍后在此过程中需要用到它们。

  3. 在 Looker 中,创建与 Snowflake 数据仓库的新关联,如本页的创建与数据库的 Looker 关联部分所述。创建新连接时,请在身份验证字段中选择 OAuth 选项。选择 OAuth 选项后,Looker 会显示 OAuth 客户端 IDOAuth 客户端密钥字段。

  4. 粘贴您在本流程前面部分从数据库中获取的 OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET 值。

  5. 完成将 Looker 连接到数据库的其余步骤。

配置 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.0 开始,Snowflake 支持以下功能:

功能 是否支持?
支持级别
支持
Looker (Google Cloud Core)
对称汇总
派生表
永久性 SQL 派生表
永久性原生派生表
稳定视图
查询终止
基于 SQL 的转换
时区
SSL
小计
JDBC 其他参数
区分大小写
位置类型
列表类型
百分位
不同值百分位
SQL Runner 显示进程
SQL Runner 中的“Describe Table”命令
SQL Runner 显示索引
SQL Runner Select 10
SQL Runner 计数
SQL 说明
Oauth 凭据
上下文注释
连接池
HLL 草图
汇总认知度
增量 PDT
毫秒
微秒
具体化视图
近似计数不同

后续步骤

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