使用 Snowflake 作为 AWS SCT 的源 - AWS Schema Conversion Tool

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Snowflake 作为 AWS SCT 的源

您可以使用 AWS SCT 将架构、代码对象和应用程序代码从 Snowflake 转换到 Amazon Redshift。

将 Snowflake 用作源数据库的权限

您可以使用 SECURITYADMIN 角色和 SECURITYADMIN 会话上下文创建具有权限的角色并向该角色授予用户名。

以下示例创建了最低权限并将其授予 min_privs 用户。

create role role_name; grant role role_name to role sysadmin; grant usage on database db_name to role role_name; grant usage on schema db_name.schema_name to role role_name; grant usage on warehouse datawarehouse_name to role role_name; grant monitor on database db_name to role role_name; grant monitor on warehouse datawarehouse_name to role role_name; grant select on all tables in schema db_name.schema_name to role role_name; grant select on future tables in schema db_name.schema_name to role role_name; grant select on all views in schema db_name.schema_name to role role_name; grant select on future views in schema db_name.schema_name to role role_name; grant select on all external tables in schema db_name.schema_name to role role_name; grant select on future external tables in schema db_name.schema_name to role role_name; grant usage on all sequences in schema db_name.schema_name to role role_name; grant usage on future sequences in schema db_name.schema_name to role role_name; grant usage on all functions in schema db_name.schema_name to role role_name; grant usage on future functions in schema db_name.schema_name to role role_name; grant usage on all procedures in schema db_name.schema_name to role role_name; grant usage on future procedures in schema db_name.schema_name to role role_name; create user min_privs password='real_user_password' DEFAULT_ROLE = role_name DEFAULT_WAREHOUSE = 'datawarehouse_name'; grant role role_name to user min_privs;

在上述示例中,替换以下占位符:

  • role_name 替换为具有只读权限的角色名称。

  • db_name 替换为源数据库的名称。

  • schema_name 替换为源架构的名称。

  • datawarehousename 替换为所需数据仓库的名称。

  • min_privs 替换为具有最低权限的用户名。

DEFAULT_ROLEDEFAULT_WAREHOUSE 参数是密钥敏感的。

配置对 Amazon S3 的安全访问权限

Amazon S3 存储桶的安全和访问权限管理策略允许 Snowflake 访问 S3 存储桶、从中读取数据并将数据写入存储桶。您可以使用 Snowflake STORAGE INTEGRATION 对象类型配置私有 Amazon S3 存储桶的安全访问权限。Snowflake 存储集成对象将身份验证责任委托给 Snowflake 身份和访问权限管理实体。

有关更多信息,请参阅 Snowflake 文档中的配置 Snowflake 存储集成以访问 Amazon S3

连接到作为源的 Snowflake

使用 AWS Schema Conversion Tool 按照以下过程连接到源数据库。

连接到 Snowflake 源数据库
  1. 在 AWS Schema Conversion Tool 中,选择添加源

  2. 选择 Snowflake,然后选择下一步

    此时显示添加源对话框。

  3. 对于连接名称,输入数据库的名称。AWS SCT 会在左侧面板的树中显示此名称。

  4. 使用来自 AWS Secrets Manager 的数据库凭证或手动输入:

    • 要使用 Secrets Manager 中的数据库凭证,请按照以下说明进行操作:

      1. 对于 AWS 密钥,输入密钥名称。

      2. 选择填充可使用 Secrets Manager 中的数据库凭证自动填写数据库连接对话框中的所有值。

      有关使用 Secrets Manager 中的数据库凭证的信息,请参阅使用 AWS Secrets Manager

    • 要手动输入 Snowflake 源数据仓库连接信息,请按照以下说明进行操作:

      参数 操作
      服务器名称

      输入源数据库服务器的域名系统(DNS)名称或 IP 地址。

      服务器端口

      输入用于连接到源数据库服务器的端口。

      数据库

      输入 Snowflake 数据库的名称。

      用户名密码

      输入数据库凭证,以便连接到源数据库服务器。

      仅当您显式请求加密时,AWS SCT 才会以加密格式存储您的密码。

      使用 SSL

      如果要使用安全套接字层 (SSL) 连接到数据库,请选择此选项。在 SSL 选项卡上提供以下其他信息(如适用):

      • 私有密钥路径:私有密钥的位置。

      • 密码:私有密钥的密码。

      有关 Snowflake 的 SSL 支持的更多信息,请参阅配置连接的安全选项

      存储密码

      AWS SCT 将创建一个安全文件库,用于存储 SSL 证书和数据库密码。如果设置此选项,则可以存储数据库密码。这样做意味着您无需输入密码即可快速连接到数据库。

      Snowflake 驱动程序路径

      输入用于连接到源数据库的驱动程序的路径。有关更多信息,请参阅下载所需的数据库驱动程序

      如果您将驱动程序路径存储在全局项目设置中,则驱动程序路径不会显示在连接对话框中。有关更多信息,请参阅在全局设置中存储驱动程序路径

  5. 选择测试连接以验证 AWS SCT 是否可以连接到源数据库。

  6. 选择连接以连接到源数据库。

Snowflake 作为源的限制

将 Snowflake 作为 AWS SCT 源时,存在以下限制:

  • 对象标识符在对象类型和父对象的上下文中必须是唯一的:

    数据库

    架构标识符在数据库中必须唯一。

    Schemas

    对象标识符(例如表和视图的标识符)在架构中必须是唯一的。

    表格/视图

    表中的列标识符必须唯一。

  • 大型和 xlarge 集群节点类型的最大表数为 9,900。8xlarge 集群节点类型的最大表数为 100,000。限制包括在查询处理或系统维护期间由用户定义或由 Amazon Redshift 创建的临时表。有关更多信息,请参阅 Amazon Redshift 集群管理指南中的 Amazon Redshift 配额

  • 对于存储过程,输入和输出参数的最大数量为 32。

Snowflake 的源数据类型

接下来,您可以找到使用 AWS SCT 时支持的 Snowflake 源数据类型以及与 Amazon Redshift 目标的默认映射。

Snowflake 数据类型 Amazon Redshift 数据类型。

NUMBER

NUMERIC(38)

NUMBER(p)

如果 p =< 4,则为 SMALLINT

如果 p => 5 且 =< 9,则为 INTEGER

如果 p => 10 且 =< 18,则为 BIGINT

如果 p => 19 则为 NUMERIC(p)

NUMBER(p, 0)

如果 p =< 4,则为 SMALLINT

如果 p => 5 且 =< 9,则为 INTEGER

如果 p => 10 且 =< 18,则为 BIGINT

如果 p => 19 则为:NUMERIC(p,0)

NUMBER(p, s)

如果 p => 1 且 =< 38,并且如果 s => 1 且 =< 37,那么

NUMERIC (p,s)

FLOAT

FLOAT

TEXT

Unicode 字符最多 16,777,216 字节;每个字符最多 4 个字节。

VARCHAR(MAX)

TEXT(p)

Unicode 字符最多 65,535 字节;每个字符最多 4 个字节。

如果 p =< 65,535 那么,VARCHAR (p)

TEXT(p)

Unicode 字符最多 16,777,216 字节;每个字符最多 4 个字节。

如果 p => 65535 且 =< 16,777,216 则为 VARCHAR(MAX)

BINARY

单字节字符最多 8,388,608 字节;每个字符 1 字节。

VARCHAR(MAX)

BINARY(p)

单字节字符最多 65,535 字节;每个字符 1 字节。

VARCHAR(p)

BINARY(p)

单字节字符最多 8,388,608 字节;每个字符 1 字节。

VARCHAR(MAX)

BOOLEAN

BOOLEAN

DATE

DATE

TIME

介于 00:00:00 和 23:59:59.999999999 之间的时间值。

VARCHAR(18)

TIME(f)

介于 00:00:00 和 23:59:59.9(f) 之间的时间值。

VARCHAR(n) – 9 + dt-attr-1

TIMESTAMP_NTZ

TIMESTAMP

TIMESTAMP_TZ

TIMESTAMPTZ

Snowflake 到 Amazon Redshift 的转换设置

要编辑 Snowflake 到 Amazon Redshift 的转换设置,请在 AWS SCT 中选择设置,然后选择转换设置。从上方的列表中选择 Snowflake,然后选择 Snowflake – Amazon Redshift。AWS SCT 显示 Snowflake 到 Amazon Redshift 转换的所有可用设置。

AWS SCT 中的 Snowflake 到 Amazon Redshift 转换设置包括以下各项的选项:

  • 限制转换后的代码中操作项的注释数量。

    对于在转换后的代码中为所选严重性级别及更高级别的操作项添加注释,请选择操作项的严重性。AWS SCT 会在转换后的代码中为所选严重性级别及更高级别的操作项添加注释。

    例如,要最大限度地减少转换后的代码中的注释数量,请选择仅错误。要在转换后的代码中包含所有操作项的注释,请选择所有消息

  • 设置 AWS SCT 可以应用于目标 Amazon Redshift 集群的最大表数。

    对于目标 Amazon Redshift 集群的最大表数,请选择 AWS SCT 可以应用于 Amazon Redshift 集群的表数量。

    Amazon Redshift 具有限制了不同集群节点类型使用表数的配额。如果选择自动,则 AWS SCT 会根据节点类型确定要应用于目标 Amazon Redshift 集群的表数量。或者,手动选择值。有关更多信息,请参阅《Amazon Redshift 管理指南》中的 Amazon Redshift 中的配额和限制

    AWS SCT 转换所有源表,即使表的数量超过了您的 Amazon Redshift 集群所能存储的容量也是如此。AWS SCT 将转换后的代码存储在项目中,并且不会将其应用于目标数据库。如果应用转换后的代码时达到了 Amazon Redshift 集群的表配额,则 AWS SCT 会显示一条警告消息。此外,AWS SCT 还要将表应用于目标 Amazon Redshift 集群,直到表的数量达到上限。

  • 对 Amazon Redshift 表列应用压缩。为此,请选择使用压缩编码

    AWS SCT 使用默认 Amazon Redshift 算法自动为列分配压缩编码。有关更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的压缩编码

    默认情况下,Amazon Redshift 不对定义为排序键和分配键的列应用压缩。您可以更改此行为并对这些列进行压缩。为此,请选择为 KEY 列使用压缩编码。只有选择使用压缩编码选项时,才能选择此选项。

Snowflake 到 Amazon Redshift 的转换优化设置

要编辑 Snowflake 到 Amazon Redshift 的转换优化设置,请在 AWS SCT 中选择设置,然后选择转换设置。从上方的列表中选择 Snowflake,然后选择 Snowflake – Amazon Redshift。在左窗格中,选择优化策略。AWS SCT 显示从 Snowflake 转换到 Amazon Redshift 的转换优化设置。

AWS SCT 中 Snowflake 到 Amazon Redshift 的转换优化设置包括以下各项的选项:

  • 使用自动表优化。为此,请选择使用 Amazon Redshift 自动调整表格

    自动表优化是 Amazon Redshift 中的一种自我调整过程,可自动优化表的设计。有关更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的使用自动表优化

    要仅使用自动表优化,请在初始键选择策略中选择

  • 使用策略选择排序键和分配键。

    您可以使用 Amazon Redshift 元数据、统计信息或这两个选项选择排序键和分配键。对于优化策略选项卡上的初始键选择策略,请选择以下选项之一:

    • 使用元数据,忽略统计信息

    • 忽略元数据,使用统计信息

    • 使用元数据和统计信息

    根据您选择的选项,您可以选择优化策略。然后,请为每种策略输入值(0–100)。这些值定义了每种策略的权重。AWS SCT 使用这些权重值定义每条规则如何影响分布键和排序键的选择。默认值基于 AWS 迁移最佳实践。

    您可以为查找小型表策略定义小型表的大小。在最小表格行数最大表格行数中,输入表格的最小和最大行数以将其定义为小型表。AWS SCT 将 ALL 分配方式应用于小型表。在这种情况下,向每个节点分配整个表的副本。

  • 配置策略详细信息。

    除了定义每种优化策略的权重外,您还可以配置优化设置。为此,请选择转换优化

    • 对于排序键列数限制,在排序键中输入最大列数。

    • 偏斜阈值中,输入列偏斜值的百分比(0–100)。AWS SCT 从分配键的候选列表中排除倾斜值大于阈值的列。AWS SCT 将列的偏斜值定义为最常见值的出现次数与记录总数的百分比。

    • 对于查询历史表中的前 N 个查询,请输入要分析的最常用查询的数量(1-100)。

    • 选择统计数据用户中,选择要分析查询统计数据的数据库用户。

    此外,在优化策略选项卡上,您可以为查找小型表策略定义小型表的大小。在最小表格行数最大表格行数中,输入表格中最小和最大行数以将其定义为小型表。AWS SCT 将 ALL 分配方式应用于小型表。在这种情况下,向每个节点分配整个表的副本。