Snowflake

如需将 Looker 与 Snowflake 相关联,请按以下步骤操作:

  1. 在 Snowflake 上创建 Looker 用户并配置访问权限。
  2. 在 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 连接面板中,请勾选所有查询复选框,以确保所有代码行都能运行。默认情况下,Snowflake 仅运行所选的行:

添加连接

使用 Looker 界面配置数据库连接:在 Looker 的管理部分,选择连接,然后点击添加连接。如需了解详情,请参阅将 Looker 连接到数据库文档页面。

在必填字段中输入连接信息:

  • 名称:为连接命名。这是 ML 模型引用该连接的方式。
  • 方言:选择雪花
  • 主机:输入 Snowflake 主机名。其格式为:<account_name>.snowflakecomputing.com。请查看各地区的雪花型帐号名称示例,确保您为部署使用了正确的值。
  • 端口:默认值为 443。
  • 数据库:输入要使用的默认数据库;此字段区分大小写。
  • 用户名和密码:输入连接到 Looker 的用户的用户名和密码。
  • 架构:输入默认架构。
  • Persistent Derived Tables:选中此复选框可启用永久性派生表 (PDT)。系统会显示一些 PDT 字段和 PDT 替换列。
  • 临时数据库:如果启用了 PDT,请将此字段设置为用户具有创建、删除、重命名和更改表的完整权限的架构。
  • 最大连接数:这是可选连接池大小。您可以使用默认值,也可以在将 Looker 连接到数据库文档页面的最大连接数部分中详细了解此设置。
  • 估算费用:为连接启用探索查询的费用估算SQL Runner 查询的估算费用计算总体感知查询的计算节省费用
  • 数据库时区:Snowflake 数据库用于存储日期和时间的时区。默认值为世界协调时间 (UTC)。您可以选择是否创建 PIN 码。
  • 查询时区:您希望查询显示的时区。例如美国东部(美洲 - 纽约)。您可以选择是否创建 PIN 码。
  • 其他参数:从 Snowflake JDBC 驱动程序添加其他 JDBC 参数。

    • 添加 warehouse=<YOUR WAREHOUSE NAME>
    • 此外,默认情况下,Looker 会在每个会话中设置以下雪花形参数

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

      您可以通过在其他参数字段中设置一个替代值(例如:&AUTOCOMMIT=FALSE)来替换所有这些参数。

点击 Test 这些设置 (Test 这些设置),验证是否成功连接到 Snowflake。如需了解问题排查信息,请参阅测试数据库连接文档页面。

点击 Add Connection 以保存连接。

按组或按用户指定雪花仓库

您可以使用 Looker 用户属性为个别 Looker 用户或群组分配独立的 Snowflake 仓库。例如,如果您的用户需要不同级别的计算能力,那么此功能会非常有用。您可以将具有较大计算资源的仓库分配给需要的用户,而将资源较少的仓库分配给需求较少的用户。

如需按组或按用户指定仓库,请执行以下操作:

  1. 在 Looker 中添加群组用户
  2. 定义用于存储雪花仓库名称的用户属性

  3. 在您刚刚定义的用户属性中,将仓库名称值分配给群组用户

  4. Connection Settings 页面的 Additional Params 字段中,添加以下内容,并将 snowflake_warehouse 替换为您定义的用户属性的名称:

  warehouse={{ _user_attributes['snowflake_warehouse'] }}

例如:

  1. 要测试各个连接设置,您可以sudo(已被您分配了仓库名称值的用户)作为用户。

有关此过程的更详细的说明,请参阅 Red Pill Analytics 博客

Snowflake 的自动挂起功能

雪花仓库具有默认启用的自动暂停功能。指定期限过后,仓库会自动暂停。如果仓库被暂停,所有查询都会产生错误。此错误无法通过信息中心显示(通常不会显示任何数据),但在使用“探索”页面查询时会显示。

Snowflake 还有一个自动恢复功能,可在查询时恢复仓库。但是,恢复仓库最多可能需要五分钟,从而导致查询在返回前挂起五分钟。您可以在仓库标签页中配置这些功能:

PDT 支持

如需永久性派生表支持,请为对数据库和默认架构拥有写入权限的 PDT 创建 Snowflake 用户帐号。在 Looker Connections Settings 页面上,勾选 Persistent Derived Tables 框。然后,在 PDT Override(PDT 覆盖)列中,输入 PDT 用户的用户名和密码。如需了解详情,请参阅将 Looker 连接到数据库文档页面。

使用 OAuth 的雪花型连接不支持 PDT。

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

为 Snowflake 连接配置 OAuth

Looker 支持适用于雪花连接的 OAuth,这意味着每个 Looker 用户都会向 Snowflake 进行身份验证,并授权 Looker 使用自己的雪花用户帐号在数据库中运行查询。

借助 OAuth,数据库管理员可以:

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

对于使用 OAuth 的 Snowflake 连接,您必须在 OAuth 令牌到期后定期重新登录。Snowflake OAuth 令牌的有效期通过 Snowflake 本身设置。

对于使用 OAuth 的 Snowflake,请注意以下几点:

  • 如果用户将其 Snowflake 令牌过期,他们拥有的任何时间安排或提醒都会受到影响。为防止出现这种情况,在当前雪花 OAuth 令牌过期之前,Looker 将向每个时间表的所有者和每条提醒发送通知。Looker 将在令牌到期前 14 天、7 天和 1 天发送这些通知电子邮件。用户可以转到自己的 Looker 用户页面,为 Looker 重新授权至数据库,以免他们的计划和提醒出现中断。如需了解详情,请参阅个性化用户帐号设置文档页面。
  • 由于使用 OAuth 的 Snowflake 连接是“按用户”的,因此缓存政策同样适用于用户,而不仅仅是查询。因此,当同一查询在缓存期内运行时,Looking 不会使用缓存结果,而是仅在缓存时间段内同一用户运行同一查询时才使用缓存结果。如需详细了解缓存,请参阅缓存查询并使用 datagroups 重建 PDT 文档页面。
  • 使用 OAuth 时,您无法在 Snowflake 用户帐号中切换到不同角色。如 Snowflake 文档中所述,Snowflake 会使用 Snowflake 用户帐号的默认角色,除非默认角色为 ACCOUNTADMIN 或 SECURITYADMIN。由于这些角色禁止使用 OAuth,因此 Snowflake 将改用 PUBLIC 角色。如需了解相关信息,请参阅 Snowflake 文档
  • 使用 OAuth 的 Snowflake 连接不支持持久派生表 (PDT)
  • 管理员以其他用户身份执行 sudo 操作时,将使用该用户的 OAuth 访问令牌。如果用户的访问令牌已过期,管理员将无法代表无法登录的用户创建新令牌;用户必须登录 Snowflake 并重新授权 Looker。如需了解如何使用 sudo 命令,请参阅用户文档页面。

使用 Looker 为 OAuth 配置 Snowflake 数据库

如需使用 OAuth 创建与 Looker 的 Snowflake 连接,您必须在 Snowflake 中设置 OAuth 集成。这需要具有 ACCOUNTADMIN 权限的 Snowflake 用户帐号。

  1. 在 Snowflake 中运行以下命令:
  CREATE SECURITY INTEGRATION LOOKER
    TYPE = OAUTH
    ENABLED = TRUE
    OAUTH_CLIENT = LOOKER
    OAUTH_REDIRECT_URI = 'https://<looker_hostname>/external_oauth/redirect';

其中 <looker_hostname> 是 Looker 实例的主机名。

  1. 运行以下命令来获取 OAuth 客户端 ID 和密钥:
  SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('LOOKER');

该响应将包含一个 OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET,您在此过程的后面将会用到。

  1. 在 Looker 中,建立与 Snowflake 仓库的新连接,如将 Looker 连接到数据库文档页面所述。创建新的连接时,请勾选 Use OAuth(使用 OAuth)复选框。 选择使用 OAuth 时,您会看到 OAuth 客户端 IDOAuth 客户端密钥字段:

  2. 粘贴第 2 步中的 OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET 值。

  3. 完成将 Looker 连接到数据库的其余过程。

配置 Looker 与数据库的连接后,您可以通过执行以下任一操作来测试连接本身:

  • 点击连接设置页面底部的测试这些设置按钮,如将 Looker 连接到数据库文档页面中所述。
  • Connections Admin 页面(位于 Connections 文档页面)上,点击连接列表上的 Test 按钮。

除此之外,您还可以执行以下操作来测试连接并将其部署到模型上:

  1. 在 Looker 中,进入开发模式
  2. 转到使用 Snowflake 连接的 Looker 项目的项目文件
  3. 打开模型文件,并将模型的 connection 值替换为新的 Snowflake 连接名称,然后保存模型文件。
  4. 打开其中一个模型探索或信息中心,然后运行查询。当您尝试运行查询时,Looker 会提示您登录 Snowflake
  5. 按照 Snowflake 的登录提示操作,输入您的 Snowflake 凭据。

一旦成功登录 Snowflake,Looker 就会返回您的查询。如果查询运行正常,您可以提交新的连接值将更改部署到生产环境

登录 Snowflake 运行查询

为 OAuth 设置 Snowflake 连接后,系统会在运行查询之前提示用户登录 Snowflake。包括来自“探索”、“信息中心”、“外观”和“SQL 运行程序”的查询。下面是一个使用用户必须登录的 Snowflake 连接的“探索”示例:

用户也可以在帐号页面的 OAuth 连接凭据部分登录 Snowflake。

如需通过 Looker 登录 Snowflake 帐号,请执行以下操作:

  1. 从用户菜单中选择帐号
  2. 向下滚动到 OAuth Connection Credentials(OAuth 连接凭据)部分,然后点击所需的 Snowflake 数据库对应的 Log In(登录)按钮。
  3. 通过 Snowflake 的界面输入您的 Snowflake 凭据,然后点击登录
  4. 点击允许以授予 Looker 访问您的 Snowflake 帐号的权限。

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

功能支持

为了让 Looker 支持某些功能,您的数据库方言也必须支持这些功能。

在最新版 Looker 中,Sflflake 支持以下 Looker 功能:

后续步骤

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