本页介绍了如何配置和管理外部数据源,以便与 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 时设置的用户密码对其进行解密,然后再使用目标实例 SMK 对其进行重新加密。
如需了解详情,请参阅以下 Microsoft 资源:
日志
Logs Explorer中提供了以下 PolyBase 日志:
Polybase_Dms_errors.logPolybase_Dms_movement.logPolybase_DWEngine_errors.logPolybase_DWEngine_movement.logPolybase_DWEngine_server.log
如需了解详情,请参阅 Microsoft 有关 PolyBase 问题排查的文档。