次の方法で共有


チュートリアル: マネージド ID を使用して外部データを読み込む

この記事では、マネージド ID を使用して外部テーブルを作成したり、Azure Data Lake Storage (ADLS) Gen2 アカウントからデータを取り込んだりする方法について説明します。

前提条件

このチュートリアルを完了するには以下のリソースが必要です。

  • Azure Data Lake Storage (ADLS) Gen2 アカウント
  • Azure Synapse Analytics ワークスペース と専用 SQL プール

ワークスペース ID にストレージ アカウントへのアクセス権を付与する

各 Azure Synapse Analytics ワークスペースは、ワークスペースから外部データへの安全なアクセスを構成するのに役立つ、マネージド ID を自動的に作成します。 Azure Synapse Analytics 用マネージド ID の詳細については、「Azure Synapse Analytics のマネージド ID」を参照してください。

マネージド ID が ADLS Gen2 アカウントのデータにアクセスできるようにするには、ソース アカウントへのアクセス権を ID に付与する必要があります。 適切な許可を付与するには、次の手順に従います。

  1. Azure portal でストレージ アカウントを検索します。
  2. [データ ストレージ] -> [コンテナー] の順に選択し、外部テーブルによるアクセスが必要なソース データが置かれたフォルダーに移動します。
  3. [アクセス制御 (IAM)] を選択します。
  4. [追加] -> [ロールの割り当ての追加] の順に選択します。
  5. 職務権限ロールの一覧で [ストレージ BLOB データの共同作成者] を選択し、[次へ] を選択します。
  6. [ロールの割り当ての追加] ページで、[+ メンバーの選択]を選択します。 [メンバーの選択] ペインが開きます。
  7. ワークスペース ID の名前を入力します。 ワークスペース ID は、ワークスペースの名前と同じです。 表示されたら、ワークスペース ID を選択し、[選択] をクリックします。
  8. [ロールの割り当ての追加] ページで、メンバーの一覧に、目的の Microsoft Entra ID アカウントが含まれていることを確認します。 確認できたら、[レビュー + 割り当て] を選択します。
  9. 確認ページで変更内容を確認し、[レビュー + 割り当て] を選択します。

これで、ご使用のワークスペース ID がストレージ BLOB データ共同作成者ロールのメンバーになり、ソース フォルダーにアクセスできるようになりました。

Note

これらの手順は、パブリック アクセスを制限するように構成された、安全な ADLS Gen2 アカウントにも適用されます。 ADLS Gen2 アカウントのセキュリティ保護の詳細については、「Azure Storage ファイアウォールと仮想ネットワークの構成」を参照してください。

COPY INTO を使用してデータを取り込む

T-SQL の COPY INTO ステートメントは、柔軟で高スループットのデータ インジェストをテーブル内で実現でき、専用 SQL プール テーブルにデータを取り込むための主要な戦略となっています。 COPY INTO を使用すると、ユーザーは外部テーブルに必要な追加のデータベース オブジェクトを作成せずに、外部のロケーションからデータを取り込めます。

認証にワークスペースのマネージド ID を使用して COPY INTO ステートメントを実行するには、次の T-SQL コマンドを使用します。

COPY INTO <TableName>
FROM 'https://<AccountName>.dfs.core.windows.net/<Container>/<Folder>/ '
WITH
(
    CREDENTIAL = (IDENTITY = 'Managed Identity'),
    [<CopyIntoOptions>]
);

ここで:

  • <TableName> は、データを取り込むテーブルの名前です
  • <AccountName> は、ADLS Gen2 のアカウント名です
  • <Container> は、ストレージ アカウント内の、ソース データが保存されているコンテナーの名前です
  • <Folder> は、コンテナー内でソース データが保存されているフォルダー (またはサブフォルダーを含むパス) です。 1 つのファイルを直接指す場合は、ファイル名を指定することもできます。
  • <CopyIntoOptions> は、COPY INTO ステートメントで指定できる、その他のオプションのリストです。

COPY INTO の完全な構文の詳細を調べるには、「COPY INTO (Transact-SQL)」を参照してください。

外部テーブルを使用して ADLS Gen2 のデータをクエリする

外部テーブルを使用すると、最初にデータを取り込まなくても、ユーザーは Azure Data Lake Storage (ADLS) Gen2 アカウントのデータに対してクエリを実行できます。 ユーザーは、ADLS Gen2 コンテナー上のファイルを指す外部テーブルを作成し、それを通常のユーザー テーブルと同様にクエリできます。

次の手順で、認証にマネージド ID を使用して、ADLS Gen2 上のデータを指す新しい外部テーブルを作成するプロセスについて説明します。

必要なデータベース オブジェクトを作成する

外部テーブルでは、次のオブジェクトを作成する必要があります。

  1. データベースでスコープされる認証情報のシークレットを、暗号化するデータベース マスター キー
  2. ワークスペース ID を使用する、データベースでスコープされた認証情報
  3. ソース フォルダーを指す外部データ ソース
  4. ソース ファイルの形式を定義する外部ファイル形式
  5. クエリに使用される外部テーブルの定義

これらの手順を実行するには、Azure Synapse ワークスペース内で SQL エディターを使用するか、好みの SQL クライアントを専用の SQL プールに接続して使用します。 これらの手順を詳しく見てみましょう。

データベース マスター キーを作成する

データベース マスター キーは対称キーであり、証明書の秘密キーや、データベース内に存在する非対称キー、およびデータベースでスコープされている認証情報内のシークレットを保護するときに使用します。 データベースに既にマスター キーがある場合は、新たにマスター キーを作成する必要はありません。 <Secure Password> をセキュリティで保護されたパスワードに置き換えます。 このパスワードは、データベース内のマスター キーを暗号化するために使用されます。

マスター キーを作成するには、次の T-SQL コマンドを使用します。

-- Replace <Secure Password> with a secure password
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Secure Password>';

データベース マスター キーの詳細については、「CREATE MASTER KEY (Transact-SQL)」を参照してください。

データベース スコープ資格情報を作成する

データベースでスコープされた認証情報は、ワークスペース ID を使用しており、外部テーブルがソース データへのアクセスを必要とする場合には、外部の場所にアクセスするために必要となります。

データベースでスコープされた認証情報を作成するには、次のコマンドを使用します。 <CredentialName> は、データベースでスコープされた認証情報に使用する名前に置き換えます。

CREATE DATABASE SCOPED CREDENTIAL <CredentialName> WITH IDENTITY = 'Managed Service Identity';

データベースでスコープされた認証情報の詳細については、「CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)」を参照してください。

外部データ ソースを作成する

次の手順では、外部データ ソースを作成します。これが、外部テーブルで使用されるソース データが置かれている場所を指定します。

外部データ ソースを作成するには、次の T-SQL コマンドを使用します。

CREATE EXTERNAL DATA SOURCE <ExternalDataSourceName>
WITH (
    TYPE = HADOOP,
    LOCATION = 'abfss://<Container>@<AccountName>.dfs.core.windows.net/<Folder>/,
    CREDENTIAL = <CredentialName>
);

ここで:

  • <ExternalDataSourceName> は、外部データ ソースに使用する名前です。
  • <AccountName> は ADLS Gen2 のアカウント名です。
  • <Container> は、ストレージ アカウント内でソース データが保存されている、コンテナーの名前です。
  • <Folder> は、コンテナー内でソース データが保存されているフォルダー (またはサブフォルダーを含むパス) です。 1 つのファイルを直接指す場合は、ファイル名を指定することもできます。
  • <Credential> は、先に作成してある、データベースでスコープされた認証情報の名前です。

外部データ ソースの詳細については、「CREATE EXTERNAL DATA SOURCE (Transact-SQL)」を参照してください。

外部ファイル形式を作成する

次の手順では、外部ファイルの形式を作成します。 これにより、外部テーブルによって参照されるデータの、実際のレイアウトを指定します。

外部ファイルの形式を作成するには、次の T-SQL コマンドを使用します。 <FileFormatName> は、外部ファイル形式に使用する名前に置き換えます。

CREATE EXTERNAL FILE FORMAT <FileFormatName>
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (
        FIELD_TERMINATOR = ',',
        STRING_DELIMITER = '"',
        FIRST_ROW = 2,
        USE_TYPE_DEFAULT = True
    )
);

この例では、ソース データに従って必要に応じ FIELD_TERMINATORSTRING_DELIMITERFIRST_ROW などのパラメーターを調整します。 書式設定オプションと EXTERNAL FILE FORMAT の詳細については、「CREATE EXTERNAL FILE FORMAT」を参照してください。

外部テーブルを作成する

この時点で、外部データに安全にアクセスするためのメタデータの保持に必要となる、すべてのオブジェクトが作成されているので、次は外部テーブルを作成します。 外部テーブルを作成するには、次の T-SQL コマンドを使用します。

-- Adjust the table name and columns to your desired name and external table schema
CREATE EXTERNAL TABLE <ExternalTableName> (
    Col1 INT,
    Col2 NVARCHAR(100),
    Col4 INT
)
WITH
(
    LOCATION = '<Path>',
    DATA_SOURCE = <ExternalDataSourceName>,
    FILE_FORMAT = <FileFormatName>
);

ここで:

テーブル名とスキーマは、ソース ファイル内で使用するデータの名前とスキーマに合わせて調整してください。

この時点で、外部テーブルへのアクセスに必要なすべてのメタデータが作成されます。 作業を検証するため外部テーブルをテストするには、次の T-SQL サンプルのようなクエリを使用します。

SELECT TOP 10 Col1, Col2 FROM <ExternalTableName>;

すべてが正しく構成されていれば、このクエリの結果として、ソース データからのデータが表示されます。

CREATE EXTERNAL TABLE の完全な構文の詳細を調べるには、「CREATE EXTERNAL TABLE (Transact-SQL)」を参照してください。