このページでは、PolyBase と Cloud SQL for SQL Server インスタンスで使用する外部データソースを構成して管理する方法について説明します。
外部オブジェクトへのアクセスを管理する
Cloud SQL では、PolyBase の有効化と無効化のオペレーションのみがサポートされています。ユーザーは、T-SQL ステートメントを使用して SQL Server エンティティを手動で管理する必要があります。
SQL Server エンティティを手動で管理する前に、次の Microsoft リソースを確認してください。
- T-SQL を使用して MASTER KEY を作成する
- Oracle の外部データにアクセスするように PolyBase を構成する
- S3 互換オブジェクト ストレージ内の外部データにアクセスするように PolyBase を構成する
外部データソースを作成する
次の手順では、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: テーブルの 2 番目の列の名前。
- DATA_TYPE_2: 2 番目の列のデータ型。
- COLLATION_2: 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: テーブルの 2 番目の列の名前。
- DATA_TYPE_2: 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 リソースをご覧ください。
ログ
ログ エクスプローラでは、次の PolyBase ログを使用できます。
Polybase_Dms_errors.logPolybase_Dms_movement.logPolybase_DWEngine_errors.logPolybase_DWEngine_movement.logPolybase_DWEngine_server.log
詳細については、PolyBase のトラブルシューティングに関する Microsoft のドキュメントをご覧ください。