CREATE REMOTE TABLE AS SELECT(并行数据仓库)

适用于:分析平台系统 (PDW)

从分析平台系统(PDW)数据库中选择数据,并将该数据复制到远程服务器上的 SMP SQL Server 数据库中的新表。 Analytics Platform System (PDW) 使用包含 MPP 查询进程的所有优势的设备来选择远程副本的数据。 用于 CREATE REMOTE TABLE AS SELECT 需要 SQL Server 功能的方案。

若要配置远程服务器,请参阅 远程表复制

Transact-SQL 语法约定

语法

CREATE REMOTE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }  AT ('<connection_string>')  
    [ WITH ( BATCH_SIZE = batch_size ) ]  
    AS <select_statement>  
[;]  

<connection_string> ::=   
    Data Source = { IP_address | hostname } [, port ]; User ID = user_name ;Password = strong_password;  

<select_statement> ::=  
    [ WITH <common_table_expression> [ ,...n ] ]  
    SELECT <select_criteria>  

参数

database_name

要在其中创建远程表的数据库。database_name 是一个 SQL Server 数据库。 默认情况下,用户使用默认数据库登录到目标 SQL Server 实例。

schema_name

新表的架构。 默认情况下,用户使用默认架构登录到目标 SQL Server 实例。

table_name

新表的名称。 有关允许的表名称的详细信息,请参阅 Analytics Platform System (PDW) 产品文档中的“对象命名规则”。

远程表已创建为堆。 没有 CHECK 约束或触发。 远程表列的排序规则与源表列的排序规则相同。 这适用于类型为 char、nchar、varchar 和 nvarchar 的列 。

connection_string

指定用于连接到远程服务器和数据库的 Data SourceUser IDPassword 参数的字符串。

连接字符串是由分号分隔的键值对列表。 关键字不区分大小写。 忽略键值对之间的空格。 但是,值可能区分大小写,具体取决于数据源。

数据源

指定名称或 IP 地址和远程 SMP SQL Server 的 TCP 端口号的参数。

hostname 或 IP_address

远程服务器计算机的名称或远程服务器的 IPv4 地址。 不支持 IPv6 地址。 可以在格式 Computer_Name\Instance_Name 或 IP_address\Instance_Name 中指定 SQL Server 命名实例 。 服务器必须是远程的,因此才不会指定为(本地)。

TCP 端口号

连接的 TCP 端口号。 对于没有在默认端口 1433 上侦听的 SQL Server 实例,可以将其 TCP 端口号指定为 0 到 65535 之间的数字。 例如:ServerA,1450<ip address>,1435

注意

建议使用 IP 地址连接到远程服务器。 根据网络配置,使用计算机名称进行连接可能需要额外的步骤,才能使用非设备 DNS 服务器将名称解析为正确的服务器。 使用 IP 地址连接时,不需要此步骤。 有关详细信息,请参阅 使用 DNS 转发器解析分析平台系统中的非设备 DNS 名称。

user_name

有效的 SQL Server 身份验证登录名。 最多包含 128 个字符。

password

登录密码。 最多包含 128 个字符。

batch_size

每批的最大行数。 Analytics Platform System (PDW) 将批处理中的行发送到目标服务器。 Batch_size 是一个 =0 的正整数。 默认为 0。

WITH common_table_expression

指定临时命名的结果集,这些结果集称为公用表表达式 (CTE)。 有关详细信息,请参阅 WITH common_table_expression (Transact-SQL)

SELECT <select_criteria>

指定哪些数据填充新的远程表的查询谓词。 有关 SELECT 语句的信息,请参阅 SELECT (Transact-SQL)

权限

需要:

  • 对 SELECT 子句中每个对象的 SELECT 权限。

  • 对目标 SMP 数据库的 CREATE TABLE 权限。

  • 对目标 SMP 架构的 ALTER、INSERT 和 SELECT 权限。

错误处理

如果将数据复制到远程数据库失败,Analytics Platform System (PDW) 会中止操作,记录错误,并尝试删除远程表。 Analytics Platform System (PDW) 不保证成功清理新表。

限制

远程目标服务器

  • TCP 是连接到远程服务器所需的默认并仅受支持的协议。

  • 目标服务器必须是非应用服务器。 CREATE REMOTE TABLE 不能用于将数据从一个设备复制到另一台设备。

  • CREATE REMOTE TABLE 语句仅创建新表。 因此,不能已经存在新表。 但必须已经存在远程数据库和架构。

  • 远程服务器必须具有可用空间,以存储从设备传输到 SQL Server 远程数据库的数据。

SELECT 语句

  • 选择条件不支持 ORDER BYTOP 子句。

  • CREATE REMOTE TABLE 不能在活动事务中运行,也不能在会话的 AUTOCOMMIT OFF 设置处于活动状态时运行。

SET ROWCOUNT (Transact-SQL) 对此语句没有影响。 要实现类似的行为,请使用 TOP (Transact-SQL)

锁定行为

创建远程表后,在复制开始之前,目标表不会锁定。 因此,在复制开始前,另一个进程可能会删除已创建的远程表。 发生这种情况时,Analytics Platform System (PDW) 将生成错误,并且复制失败。

Metadata

使用 sys.dm_pdw_dms_workers (Transact-SQL) 查看将所选数据复制到远程 SMP 服务器的进度。 PARALLEL_COPY_READER 类型的行包含此信息。

安全性

CREATE REMOTE TABLE 使用 SQL Server 身份验证连接到远程 SQL Server 实例;它不使用 Windows 身份验证。

除 SQL Server 端口、管理端口和托管端口外,Analytics Platform System (PDW) 面向外部的网络必须启用防火墙。

为了帮助防止数据意外丢失或损坏,用于从设备复制到目标数据库的用户帐户应仅具有对目标数据库的最低要求的权限。

连接设置允许使用 SSL 保护的用户名和密码数据连接到 SMP SQL Server 实例,但也以明文形式发送未加密的实际数据。 发生这种情况时,恶意用户可能会截获 CREATE REMOTE TABLE 语句文本,其中包含用于登录到 SMP SQL Server 实例的 SQL Server 用户名和密码。 为了避免这种风险,在连接到 SMP SQL Server 实例时,请使用数据加密。

示例

A. 创建远程表

此示例在数据库 MyOrdersTable 和架构 OrderReporting 上创建名为 Orders 的 SQL Server SMP 远程表。 OrderReporting 数据库在名为 SQLA 的服务器上,该服务器侦听默认端口 1433。 提供自己的 <user name><strong password>

CREATE REMOTE TABLE OrderReporting.Orders.MyOrdersTable  
AT ( 'Data Source = SQLA, 1433; User ID = <user name>; Password = <strong password>;' )  
AS SELECT <select_criteria>;  

B. 查询sys.dm_pdw_dms_workers DMV 以获取远程表复制状态

此查询显示了如何查看远程表复制的复制状态。

SELECT * FROM sys.dm_pdw_dms_workers   
WHERE type = 'PARALLEL_COPY_READER';  

°C 将查询联接提示与 CREATE REMOTE TABLE 配合使用

此查询显示将查询联接提示与 CREATE REMOTE TABLE配合使用的基本语法。 将查询提交到控制节点后,在计算节点上运行的 SQL Server 将在生成 SQL Server 查询计划时应用哈希联接策略。 有关联接提示以及如何使用 OPTION 子句的详细信息,请参阅 OPTION 子句(Transact-SQL)。

USE ssawPDW;  
CREATE REMOTE TABLE OrderReporting.Orders.MyOrdersTable  
AT ( 'Data Source = SQLA, 1433; User ID = <user name>; Password = <strong password>;' )  
    AS SELECT T1.* FROM OrderReporting.Orders.MyOrdersTable T1   
    JOIN OrderReporting.Orders.Customer T2  
    ON T1.CustomerID=T2.CustomerID OPTION (HASH JOIN);