跳到主要内容

Snowflake

此页面包含Snowflake的设置指南和参考信息。

将Snowflake设置为目的地涉及在Snowflake控制面板中设置Snowflake实体(仓库、数据库、模式、用户和权限),设置数据加载方法(内部暂存、AWS S3存储、谷歌云存储桶或Azure Blob存储),并在Daspire中配置Snowflake目的地。

此页面描述了将Snowflake设置为目的地的步骤。

前提条件

  • 具有ACCOUNTADMIN权限的Snowflake帐户。如果您没有具有ACCOUNTADMIN权限的帐户,请联系您的Snowflake管理员为您设置一个。

  • (可选)AWS、谷歌云存储或Azure帐户。

网络政策

默认情况下,Snowflake允许用户从任何计算机或设备IP地址连接到该服务。安全管理员(即具有SECURITYADMIN权限的用户)或更高级别的管理员可以创建网络策略以允许或拒绝访问单个IP地址或地址列表。

如果您在连接Daspire时遇到任何问题,请确保IP地址列表在允许列表中。

从命令行操作

要确定是否为您的帐户或特定用户设置了网络政策,请执行SHOW PARAMETERS命令。

账户

SHOW PARAMETERS LIKE 'network_policy' IN ACCOUNT;

用户

SHOW PARAMETERS LIKE 'network_policy' IN USER <username>;

要了解更多信息,请查看官方Snowflake文档

从用户界面操作

在侧边栏菜单中点击Admin -> Security,可查看帐户中现有的网络政策。 Snowflake New Network Policy

如需添加新的网络政策,点击 + Network Policy,添加政策名称及允许和/或阻止的IP地址。 Snowflake New Network Policy

设置指南

第1步:在Snowflake中设置特定于Daspire的实体

要设置Snowflake目标连接器,您首先需要创建特定于Daspire的Snowflake实体(仓库、数据库、架构、用户和权限),并具有OWNERSHIP权限以将数据写入Snowflake、跟踪与Daspire相关的成本并控制权限在粒度级别。

从命令行操作

您可以在新的Snowflake worksheet中使用以下脚本来创建实体:

  1. 登录您的Snowflake帐户

  2. 编辑以下脚本,将密码更改为更安全的密码,并根据需要更改其他资源的名称。

    注意:确保在重命名资源时遵循Snowflake标识符要求

 set variables (these need to be uppercase)
set daspire_role = 'DASPIRE_ROLE';
set daspire_username = 'DASPIRE_USER';
set daspire_warehouse = 'DASPIRE_WAREHOUSE';
set daspire_database = 'DASPIRE_DATABASE';
set daspire_schema = 'DASPIRE_SCHEMA';

-- set user password
set daspire_password = 'password';

begin;

-- create Daspire role
use role securityadmin;
create role if not exists identifier($daspire_role);
grant role identifier($daspire_role) to role SYSADMIN;

-- create Daspire user
create user if not exists identifier($daspire_username)
password = $daspire_password
default_role = $daspire_role
default_warehouse = $daspire_warehouse;

grant role identifier($daspire_role) to user identifier($daspire_username);

-- change role to sysadmin for warehouse / database steps
use role sysadmin;

-- create Daspire warehouse
create warehouse if not exists identifier($daspire_warehouse)
warehouse_size = xsmall
warehouse_type = standard
auto_suspend = 60
auto_resume = true
initially_suspended = true;

-- create Daspire database
create database if not exists identifier($daspire_database);

-- grant Daspire warehouse access
grant USAGE
on warehouse identifier($daspire_warehouse)
to role identifier($daspire_role);

-- grant Daspire database access
grant OWNERSHIP
on database identifier($daspire_database)
to role identifier($daspire_role);

commit;

begin;

USE DATABASE identifier($daspire_database);

-- create schema for Daspire data
CREATE SCHEMA IF NOT EXISTS identifier($daspire_schema);

commit;

begin;

-- grant Daspire schema access
grant OWNERSHIP
on schema identifier($daspire_schema)
to role identifier($daspire_role);

commit;
  1. 使用 Worksheet pageSnowlight运行脚本。确保选中All Queries勾选框。

从用户界面操作

1. 创建Daspire角色

在侧边栏菜单中点击Admin -> Users & Roles。点击Roles选项卡,然后点击 + RoleSnowflake Roles

输入角色的名称,例如 DASPIRE_ROLE,并授予SYSADMIN的权限。 Snowflake New Role

2. 创建Daspire用户

创建Daspire角色后,切换到Users选项卡,然后点击 + UserSnowflake Users

输入用户名,例如 DASPIRE_USER。输入其他信息,并将您在步骤1中创建的角色(例如,DASPIRE_ROLE)分配给该用户。 Snowflake New User

3. 创建Daspire数据仓库

在侧边栏菜单中点击Admin -> Warehouses,然后点击 + WarehouseSnowflake Warehouses

输入数据仓库名称,例如 DASPIRE_WAREHOUSE,并为选择相应的仓库大小。 Snowflake New Warehouse

4. 授予Daspire仓库访问权限

创建Daspire仓库后,选中它,然后向下滚动到Privileges部分,然后点击 + PrivilegeSnowflake Warehouse Privileges

选择您在第1步中创建的Daspire角色,然后在权限下拉列表中,选择USAGE,然后点击Grant PrivilegeSnowflake New Warehouse Privilege

5. 创建Daspire数据库

在侧边栏菜单中点击Data -> Databases,然后点击 + DatabaseSnowflake Databases

输入数据库的名称,例如 DASPIRE_DATABASE,然后创建数据库。 Snowflake New Database

6. 授予Daspire数据库访问权限

创建Daspire数据库后,选中它,然后点击 + PrivilegeSnowflake Database Privileges

选择您在第1步中创建的Daspire角色,然后在权限下拉列表中,选择OWNERSHIP,然后点击Grant PrivilegeSnowflake Database New Privilege

7. 创建Daspire数据架构

在您的Daspire数据库中,点击 + SchemaSnowflake Database Schema

输入数据库架构的名称,例如 DASPIRE_SCHEMA,然后创建架构。 Snowflake Database New Schema

8. 总结

您已获得在Daspire中设置 Snowflake的所需信息和正确权限。

第2步:设置数据加载方式

默认情况下,Daspire使用Snowflake的内部暂存加载数据。您还可以使用Amazon S3存储桶谷歌云存储桶Azure Blob存储

确保数据库和模式具有USAGE权限。

使用Amazon S3存储桶

要使用Amazon S3存储桶,创建一个新的Amazon S3存储桶,具有Daspire的读/写访问权限将数据暂存到Snowflake。

使用谷歌云存储桶

要使用谷歌云存储桶:

  1. 导航到谷歌云Console并创建一个新的存储桶,为Daspire提供读/写访问权限以将数据暂存到Snowflake。

  2. 为您的服务帐户生成JSON密钥

  3. 编辑以下脚本,将DASPIRE_ROLE替换为您用于Daspire的Snowflake配置的角色,并将YOURBUCKETNAME替换为您的存储桶名称。

 create storage INTEGRATION gcs_daspire_integration
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = GCS
ENABLED = TRUE
STORAGE_ALLOWED_LOCATIONS = ('gcs://YOURBUCKETNAME');

create stage gcs_daspire_stage
url = 'gcs://YOURBUCKETNAME'
storage_integration = gcs_daspire_integration;

GRANT USAGE ON integration gcs_daspire_integration TO ROLE DASPIRE_ROLE;
GRANT USAGE ON stage gcs_daspire_stage TO ROLE DASPIRE_ROLE;

DESC STORAGE INTEGRATION gcs_daspire_integration;
  1. 最终查询应显示带有电子邮件作为属性值的STORAGE_GCP_SERVICE_ACCOUNT属性。使用该电子邮件向您的存储桶添加读/写权限。

  2. 导航到Snowflake控制面板并使用Worksheet pageSnowlight

使用Azure Blob存储

要使用Azure Blob存储创建存储帐户容器,并提供一个SAS Token访问容器。我们建议为Daspire创建一个专用容器,以将数据暂存到Snowflake。Daspire需要读/写权限才能与此容器交互。

第3步:在Daspire中将Snowflake设置为目的地

导航到Daspire以将Snowflake设置为目的地。您可以使用用户名/密码或OAuth 2.0进行身份验证:

用户名和密码

字段说明
主机Snowflake实例的主机域名(必须包含账号、地域、云环境,以snowflakecomputing.com结尾)。示例:accountname.us-east-2.aws.snowflakecomputing.com
权限您在第1步中为Daspire创建的用于访问Snowflake的角色。示例:DASPIRE_ROLE
仓库您在第1步中为Daspire创建的用于同步数据的仓库。示例:DASPIRE_WAREHOUSE
数据库您在步骤1中为Daspire将数据同步到其中创建的数据库。示例:DASPIRE_DATABASE
模式默认模式用作从链接发出的所有未明确指定模式名称的语句的目标模式
用户名您在第1步中创建的用户名,以允许Daspire访问数据库。示例:DASPIRE_USER
密码与用户名关联的密码
JDBC URL参数(可选)连接到数据库时要传递给JDBC URL字符串的附加属性,格式为由符号&分隔的键=值(key=value)对。示例:key1=value1&key2=value2&key3=value3

OAuth 2.0

字段说明
主机Snowflake实例的主机域名(必须包含账号、地域、云环境,以snowflakecomputing.com结尾)。示例:accountname.us-east-2.aws.snowflakecomputing.com
权限您在第1步中为Daspire创建的用于访问Snowflake的角色。示例:DASPIRE_ROLE
仓库您在第1步中为Daspire创建的用于同步数据的仓库。示例:DASPIRE_WAREHOUSE
数据库您在步骤1中为Daspire将数据同步到其中创建的数据库。示例:DASPIRE_DATABASE
模式默认模式用作从链接发出的所有未明确指定模式名称的语句的目标模式
用户名您在第1步中创建的用户名,以允许Daspire访问数据库。示例:DASPIRE_USER
OAuth2用于获取身份验证令牌的登录名和密码
JDBC URL参数(可选)连接到数据库时要传递给JDBC URL字符串的附加属性,格式为由符号&分隔的键=值(key=value)对。示例:key1=value1&key2=value2&key3=value3

密钥对认证

 In order to configure key pair authentication you will need a private/public key pair.
If you do not have the key pair yet, you can generate one using openssl command line tool
Use this command in order to generate an unencrypted private key file:

`openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt`

Alternatively, use this command to generate an encrypted private key file:

`openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -v1 PBE-SHA1-RC4-128 -out rsa_key.p8`

Once you have your private key, you need to generate a matching public key.
You can do so with the following command:

`openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub`

Finally, you need to add the public key to your Snowflake user account.
You can do so with the following SQL command in Snowflake:

`alter user <user_name> set rsa_public_key=<public_key_value>;`

and replace <user_name> with your user name and <public_key_value> with your public key.

要使用AWS S3作为云存储,请输入您在第2步中创建的S3 bucket的信息:

字段说明
S3存储桶名称Staging S3存储桶的名称(示例:daspire.staging)。Daspire会将文件写入此存储桶并通过Snowflake上的语句读取它们。
S3桶区域使用的S3暂存桶区域。
S3密钥ID *授予对S3暂存存储桶的访问权限的访问密钥ID。Daspire需要存储桶的读取和写入权限。
S3访问密钥 *S3密钥ID的相应秘密。
流部分大小(可选)如果同步表大于100GB,请增加此值。文件被分流到S3。这决定了每个部分的大小,以MB为单位。由于S3对每个文件有一万个零件的限制,零件大小会影响表格大小。默认情况下为10MB,因此表的默认限制为100GB。请注意,较大的零件尺寸会导致较大的内存需求。一个常见的做法是将部件大小乘以10以获得内存要求。小心修改这个。(例如5)
清除暂存文件和表确定是否在完成同步后从S3中删除暂存文件。具体来说,链接将创建名为bucketPath/namespace/streamName/syncDate_epochMillis_randomUuid.csv的CSV文件,其中包含三列(ab_id、data、emitted_at)。通常这些文件在同步后会被删除;如果您想保留它们用于其他目的,请将 purge_staging_data设置为false。
加密S3上的文件是否加密。您可能不需要启用此功能,但如果您与其他应用程序共享数据存储,它可以提供额外的安全层。如果您确实使用加密,则必须在临时密钥(Daspire会为每次同步自动生成一个新密钥,只有Daspire和Snowflake能够读取S3上的数据)或提供您自己的密钥(如果您有 “清除暂存文件和表(Purge staging files and tables)”选项已禁用,并且您希望能够自己解密数据)
S3文件名模式(可选)该模式允许您为S3暂存文件设置文件名格式,当前支持下一个占位符组合:{date}、{date:yyyy_MM}、{timestamp}、{timestamp:millis}、{ timestamp:micros}、{part_number}、{sync_id}、{format_extension}。请不要使用空白区域和不支持的占位符,因为它们不会被识别。

要使用Google Cloud Storage存储桶,请输入您在第2步中创建的存储桶的信息:

字段说明
谷歌云存储项目ID您的凭据的谷歌云存储项目ID的名称(例如:my-project)
谷歌云存储桶名称暂存桶的名称。Daspire会将文件写入此存储桶并通过Snowflake上的语句读取它们(例如:daspire-staging)
谷歌应用凭证对暂存谷歌云存储桶具有读/写权限的JSON密钥文件的内容。您将需要单独授予对您的Snowflake谷歌云存储服务帐户的存储桶访问权限。有关如何为您的服务帐户生成JSON密钥的更多信息,请参阅谷歌云文档。

要使用Azure Blob存储,请输入您在第2步中创建的存储的信息:

字段说明
端点域名保留默认值blob.core.windows.net或将自定义域映射到Azure Blob存储终结点。
Azure Blob存储帐户名称您在步骤2中创建的Azure存储帐户。
Azure blob存储容器名称您在步骤2中创建的Azure blob存储容器。
SAS令牌您在步骤2中提供的SAS令牌。

输出模式

Daspire将每个数据流输出到它自己的表中,在Snowflake中具有以下列:

Daspire字段说明列类型
_daspire_ab_id分配给每个已处理事件的UUIDVARCHAR
_daspire_emitted_at从数据源中提取事件的时间戳带时区的时间戳
_daspire_data包含事件数据的JSON blobVARIANT

注意: 默认情况下,Daspire创建永久表。如果您更倾向于临时表,请为Daspire创建一个专用的临时数据库。有关更多信息,请参阅使用临时表和瞬变表

支持的同步模式

Snowflake目的地支持以下同步模式:

  • 完全刷新同步 - 覆盖
  • 完全刷新同步 - 追加
  • 增量同步 - 追加
  • 增量同步 - 去重历史