PolyBase で使用する外部データソースを構成する

<meta <="" content="このページでは、PolyBase と Cloud SQL for SQL Server インスタンスで使用する外部データソースを構成する方法について説明します。" name="description" /> <0x

このページでは、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 で次の操作を行います。

  1. Oracle 用のデータベース スコープの認証情報(DSC)を作成します。

    1. まだ存在しない場合は、ユーザー データベースに切り替えてマスターキーを作成します。

      USE USER_DB;
      CREATE MASTER KEY ENCRYPTION BY PASSWORD='MK_PASSWORD';
      

      次のように置き換えます。

      • USER_DB: マスターキーの作成に使用するユーザー データベース。例: polybasedb
      • MK_PASSWORD: 使用するマスターキーのパスワード。後で使用できるように、マスターキーのパスワードを保存してください。
    2. 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: 外部データベースのパスワード。外部データソースの認証情報は、ローテーション時に更新する必要があります。また、手動で管理する必要があります。
  2. 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: 先ほど作成した認証情報。
  3. 外部テーブルを作成します。

    外部データのスキーマと構造を定義します。

    • 外部テーブル定義を作成します。スキーマはリモート テーブルと一致する必要があります。
    • 適切な 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: 外部データソースの名前。
  4. 作成した外部 Oracle テーブルに対してクエリを実行します。

    SELECT TOP 10 * FROM EXTERNAL_TABLE_NAME;
    

    次のように置き換えます。

    • EXTERNAL_TABLE_NAME: クエリを実行する外部テーブルの名前。

Cloud Storage

SQL Server で次の操作を行います。

  1. Cloud Storage のデータベース スコープの認証情報を作成します。

    1. まだ存在しない場合は、ユーザー データベースに切り替えてマスターキーを作成します。

      USE USER_DB;
      CREATE MASTER KEY ENCRYPTION BY PASSWORD='MK_PASSWORD';
      

      次のように置き換えます。

      • USER_DB: マスターキーの作成に使用するユーザー データベース。例: polybasedb
      • MK_PASSWORD: マスターキーに使用するパスワード。後で使用できるように、マスターキーのパスワードを保存してください。
    2. 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。

      基本認証のみがサポートされています。

  2. 外部データソースを作成します。

    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: 外部ストレージ リソースの認証情報の名前。
  3. 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: 外部ファイル形式の名前。
  4. 作成した外部 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.log
  • Polybase_Dms_movement.log
  • Polybase_DWEngine_errors.log
  • Polybase_DWEngine_movement.log
  • Polybase_DWEngine_server.log

詳細については、PolyBase のトラブルシューティングに関する Microsoft のドキュメントをご覧ください。

次のステップ