重定向客户端连接

Client Redirect 支持将客户端连接重定向到不同 区域 的 Snowflake 账户,以实现业务连续性和灾难恢复,或者将账户迁移到其他区域或云平台的情况。

本主题内容:

Client Redirect 简介

Client Redirect 是通过 Snowflake 连接 对象实现的。连接对象可存储安全的 连接 URL,用于 Snowflake 客户端连接到 Snowflake。

连接 URL 中的主机名由组织名称和连接对象名称以及公用域名组成:

organization_name-connection_name.snowflakecomputing.cn

请注意,此主机名不指定要连接的账户。账户管理员通过将账户中的连接指定为 主连接 来确定要使用的账户。当您使用连接 URL 连接到 Snowflake 时,您将连接到包含主连接的账户。

如果某个区域或云平台发生中断,并且中断影响了具有主连接的账户,则管理员可以将其他区域或云平台中其他账户中的连接提升为主连接。

在此中断期间,您可以继续使用相同的连接 URL 连接到 Snowflake。Snowflake 将连接 URL 解析为具有新提升连接的账户(受中断影响的区域或云平台之外的账户)。

备注

存储主连接和辅助连接的 Snowflake 账户必须托管在不同的 区域

Client Redirect 流程

  1. 完成“配置 Client Redirect”中的步骤(本主题内容),为客户端连接创建连接 URL。其中包括创建主连接和链接的辅助连接。

  2. 更新 Snowflake 客户端以使用连接 URL 进行连接。使用连接 URL (本主题内容)包含支持的客户端和连接详细信息的列表。

  3. 如果主连接所在的区域出现服务中断,请完成 重定向客户端连接 (本主题内容)中的步骤,更新连接 URL 以重定向到辅助连接。

  4. 解决中断后,请完成 重定向客户端连接 中的步骤,将客户端连接重定向回原始主连接。

下图说明了同一组织但不同区域(Region ARegion B)中的两个账户在相同或不同云平台上的 Client Redirect 流程。

主连接位于 Region AAccount 1 中。Snowflake 客户端使用连接 URL 连接到 Account 1

客户端连接正常

Region A 中的服务中断导致客户端连接失败:

客户端连接失败

Region BAccount 2 中的连接已提升为主连接。使用连接 URL 的 Snowflake 客户端现已连接到 Account 2

已重定向客户端连接

示例

以下 SQL 语句将贯穿整个 Client Redirect 工作流程。本主题后面的章节将详细介绍每个步骤。

客户端连接正常:配置 Client Redirect

在源账户中创建主连接

创建新的主连接,并为组织中的其他账户启用故障转移。启用故障转移的每个账户必须与具有主连接的账户位于不同的区域。

请注意, SHOW REPLICATION ACCOUNTS 输出中的 account_name 列,即要启用故障转移的每个账户。

账户中执行以下语句:

-- Create a new primary connection
CREATE CONNECTION myconnection;

-- View accounts in your organization that are enabled for replication
SHOW REPLICATION ACCOUNTS;

-- Configure failover accounts for the primary connection
ALTER CONNECTION myconnection
  ENABLE FAILOVER TO ACCOUNTS myorg.myaccount2, myorg.myaccount3;

-- View the details for the connection
SHOW CONNECTIONS;
Copy

如果为 Snowflake 账户启用了 Snowflake 服务的专用连接,则必须为连接 URL 创建和管理 DNS CNAME 记录。有关更多详细信息,请参阅 为 Snowflake 服务的专用连接配置 DNS 设置

在目标账户上执行

创建链接到主连接的辅助连接。辅助连接的名称必须与主连接的名称相同。

CREATE CONNECTION myconnection
  AS REPLICA OF myorg.myaccount1.myconnection;
Copy

如果为 Snowflake 账户启用了 Snowflake 服务的专用连接,则必须为连接 URL 创建或更新 DNS CNAME 记录。有关更多详细信息,请参阅 为 Snowflake 服务的专用连接修改 DNS 设置

源区域发生中断:故障转移

如果主连接所在的区域发生中断,请将其他区域中的辅助连接提升为主连接。

在目标账户上执行
  1. 登录到要提升为新的源账户的目标账户。

  2. 将辅助连接提升为主连接:

    ALTER CONNECTION myconnection PRIMARY;
    
    Copy

如果为 Snowflake 账户启用了 Snowflake 服务的专用连接,则必须为连接 URL 创建或更新 DNS CNAME 记录。有关更多详细信息,请参阅 为 Snowflake 服务的专用连接修改 DNS 设置

中断已解决:故障恢复

解决中断问题后,将原始主连接再次提升为主连接。

在以前作为源账户的目标账户上执行
  1. 登录到中断前作为源账户的目标账户。

  2. 将辅助连接提升回主连接:

    ALTER CONNECTION myconnection PRIMARY;
    
    Copy

如果为 Snowflake 账户启用了 Snowflake 服务的专用连接,则必须为连接 URL 创建或更新 DNS CNAME 记录。有关更多详细信息,请参阅 为 Snowflake 服务的专用连接修改 DNS 设置

配置 Client Redirect

本节介绍如何在连接组中创建主连接以及一个或多个辅助连接。

先决条件

要为账户启用 Client Redirect 功能,组织管理员(具有 ORGADMIN 角色的用户)必须为两个或多个账户启用复制。要启用复制,请参阅 先决条件:为组织中的账户启用复制,了解详细说明。

创建主连接

重要

Snowflake 在系统中创建组织时为其分配了一个唯一的生成名称。组织名称是连接对象中定义的连接 URL 的一部分,由 Snowflake 客户端提交以访问账户。在创建任何连接对象之前,请验证 Snowflake 中的组织名称是否令人满意。要更改系统中的组织名称,请联系 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge)。

您可以使用 Snowsight 或 SQL 在源账户中创建主连接。

使用 Snowsight 创建主连接和辅助连接

要使用 Snowsight 创建连接,请完成以下步骤:

备注

  • 只有具有 ACCOUNTADMIN 角色的用户才能使用 Snowsight 创建连接。

  • 您必须以具有 ACCOUNTADMIN 角色的用户身份登录到目标账户。如果没有,系统将提示您登录。

  1. 登录到 Snowsight 并导航至 Admin » Accounts

  2. 选择 Client Redirect

  3. 选择 + Connection

  4. 选择 Target Account

  5. Connection Name 框中,输入满足以下要求的连接名称:

    • 必须以字母字符开头,并且只能包含字母、十进制数字 (0-9) 和下划线 (_)。

    • 在组织中的连接名称和账户名称中必须是唯一的。

  6. 选择 Create Connection

使用 SQL 创建主连接

备注

只有具有 ACCOUNTADMIN 角色的用户才能执行本节中的 SQL 命令。

  1. 使用该 CREATE CONNECTION 命令创建新的主连接。每个主连接的名称在组织中的所有连接和账户名称中必须是唯一的。

    连接名称作为用于连接到 Snowflake 账户的连接 URL 的一部分包含在内。

    例如,要创建名为 myconnection 的连接,请执行以下操作:

    CREATE CONNECTION myconnection;
    
    Copy
  2. 使用 ALTER CONNECTION ... ENABLE FAILOVER TO ACCOUNTS 修改此主连接。提供组织中以逗号分隔的账户列表,这些账户可以存储此连接的故障转移选项(即辅助连接)。

    存储辅助连接的任何账户都必须托管在与存储主连接的账户不同的区域中。Client Redirect 只能跨区域成功运行。例如,如果尝试将客户端连接从 account1 重定向到同一区域的 account2,则 Client Redirect 不起作用。

    要查看组织中启用复制的账户的完整列表,请执行 SHOW REPLICATION ACCOUNTS

    例如,允许 myorg 组织中的账户 myaccount2myaccount3 各自存储 myconnection 连接的辅助连接:

    ALTER CONNECTION myconnection ENABLE FAILOVER TO ACCOUNTS myorg.myaccount2, myorg.myaccount3;
    
    Copy
  3. 执行 SHOW CONNECTIONS 命令以查看连接的详细信息。

    SHOW CONNECTIONS;
    
    +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
    | snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                            | organization_name | account_locator   |
    |--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------|
    | AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR1 |
    +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
    
    Copy

在每个目标账户中创建辅助连接

使用 CREATE CONNECTION ...AS REPLICA OF,在一个或多个账户中创建辅助连接,并将其链接到主连接。请注意,您只能在 ALTER CONNECTION ...ENABLE FAILOVER TO ACCOUNTS 语句(在 创建主连接 中)中指定的账户中创建辅助连接。

在每个目标账户中执行 CREATE CONNECTION ...AS REPLICA OF 语句,以创建指定主连接的副本。

重要

每个辅助连接的名称 必须 与其主连接的名称相同。连接名称包含在连接 URL 中。

在要创建辅助连接的 目标 账户中,执行本节中的 SQL 语句。

备注

只有具有 ACCOUNTADMIN 角色的用户才能执行本节中的 SQL 命令。

  1. 执行 SHOW CONNECTIONS 命令以查看所有连接。复制主连接的 primary 列的值。在下一步中创建辅助连接时,您将使用此值。

    SHOW CONNECTIONS;
    
    +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
    | snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                            | organization_name | account_locator   |
    |--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------|
    | AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR1 |
    +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
    
    Copy
  2. 执行 CREATE CONNECTION ...AS REPLICA OF 命令以创建辅助连接。

    例如,创建一个链接到 myorg.myaccount1.myconnection 主连接的名为 myconnection 的辅助连接。在 AS REPLICA OF 之后,粘贴主连接的完全限定名称(上一步中从 SHOW CONNECTIONS 输出复制的名称)。

    CREATE CONNECTION myconnection
      AS REPLICA OF MYORG.MYACCOUNT1.MYCONNECTION;
    
    Copy
  3. 执行 SHOW CONNECTIONS 命令以验证是否已创建辅助连接。

    SHOW CONNECTIONS;
    
    +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
    | snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                            | organization_name | account_locator   |
    |--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------|
    | AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR1 |
    | AWS_US_EAST_1      | 2020-07-22 13:52:04.925 -0700 | MYORG.MYACCOUNT2    | MYCONNECTION      | NULL            | false         | MYORG.MYACCOUNT1.MYCONNECTION |                                     | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR2 |
    +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
    
    Copy

将 FAILOVER 权限授予角色 – 可选

账户管理员可以将连接对象的 FAILOVER 权限授予账户角色。这使得账户管理员以外的用户可以将辅助连接提升为主连接。

例如,要授予角色 my_failover_role 对连接 myconnection 进行故障转移的能力,请在 目标 账户上执行以下语句:

GRANT FAILOVER ON CONNECTION myconnection TO ROLE my_failover_role;
Copy

具有角色 my_failover_role 的用户现在可以在故障转移的情况下将辅助连接 myconnection 提升为主连接:

USE ROLE my_failover_role;

ALTER CONNECTION myconnection PRIMARY;
Copy

有关重定向客户端连接的更多信息,请参阅 重定向客户端连接

为 Snowflake 服务的专用连接配置 DNS 设置

如果为 Snowflake 账户启用了 Snowflake 服务的专用连接,网络管理员必须为连接 URL 创建和管理 DNS 记录。网络管理员可以根据网络架构的配置使用 CNAME 记录、别名记录或别名。

对于所有其他账户,Snowflake 创建并管理 DNS 记录。为了保持一致性,以下示例使用 CNAME 记录。

以下步骤以 AWS PrivateLink 为例,如果 Snowflake 账户使用 Azure 专用链接 或 Google Cloud Private Service Connect,则步骤相同:

  1. 在启用了 Client Redirect 的一个账户中执行 SHOW CONNECTIONS。例如,假设为 myaccount1myaccount2 启用了 AWS PrivateLink。

    SHOW CONNECTIONS;
    
    +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
    | snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                            | organization_name | account_locator   |
    |--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------|
    | AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR1 |
    |--------------------|-------------------------------|---------------------|-------------------|-----------------|---------------|-------------------------------|-------------------------------------|-------------------------------------------|-------------------|-------------------|
    | AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR1 |
    | AWS_US_EAST_1      | 2020-07-22 13:52:04.925 -0700 | MYORG.MYACCOUNT2    | MYCONNECTION      | NULL            | false         | MYORG.MYACCOUNT1.MYCONNECTION |                                     | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR2 |
    +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
    
    Copy

    请注意,在 myaccount1myaccount2 中调用 SYSTEM$GET_PRIVATELINK_CONFIG 函数时, CONNECTION_URL 列中此命令的输出应与 privatelink-connection-urls 列表匹配。此列表中已包含使用 privatelink 段格式化的连接 URL(如下一步所示)。您可以选择运行此步骤中的命令或调用该函数。如果调用该函数,请按原样使用 URLs,无需进一步修改。

  2. 记录 CONNECTION_URL 列值,并创建两个 URLs 来支持专用连接和 OCSP

    1. 在 URL 中的 snowflakecomputing.cn 之前添加一个 privatelink 段(在本示例中,myorg-myconnection.privatelink.snowflakecomputing.cn)。

    2. 在 URL 的开头添加一个 ocsp 段(在本示例中,ocsp.myorg-myconnection.privatelink.snowflakecomputing.cn)。

  3. 使用 DNS 提供商提供的工具,为连接 URL 和 OCSP URL 创建 CNAME 记录:

    • 使用修改后的 CONNECTION_URL 列值设置域(或别名)。

    • 配置记录以使连接 URL 解析为主 Snowflake 账户 URL。请确保根据您选择的 URL 格式,包括云区域和 AWS PrivateLink 的所有 URL 段。这是主账户 URL,其中客户端连接将重定向到连接 URL。

    • 配置记录以将 OCSP URL 解析为 Azure 上账户的专用端点 IP 地址或 AWS 上账户的专用端点 ID 值。

    • 在故障转移的情况下,必须手动更新 DNS 设置以使连接 URL 指向辅助账户 URL,如 为 Snowflake 服务的专用连接修改 DNS 设置 中所示。同样,必须更新 OCSP 设置以指向专用端点 IP 地址或专用端点 ID 值。

      例如:

      myaccount1.us-west-2.privatelink.snowflakecomputing.cn.
      ocsp.myaccount1.us-west-2.privatelink.snowflakecomputing.cn.
      
      Copy

      或者,使用组织和账户名称 URL。

      例如:

      myorg-myaccount1.privatelink.snowflakecomputing.cn.
      ocsp.myorg-myaccount1.privatelink.snowflakecomputing.cn.
      
      Copy

      请注意必须包含尾随句点。

用户使用以下连接 URL 格式连接到 Snowflake:

organization_name-connection_name.privatelink.snowflakecomputing.cn

其中:

organization_name

Snowflake 组织的名称。您的用户连接到的 Snowflake 账户包含在此组织中。

connection_name

连接对象的名称。

有关更多信息,请参阅:

配置 Client Redirect 和阅读者账户

如果您是具有 阅读者账户 的数据提供者,则可以使用 Client Redirect 在服务中断时提供对共享数据的继续访问。创建连接的配置步骤与源和目标阅读者账户的 配置 Client Redirect 部分中所述的步骤相同:

  1. 创建两个阅读者账户。每个阅读者账户必须位于不同的区域。

  2. 在源阅读者账户中 创建主连接。启用故障转移到其他阅读者账户。

  3. 在已经启用故障转移功能的读者账户中 在每个目标账户中创建辅助连接,以便在源账户发生故障时能够进行切换。

  4. 与您的数据使用者共享连接 URL。

如果发生服务中断,请 重定向客户端连接。使用连接 URL 连接到您的阅读者账户的数据使用者现在连接到新提升的源阅读者账户。

使用连接 URL

本节说明了如何在各种 Snowflake 客户端的配置中引用连接 URL。

支持的 Snowflake 客户端

SnowsightSnowflake Classic Console 支持 Client Redirect。此外,以下 Snowflake 客户端版本(及更高版本)支持 Client Redirect:

Snowflake 客户端

支持的最低版本

SnowSQL

1.1.82

Snowflake Connector for Python

1.8.3

Node.js 驱动程序

1.2.0

Go Snowflake 驱动程序

1.2.0

.NET 驱动程序

1.0.0

JDBC 驱动程序

3.8.4

ODBC 驱动程序

2.19.4

Snowpark

所有版本

配置 Snowflake 客户端

连接到 Snowflake 时,请使用以下连接 URL 的主机名:

主机名: organization_name-connection_name.snowflakecomputing.cn

其中:

organization_name

Snowflake 组织的名称。您的用户连接到的 Snowflake 账户包含在此组织中。

connection_name

连接对象的名称。

重要

Snowflake 服务的专用连接

如果客户使用 Snowflake 服务的专用连接,则需要在 URL 中的 snowflakecomputing.cn 之前添加 privatelink 段:

organization_name-connection_name.privatelink.snowflakecomputing.cn

Snowsight

app.snowflake.cn 的账户名称字段中输入以下内容:

<organization-name>-<connection-name>
Copy

例如:

myorg-myconnection
Copy

使用 organization-connection 登录时, Snowsight 导航到当前主连接的特定区域和定位器。在中断期间,重定向连接后,用户必须通过 organization-connection 再次登录才能连接到新的主连接。

Snowflake Classic Console

在 Web 浏览器中输入以下 URL:

https://<organization_name>-<connection_name>.snowflakecomputing.cn/
Copy

例如:

https://myorg-myconnection.snowflakecomputing.cn/
Copy

SnowSQL

在 SnowSQL config 文件的 accountname 连接参数中指定连接 URL 的主机名。有关 config 文件的信息,请参阅 配置 SnowSQL

accountname = <organization_name>-<connection_name>
username = <username>
password = <password>
Copy

例如:

accountname = myorg-myconnection
username = jsmith
password = mySecurePassword
Copy

Snowflake Connector for Python

调用 connect 函数时,在 account 连接参数中指定连接 URL 的主机名。有关更多信息,请参阅 Python Connector API使用 Python Connector

con = snowflake.connector.connect (
      account = <organization_name>-<connection_name>
      user = <username>
      password = <password>
)
Copy

例如:

con = snowflake.connector.connect (
      account = myorg-myconnection
      user = jsmith
      password = mySecurePassword
)
Copy

JDBC 驱动程序

在连接字符串中指定连接 URL 的主机名。有关更多信息,请参阅 配置 JDBC 驱动程序

jdbc:snowflake://<organization_name>-<connection_name>.snowflakecomputing.cn/?user=<username>&password=<password>
Copy

例如:

jdbc:snowflake://myorg-myconnection.snowflakecomputing.cn/?user=jsmith&password=mySecurePassword
Copy

ODBC 驱动程序

在 Server 连接参数中指定连接 URL 的主机名。有关连接参数的更多信息,请参阅 ODBC 配置和连接参数

[ODBC Data Sources]
<account_name> = SnowflakeDSIIDriver

[<dsn_name>]
Description     = SnowflakeDB
Driver          = SnowflakeDSIIDriver
Locale          = en-US
SERVER          = <organization_name>-<connection_name>.snowflakecomputing.cn
Copy

例如:

[ODBC Data Sources]
myaccount = SnowflakeDSIIDriver

[client_redirect]
Description     = SnowflakeDB
Driver          = SnowflakeDSIIDriver
Locale          = en-US
SERVER          = myorg-myconnection.snowflakecomputing.cn
Copy

Node.js 驱动程序

account 连接选项中指定连接 URL 的主机名。有关连接参数的更多信息,请参阅 Node.js 选项参考

var configuration = {
  username: '<username>',
  password: '<password>',
  account: <organization_name>-<connection_name>.
}

var connection = snowflake.createConnection(configuration)
Copy

例如:

var configuration = {
  username: 'jsmith',
  password: 'mySecurePassword',
  account: myorg-myconnection.
}

var connection = snowflake.createConnection(configuration)
Copy

Go Snowflake 驱动程序

Account 参数中指定连接 URL 的主机名。有关更多信息,请参阅 Go Snowflake 驱动程序

cfg := &Config{
  Account: "<organization_name>-<connection_name>",
  User: "<username>",
  Password: "<password>"
}

dsn, err := DSN(cfg)
Copy

例如:

cfg := &Config{
  Account: "myorg-myconnection",
  User: "jsmith",
  Password: "mySecurePassword"
}

dsn, err := DSN(cfg)
Copy

Snowpark

Snowpark Python

在用于建立会话的 Python 字典 (dict) 的 account 连接参数中指定连接 URL 的主机名。有关创建会话的更多信息,请参阅 为 Snowpark Python 创建会话

connection_parameters = {
  "account": "<organization_name>-<connection_name>",
  "user": "<snowflake_user>",
  "password": "<snowflake_password>"
}
Copy

例如:

connection_parameters = {
  "account": "myorg-myconnection",
  "user": "jsmith",
  "password": "mySecurePassword"
}
Copy
Snowpark Java

在用于建立会话的属性文件或 Map 中的 URL 属性中指定连接 URL。有关创建会话的更多信息,请参阅 为 Snowpark Java 创建会话

# Properties file (a text file) for establishing a Snowpark session
URL = https://<organization_name>-<connection_name>.snowflakecomputing.cn
Copy

例如:

# Properties file (a text file) for establishing a Snowpark session
URL = https://myorg-myconnection.snowflakecomputing.cn
Copy
Snowpark Scala

在用于建立会话的属性文件或 Map 中的 URL 属性中指定连接 URL。有关创建会话的更多信息,请参阅 为 Snowpark Scala 创建会话

# Properties file (a text file) for establishing a Snowpark session
URL = https://<organization_name>-<connection_name>.snowflakecomputing.cn
Copy

例如:

# Properties file (a text file) for establishing a Snowpark session
URL = https://myorg-myconnection.snowflakecomputing.cn
Copy

身份验证和 Client Redirect

如果未 复制 安全集成,则必须在源账户和每个目标账户中预置用户。

联合身份验证和 SSO

在每个目标账户中单独配置联合身份验证。使用“ 配置 Snowflake 以使用联合身份验证”中的设置选项提供身份提供商 (IdP) 详细信息:

备注

Snowflake 建议使用连接 URL(而不是账户 URL)配置符合 SAML 2.0 的身份提供商 (IdP),以便在发生故障转移时将用户重定向到正确的账户。

OAuth

在每个目标账户中为 OAuth 配置安全集成对象。安全集成对象必须与源账户中的同一对象相同。有关说明,请参阅相应的主题:

要检索安全集成属性,请查询源账户中每个安全集成的 DESCRIBE INTEGRATION 命令。然后,通过执行 CREATE INTEGRATION 命令在目标账户中重新创建每个安全集成。

OAuth 重定向行为

如果您使用 Snowflake OAuth 对客户端连接进行身份验证,并且使用连接 URL 连接到 Snowflake,则在连接 URL 重定向到其他账户时(例如,在故障转移的情况下),系统会提示您重新进行身份验证。Snowflake OAuth 令牌可在特定账户中使用。当连接 URL 更新为指向其他区域中的账户时,现有的 OAuth 令牌失效。

在故障转移的情况下,当连接 URL 更新为新账户时,客户端将断开连接并显示 invalid OAuth access token 错误。您必须重新进行身份验证并同意重新建立连接的权限。

备注

当连接 URL 更新为新账户时,如果 OAuth 安全集成已复制 到该账户,则系统 不会 提示您重新进行身份验证。有关更多信息,请参阅 复制 OAuth 安全集成

重定向客户端连接

如果主连接所在的区域发生服务中断,请将客户端连接重定向到存储辅助连接的账户。

将辅助连接提升为主连接

启动重定向包括:使用 ALTER CONNECTION 将可用区域中的辅助连接提升为主要连接。同时,以前的主连接变成辅助连接。

  1. 在包含要提升为主连接的辅助连接的可用区域中登录到目标账户。

  2. 执行此部分中的 SQL 语句:

    • 查看账户中的所有连接:

      SHOW CONNECTIONS;
      
      Copy

      该语句返回以下输出:

      +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
      | snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                            | organization_name | account_locator   |
      |--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------|
      | AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR1 |
      | AWS_US_EAST_1      | 2020-07-22 13:52:04.925 -0700 | MYORG.MYACCOUNT2    | MYCONNECTION      | NULL            | false         | MYORG.MYACCOUNT1.MYCONNECTION |                                     | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR2 |
      +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
      
    • 将辅助连接提升为主连接:

      ALTER CONNECTION myconnection PRIMARY;
      
      Copy
    • 验证以前的辅助连接是否提升成功:

      SHOW CONNECTIONS;
      
      Copy

      该语句返回以下输出:

      +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
      | snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                            | organization_name | account_locator   |
      |--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------|
      | AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | false         | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR1 |
      | AWS_US_EAST_1      | 2020-07-22 13:52:04.925 -0700 | MYORG.MYACCOUNT2    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION |                                     | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR2 |
      +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
      

为 Snowflake 服务的专用连接修改 DNS 设置

要将客户端连接重定向到辅助账户,网络管理员必须修改“为 Snowflake 服务的专用连接配置 DNS 设置”中创建的 DNS 设置。

使用 DNS 提供商提供的工具,修改连接 URL 的 DNS 设置。

将目标主机名设置为存储新主连接的账户的完整 Snowflake 账户 URL,包括用于标识托管账户的区域和云平台的附加段,以及对 AWS PrivateLink、Azure 专用链接或 Google Cloud Private Service Connect 的支持。这是账户名称,其中客户端连接现将重定向到连接 URL。更新 DNS 设置时,请务必包括专用连接 OCSP URL。

例如:

myaccount1.us-east-1.privatelink.snowflakecomputing.cn.
ocsp.myaccount1.us-east-1.privatelink.snowflakecomputing.cn.
Copy

(请注意必须包含尾随句点。)

备注

您可以配置专用连接和 Client Redirect,以便搭配使用 Snowsight。请确保 DNS 更新包含 SYSTEM$GET_PRIVATELINK_CONFIG 函数输出中的 Snowsight 值。有关详细信息,请参阅 专用连接和 Snowsight

验证连接 URL 是否已更新

要验证连接 URL 是否已更新,您可以确认当前连接的区域。使用连接 URL 连接到 Snowflake 并执行 CURRENT_REGION 函数。

SELECT CURRENT_REGION();
Copy

修改连接

您可以在使用 Snowsight 或 SQL 创建连接后编辑连接的目标账户。

使用 Snowsight 修改连接的目标账户

您可以在创建连接后修改连接的目标账户,但不能更改连接名称。

备注

  • 要编辑连接,您必须以具有 ACCOUNTADMIN 角色的用户身份登录以下账户:

    • 具有主连接的源账户。

    • 具有辅助连接的当前目标账户。

    • 要为主连接添加的新目标账户。

  • 使用 Snowsight 只能为主连接添加一个目标账户。要添加其他目标账户,请 使用 ALTER CONNECTION 命令

  1. 登录到 Snowsight 并导航至 Admin » Accounts

  2. 选择 Client Redirect

  3. 找到要编辑的连接。选择位于该行最后一列的 More 菜单 (...)。

使用 SQL 修改连接的目标账户

您可以使用 ALTER CONNECTION 命令为主连接添加多个目标账户。有关示例,请参阅 示例

删除连接

您可以使用 Snowsight 或 SQL 删除连接。

使用 Snowsight 删除连接

要删除连接,您必须以具有 ACCOUNTADMIN 角色的用户身份登录具有主连接的 账户。

  1. 登录到 Snowsight 并导航至 Admin » Accounts

  2. 选择 Client Redirect

  3. 找到要删除的连接。选择位于该行最后一列的 More 菜单 (...)。

  4. 选择 Drop,然后选择 Drop Connection

使用 SQL 删除连接

您可以使用 DROP CONNECTION 命令删除连接。

  1. 删除目标账户中的所有辅助连接。

  2. 删除源账户中的主连接。

有关示例,请参阅 示例

监控 Client Redirect

您可以使用 Snowsight 或 SQL 监控组织中账户的 Client Redirect 连接和使用情况。

使用 Snowsight 监控 Client Redirect

备注

  • 只有具有 ACCOUNTADMIN 角色的用户才能使用 Snowsight 查看连接详细信息。

  • 您必须以具有 ACCOUNTADMIN 角色的用户身份登录到目标账户。如果没有,系统将提示您登录。

要查看 Client Redirect 连接详细信息,请完成以下步骤:

  1. 登录到 Snowsight 并导航至 Admin » Accounts

  2. 选择 Replication,然后选择 Client Redirect

  3. 如果会话没有活动仓库,系统将提示您选择一个仓库。

使用搜索和筛选,监控特定连接。

  • 您可以按连接名称进行搜索。在 |sf-search-icon|(搜索)框中,输入连接名称以筛选结果。

  • 选择 Redirecting 即可按主 (To) 或辅助 (From) 连接筛选结果。

  • 选择 |sf-account-icon|(账户)菜单即可按账户名称筛选结果。

您可以查看有关每个连接的以下信息:

描述

Name

连接名称。

Redirecting

指示连接是 To 目标账户还是 From 源账户以及账户名称。

如果此列包含 可用的目标,则不存在辅助连接。可用目标的数量表示主要连接可以复制到的目标账户数量。

如果存在多个辅助连接,则每个连接都会在单独的行中详细说明。

Usage

显示过去 7 天内使用连接的次数。您必须登录目标账户才能查看该账户的使用情况数据。

Connection URL

用于 Snowflake 客户端的连接 URL。选择列中的连接 URL 以复制 URL。

使用 SQL 监控 Client Redirect

您可以使用 SHOW CONNECTIONS 命令和 LOGIN_HISTORY 函数查看连接详细信息并监控使用情况。

查看连接详细信息

您可以使用 SHOW CONNECTIONS 命令检索连接名称和详细信息:

SHOW CONNECTIONS;
Copy

返回:

+--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------+
| snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                            | organization_name | account_locator   |
|--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------|
| AWS_US_WEST_2      | 2023-07-05 08:57:11.143 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR1 |
| AWS_US_EAST_1      | 2023-07-08 09:15:11.143 -0700 | MYORG.MYACCOUNT2    | MYCONNECTION      | NULL            | false         | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | myorg-myconnection.snowflakecomputing.cn | MYORG             | MYACCOUNTLOCATOR1 |
|--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+-------------------+-------------------|

验证用户使用的连接 URL

查询 LOGIN_HISTORY、LOGIN_HISTORY_BY_USER 表函数系列,以查看用户在过去 7 天内的登录活动。输出指示了哪些用户和 Snowflake 客户端已使用连接 URL。REPORTED_CLIENT_TYPE 和 REPORTED_CLIENT_VERSION 列显示了每个 Snowflake 连接所使用的客户端和版本, CONNECTION 列显示了所使用的连接 URL(如果有)。

备注

如果客户端通过配置了账户 URL(而不是连接 URL)的身份提供商 (IdP) 进行身份验证,则 IdP 会在身份验证完成后将客户端定向到账户 URL。此登录事件的 CONNECTION 列为 NULL。请参阅 身份验证和 Client Redirect (本主题内容)。

例如,检索过去 72 小时内允许当前角色监控的每个用户的最多 100 个登录事件:

SELECT event_timestamp, user_name, client_ip, reported_client_type, is_success, connection
  FROM TABLE(INFORMATION_SCHEMA.LOGIN_HISTORY(
    DATEADD('HOURS',-72,CURRENT_TIMESTAMP()),
    CURRENT_TIMESTAMP()))
  ORDER BY EVENT_TIMESTAMP;
Copy

Client Redirect 的当前限制

  • 当连接 URL 更新为指向其他账户时,如果 OAuth 安全集成未复制到该账户,则使用连接 URL 和 OAuth 集成的客户端连接需要重新进行身份验证。有关更多信息,请参阅 OAuth 重定向行为

  • 由于浏览器缓存,Web 浏览器可能需要几分钟才能进行重定向。

    如果需要验证重定向是否有效,可以使用 其他客户端 连接到 Snowflake。

    或者,打开一个新的私密浏览器窗口(例如,Google Chrome 中的隐身模式)以避免浏览器缓存问题。请注意,某些处于私密或隐身模式的 Web 浏览器可能仍会缓存数据。为避免使用浏览器缓存,请关闭所有打开的私密浏览器窗口和选项卡,然后打开新的私密浏览器窗口。

  • 使用 Snowsight 只能添加一个目标账户。要将多个目标账户添加到允许的故障转移账户列表中,请使用 ALTER CONNECTION ...ENABLE FAILOVER TO ACCOUNTS 命令。

语言: 中文