本页面介绍了如何配置和管理外部数据源,以供 PolyBase 和 Cloud SQL for SQL Server 实例使用。
管理对外部对象的访问权限
Cloud SQL 仅支持启用和停用 PolyBase 的操作。用户需要使用 T-SQL 语句手动管理 SQL Server 实体。
在手动管理 SQL Server 实体之前,请查看以下 Microsoft 资源:
创建外部数据源
以下步骤介绍了如何为 Cloud SQL for SQL Server 实例创建外部数据源。
SQL Server 将 外部数据源 定义为包含连接信息(例如服务器名称、数据库 名称和连接字符串)的资源。
SQL Server 将 外部表 定义为 SQL Server 中的元数据对象,这些对象指向外部 数据源中的数据。它们定义了外部数据在 SQL Server 中呈现时的架构。
此过程需要为外部数据源创建数据库范围的凭据 (DSC)。
DSC 会存储连接到外部数据源所需的身份验证信息。这些凭据由数据库主密钥 (DMK) 加密。
DMK 是数据库中加密层次结构的根,用于保护 数据库范围凭据中的密钥。此对称密钥由服务主密钥 (SMK) 和用户提供的密码加密。DMK 不会自动创建,需要用户使用 T-SQL 进行显式管理。
SMK 是特定 SQL Server 实例的加密层次结构的根。此对称密钥由 SQL Server 本身在首次启动时自动生成,用于保护其他安全对象,例如 DMK 和登录密码。
Oracle
在 SQL Server 中完成以下步骤。
为 Oracle 创建数据库范围的凭据 (DSC)。
如果尚不存在用户数据库,请切换到用户数据库以创建主密钥:
USE USER_DB; CREATE MASTER KEY ENCRYPTION BY PASSWORD='MK_PASSWORD';替换以下内容:
- USER_DB:您要用于创建主密钥的用户数据库。
例如,
polybasedb。 - MK_PASSWORD:您要使用的主密钥的密码。请务必保存主密钥的密码以供日后使用。
- USER_DB:您要用于创建主密钥的用户数据库。
例如,
为 Oracle 数据源创建数据库范围的凭据。
CREATE DATABASE SCOPED CREDENTIAL DB_CREDENTIAL_NAME WITH IDENTITY = 'EXTERNAL_DATABASE_USERNAME', SECRET = 'EXTERNAL_DATABASE_PASSWORD';替换以下内容:
- DB_CREDENTIAL_NAME:您要用于 外部数据库的凭据名称。
- EXTERNAL_DATABASE_USERNAME:您要用于 访问外部数据库的用户名。
- EXTERNAL_DATABASE_PASSWORD:外部 数据库的密码。外部数据源凭据在轮替时需要更新,并且必须由您手动管理。
为 Oracle 创建外部数据源。
CREATE EXTERNAL DATA SOURCE DATA_SOURCE_NAME WITH ( LOCATION = 'oracle://SERVER_IP:PORT', PUSHDOWN = PUSHDOWN, CREDENTIAL = DB_CREDENTIAL_NAME );替换以下内容:
- DATA_SOURCE_NAME:您要用于外部数据库的名称。
- SERVER_IP:服务器的 IP 或主机名。
- PORT:您要使用的端口。
- PUSHDOWN:必填。下推
是 SQL Server 中提供的一项功能,必须进行配置。根据您的用例,将值设置为
ON或OFF。 - DB_CREDENTIAL_NAME:您刚刚创建的凭据。
创建外部表。
定义外部数据的架构和结构:
- 创建外部表定义。架构必须与远程表匹配。
- 使用适当的 SQL Server 数据类型和排序规则定义列。
- 位置是远程表路径。
CREATE EXTERNAL TABLE EXTERNAL_TABLE_NAME( COLUMN_NAME_1 DATA_TYPE_1 COLLATE COLLATION_1, COLUMN_NAME_2 DATA_TYPE_2 COLLATE COLLATION_2, ... ) WITH( LOCATION = 'REMOTE_DATABASE.REMOTE_USERNAME.REMOTE_TABLE_NAME', DATA_SOURCE = DB_DATA_SOURCE_NAME );替换以下内容:
- EXTERNAL_TABLE_NAME:您要创建的外部表的名称。
- COLUMN_NAME_1:表的第一个列的名称。
- DATA_TYPE_1:第一个列的数据类型。
- COLLATION_1:您要用于第一个列的排序规则。
- COLUMN_NAME_2:表的第二个列的名称。
- DATA_TYPE_2:第二个列的数据类型。
- COLLATION_2:您要用于第二个列的排序规则。
- REMOTE_DATABASE:远程数据库的名称。
- REMOTE_USERNAME:远程用户的用户名。
- REMOTE_TABLE_NAME:远程表的名称。
- DB_DATA_SOURCE_NAME:外部数据源的名称。
查询您创建的外部 Oracle 表。
SELECT TOP 10 * FROM EXTERNAL_TABLE_NAME;替换以下内容:
- EXTERNAL_TABLE_NAME:您要查询的外部表的名称。
Cloud Storage
在 SQL Server 中完成以下步骤。
为 Cloud Storage 创建数据库范围的凭据。
如果尚不存在用户数据库,请切换到用户数据库以创建主密钥:
USE USER_DB; CREATE MASTER KEY ENCRYPTION BY PASSWORD='MK_PASSWORD';替换以下内容:
- USER_DB:您要用于创建主密钥的用户数据库。
例如,
polybasedb。 - MK_PASSWORD:您要用于主密钥的密码。请务必保存主密钥的密码以供日后使用。
- USER_DB:您要用于创建主密钥的用户数据库。
例如,
Cloud Storage 需要访问密钥 ID 和密钥 ID:
CREATE DATABASE SCOPED CREDENTIAL STORAGE_CREDENTIAL_NAME WITH IDENTITY = 'S3 Access Key', SECRET = 'ACCESS_KEY_ID:SECRET_KEY_ID';替换以下内容:
- STORAGE_CREDENTIAL_NAME:您要使用的 Cloud Storage 凭据 的名称。
- ACCESS_KEY_ID:访问密钥 ID。
- SECRET_KEY_ID:密钥 ID。
仅支持基本身份验证。
创建外部数据源。
CREATE EXTERNAL DATA SOURCE STORAGE_DATA_SOURCE_NAME WITH ( LOCATION = 's3://storage.googleapis.com/', CREDENTIAL = STORAGE_CREDENTIAL_NAME );替换以下内容:
- STORAGE_DATA_SOURCE_NAME:Cloud Storage 中外部数据源的名称。
- STORAGE_CREDENTIAL_NAME:外部 存储资源凭据的名称。
为 Cloud Storage 创建外部表。
定义外部数据的格式和结构:
- 创建外部文件。架构必须与文件结构匹配。
- 使用适当的 SQL Server 数据类型和排序规则定义列。
- 位置是数据源中的路径。
CREATE EXTERNAL FILE FORMAT FILE_FORMAT_NAME WITH ( FORMAT_TYPE = FORMAT_TYPE, FORMAT_OPTIONS ( FIELD_TERMINATOR = 'FIELD_TERMINATOR', STRING_DELIMITER = 'DELIMITER', FIRST_ROW = FIRST_ROW ) ); CREATE EXTERNAL TABLE FILE_EXTERNAL_TABLE_NAME ( COLUMN_NAME_1 DATA_TYPE_1, COLUMN_NAME_2 DATA_TYPE_2, ... ) WITH ( LOCATION = 'PATH_TO_BUCKET/FILENAME', DATA_SOURCE = STORAGE_DATA_SOURCE_NAME, FILE_FORMAT = FILE_FORMAT_NAME );替换以下内容:
- FILE_FORMAT_NAME:您要创建的外部文件格式的名称。
- FORMAT_TYPE:您要使用的格式类型,例如
DELIMITEDTEXT。 如需查看受支持的值的列表,请参阅支持的文件格式。 - FIELD_TERMINATOR:您要使用的字段定界符。
- DELIMITER:您要使用的字符串定界符。
- FIRST_ROW:您要开始读取的行。
- FILE_EXTERNAL_TABLE_NAME:您要创建的外部表的名称。
- COLUMN_NAME_1:表的第一个列的名称。
- DATA_TYPE_1:第一个列的数据类型。
- COLUMN_NAME_2:表的第二个列的名称。
- DATA_TYPE_2:第二个列的数据类型。
- PATH_TO_BUCKET:Cloud Storage 存储桶的完整路径。
- FILENAME:位于 Cloud Storage 存储桶中的文件名。
- STORAGE_DATA_SOURCE_NAME:Cloud Storage 中外部数据源的名称。
- FILE_FORMAT_NAME:外部文件格式的名称。
查询您创建的外部 Cloud Storage 表。
SELECT * FROM FILE_EXTERNAL_TABLE_NAME;替换以下内容:
- FILE_EXTERNAL_TABLE_NAME:您要查询的外部表的名称。
在数据库恢复操作后管理数据库主密钥
用于访问外部数据源的数据库范围凭据使用数据库主密钥 (DMK) 进行加密。
DMK 使用源实例的服务主密钥 (SMK) 和用户提供的 DMK 密码进行加密。在源实例上,SQL Server 使用 SMK 静默打开 DMK。
如果您恢复 Cloud SQL for SQL Server 实例,则由于 SMK 发生更改,DMK 不会在新实例上自动打开。
因此,您需要先使用在创建 DMK 期间建立的用户密码解密 DMK,然后使用目标实例 SMK 重新加密 DMK。
如需了解详情,请参阅以下 Microsoft 资源:
日志
日志浏览器中提供了以下 PolyBase 日志:
Polybase_Dms_errors.logPolybase_Dms_movement.logPolybase_DWEngine_errors.logPolybase_DWEngine_movement.logPolybase_DWEngine_server.log
如需了解详情,请参阅有关 PolyBase 问题排查的 Microsoft 文档。