按照以下步骤将 Looker 连接到 Snowflake:
- 在 Snowflake 上创建 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 Query(所有查询)复选框,确保所有行都运行。默认情况下,Snowflake 仅运行所选的代码行。
创建与数据库的 Looker 连接
在 Looker 的管理部分中,选择连接,然后点击添加连接。
填写连接详情。大多数设置是大多数数据库方言通用的设置。如需了解相关信息,请参阅将 Looker 连接到数据库文档页面。下面将介绍部分设置:
- 名称:为连接命名。LookML 模型将通过这种方式引用连接。
- Dialect:选择 Snowflake。
- 主机:输入 Snowflake 主机名。大致如下:
<account_name>.snowflakecomputing.com
。检查各地区 Snowflake 帐号名称示例,确保您为部署使用了正确的值。 - 端口:默认值为 443。
- 数据库:输入默认数据库。此字段区分大小写。
- 架构:输入默认架构。
- Authentication:选择 Database Account 或 OAuth:
- 使用数据库帐号指定将用于连接到 Looker 的 Snowflake 用户帐号的用户名和密码。
- 如果您要为连接配置 OAuth,请使用 OAuth。
- 启用 PDT:使用此切换开关可以启用永久性派生表 (PDT)。启用 PDT 会显示更多 PDT 字段以及连接的 PDT 替换部分。
- 临时数据库:如果启用了 PDT,请将此字段设置为架构,用户可以在其中创建、删除、重命名和更改表。
- 每个节点的连接数上限:此设置可以最初设为默认值。如需详细了解此设置,请参阅将 Looker 连接到数据库文档页面的每个节点的连接数上限部分。
- 费用估算:为连接启用“探索”查询的费用估算、SQL Runner 查询的估算费用和计算总体认知度查询的计算节省的费用。
- 数据库时区:Snowflake 数据库用于存储日期和时间的时区。默认值为 UTC。您可以选择是否创建 PIN 码。
- 查询时区:您希望显示查询的时区。例如美国东部(美洲 - 纽约)。您可以选择是否创建 PIN 码。
更多 JDBC 参数:从 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
您可以通过在其他 JDBC 参数字段中设置替代值来替换每个参数,例如:
&AUTOCOMMIT=FALSE
- 添加
如需验证连接是否成功,请点击测试。如需了解问题排查信息,请参阅测试数据库连接文档页面。
要保存这些设置,请点击连接。
按群组或按用户指定 Snowflake 仓库
您可以使用 Looker 用户属性为各个 Looker 用户或群组分配单独的 Snowflake 仓库。例如,如果您的用户需要不同级别的计算能力,这会非常有用。您可以将计算资源丰富的仓库分配给需要的用户,同时将资源较少的仓库分配给需求较低的用户。
如需按群组或按用户指定仓库,请执行以下操作:
- 在 Looker 中添加群组或用户。
在 Looker 中定义用于存储 Snowflake 仓库名称的用户属性。您可以为此属性指定任何名称,例如
snowflake_wh
。在连接设置页面的其他 JDBC 参数字段中,添加以下内容,并将
snowflake_warehouse
替换为您定义的用户属性的名称:warehouse={{ _user_attributes['snowflake_warehouse'] }}
例如:
要测试各个连接设置,您可以使用 sudo 作为用户分配仓库名称值。
您可以在 Red Pill Analytics 博客中查看关于此过程的更详细的说明。
Snowflake 的自动暂停功能
Snowflake 仓库默认启用自动暂停功能。指定时间段后,仓库会自动暂停。如果仓库被暂停,则所有查询都会引发错误。此错误不会出现在信息中心内(通常不会显示任何数据),但在通过“探索”页面查询时会显示。
Snowflake 还有一个自动恢复功能,用于在查询时恢复仓库。但是,恢复仓库最多可能需要 5 分钟,这会导致查询在返回前挂起 5 分钟。无法在 Looker 中配置这些功能。在 Snowflake 界面的仓库标签页中启用这些功能。
PDT 支持
如需永久性派生表支持,请为具有对数据库和默认架构的写入权限的 PDT 创建 Snowflake 用户帐号。在 Looker 连接设置页面上,开启启用 PDT 开关。然后,在 PDT 覆盖部分,输入此 PDT 用户的用户名和密码。如需了解详情,请参阅将 Looker 连接到数据库文档页面。
使用 OAuth 的雪花式连接不支持 PDT。
对于 Snowflake 连接,Looker 会将 AUTOCOMMIT
参数的值设为 TRUE
(这是 Snowflake 的默认值)。执行 Looker 以维护其 PDT 注册系统的 SQL 命令需要 AUTOCOMMIT。
为 Snowflake 连接配置 OAuth
Looker 支持针对 Snowflake 连接的 OAuth,这意味着每个 Looker 用户都会登录 Snowflake 并授权 Looker 使用自己的 Snowflake 用户帐号在数据库中运行查询。
通过 OAuth,数据库管理员可以:
- 审核哪些 Looker 用户对数据库运行查询
- 使用 Snowflake 权限强制执行基于角色的访问权限控制
- 请为访问 Snowflake 的所有进程和操作使用 OAuth 令牌,而不是在多个位置嵌入 Snowflake ID 和密码
- 通过 Snowflake 撤消指定用户的授权
对于使用 OAuth 的 Snowflake 连接,用户必须在其 OAuth 令牌过期后定期重新登录。Snowflake OAuth 令牌的有效期限是通过 Snowflake 本身设置的。
对于使用 OAuth 的 Snowflake,请注意以下事项:
- 如果用户允许 Snowflake 令牌过期,那么他们拥有的所有时间表或提醒都会受到影响。为防止出现这种情况,Looker 会在当前活跃的 Snowflake OAuth 令牌到期之前向每个时间表的所有者和每条提醒发送通知。Looker 将在令牌到期前 14 天、7 天和 1 天发送这些通知电子邮件。用户可以前往其 Looker 用户页面,重新为 Looker 授权访问数据库,从而避免中断其时间表和提醒。有关详情,请参阅个性化用户帐号设置文档页面。
- 由于使用 OAuth 的 Snowflake 连接是“针对每位用户”,因此缓存政策也是针对每位用户的,而不仅仅是针对查询。这意味着,只有在缓存期间同一用户运行相同的查询时,Looker 才会使用缓存的结果,而不是在缓存期间运行同一查询。如需详细了解缓存,请参阅缓存查询文档页面。
- 使用 OAuth 时,您无法切换到 Snowflake 用户帐号中的不同角色。如雪花型文档中所述,Snowflake 会使用 Snowflake 用户帐号的默认角色,除非默认角色为 ACCOUNTADMIN 或 SECURITYADMIN。由于这些角色禁止使用 OAuth,因此 Snowflake 将改用 PUBLIC 角色。有关信息,请参阅 Snowflake 文档。
- 使用 OAuth 的 Snowflake 连接不支持永久性派生表 (PDT)。
- 管理员以其他用户的身份执行该操作时,会使用该用户的 OAuth 访问令牌。如果用户的访问令牌已过期,管理员将无法代表已撤消的用户创建新令牌;他们必须登录 Snowflake 并重新授权 Looker。如需了解如何使用
sudo
命令,请参阅用户文档页面。
使用 Looker 为 Snowflake 数据库配置 OAuth
如需使用 OAuth 创建与 Looker 的 Snowflake 连接,您必须在 Snowflake 中设置 OAuth 集成。这需要拥有 ACCOUNTADMIN 权限的 Snowflake 用户帐号。
在 Snowflake 中运行以下命令,其中
<looker_hostname>
是 Looker 实例的主机名:CREATE SECURITY INTEGRATION LOOKER TYPE = OAUTH ENABLED = TRUE OAUTH_CLIENT = LOOKER OAUTH_REDIRECT_URI = 'https://<looker_hostname>/external_oauth/redirect';
-
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('LOOKER');
响应将包含一个
OAUTH_CLIENT_ID
和OAUTH_CLIENT_SECRET
,稍后您将会用到此过程。 在 Looker 中,建立与 Snowflake 仓库的新连接,如将 Looker 连接到数据库文档页面所述。创建新连接时,选择 Authentication 字段中的 OAuth 选项。当您选择 OAuth 选项后,Looker 会显示 OAuth 客户端 ID 和 OAuth 客户端密钥字段。
粘贴您在此过程前面的从数据库获取的
OAUTH_CLIENT_ID
和OAUTH_CLIENT_SECRET
值。完成将 Looker 连接到数据库的其余步骤。
配置 Looker 与数据库的连接后,您可以通过执行以下任一操作来测试连接本身:
- 选择连接设置页面底部的测试按钮,如将 Looker 连接到数据库文档页面所述。
- 如连接文档页面中所述,在连接管理页面上,选择连接列表旁边的测试按钮。
除此之外,您还可以执行以下操作,测试连接并将其部署到模型:
- 在 Looker 中,进入开发模式。
- 前往使用 Snowflake 连接的 Looker 项目的项目文件。
- 打开模型文件,将模型的
connection
值替换为新的 Snowflake 连接的名称,然后保存该模型文件。 - 打开模型的其中一个“探索”或信息中心并运行查询。当您尝试运行查询时,Looker 会提示您登录 Snowflake。
- 按照 Snowflake 的登录提示进行操作,然后输入您的 Snowflake 凭据。
成功登录 Snowflake 后,Looker 会返回查询。如果您的查询正常运行,您可以提交新的连接值并将更改部署到生产环境。
登录 Snowflake 以运行查询
为 OAuth 设置 Snowflake 连接后,在运行查询之前,系统会提示用户登录 Snowflake。这包括来自“探索”“信息中心”“Looks”和“SQL Runner”的查询。
用户也可以通过帐号页面的 OAuth 连接凭据部分登录 Snowflake。
如需使用 Looker 登录您的 Snowflake 帐号,请执行以下操作:
- 点击 Looker 用户菜单。
- 选择帐号。
- 在帐号页面中,向下滚动到 OAuth Connection Credentials(OAuth 连接凭据)部分,然后为所需的 Snowflake 数据库选择 Log In(登录)按钮。
这会显示一个 Snowflake 登录弹出式窗口。输入您的 Snowflake 凭据,然后选择登录,然后选择允许以授予 Looker 访问您的 Snowflake 帐号的权限。
通过 Looker 登录 Snowflake 后,您可以随时通过帐号页面退出或重新授权凭据,如个性化您的用户帐号文档页面中所述。
功能支持
为了让 Looker 支持某些功能,您的数据库方言也必须支持这些功能。
Snowflake 自 Looker 23.8 起支持以下功能:
功能 | 是否支持? |
---|---|
支持级别 | 支持 |
Looker (Google Cloud Core) | 是 |
对称聚合 | 是 |
派生表 | 是 |
永久性 SQL 派生表 | 是 |
永久性原生派生表 | 是 |
稳定版观看次数 | 是 |
查询终止 | 是 |
基于 SQL 的数据透视 | 是 |
时区 | 是 |
SSL | 是 |
小计 | 是 |
JDBC 附加参数 | 是 |
区分大小写 | 是 |
位置类型 | 是 |
列表类型 | 是 |
百分位 | 是 |
不同百分位 | 否 |
SQL Runner 显示进程 | 否 |
SQL Runner 描述表 | 是 |
SQL Runner 显示索引 | 否 |
SQL Runner 选择 10 | 是 |
SQL 运行程序计数 | 是 |
SQL 说明 | 是 |
OAuth 凭据 | 是 |
上下文评论 | 是 |
连接池 | 是 |
HLL 素描 | 是 |
总体认知度 | 是 |
PDT 增幅 | 是 |
毫秒 | 是 |
微秒 | 是 |
具体化视图 | 否 |
唯一计数 | 否 |
后续步骤
将数据库连接到 Looker 后,为用户配置登录选项。