チュートリアル: マネージド 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 に付与する必要があります。 適切な許可を付与するには、次の手順に従います。
- Azure portal でストレージ アカウントを検索します。
- [データ ストレージ] -> [コンテナー] の順に選択し、外部テーブルによるアクセスが必要なソース データが置かれたフォルダーに移動します。
- [アクセス制御 (IAM)] を選択します。
- [追加] -> [ロールの割り当ての追加] の順に選択します。
- 職務権限ロールの一覧で [ストレージ BLOB データの共同作成者] を選択し、[次へ] を選択します。
- [ロールの割り当ての追加] ページで、[+ メンバーの選択]を選択します。 [メンバーの選択] ペインが開きます。
- ワークスペース ID の名前を入力します。 ワークスペース ID は、ワークスペースの名前と同じです。 表示されたら、ワークスペース ID を選択し、[選択] をクリックします。
- [ロールの割り当ての追加] ページで、メンバーの一覧に、目的の Microsoft Entra ID アカウントが含まれていることを確認します。 確認できたら、[レビュー + 割り当て] を選択します。
- 確認ページで変更内容を確認し、[レビュー + 割り当て] を選択します。
これで、ご使用のワークスペース 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 上のデータを指す新しい外部テーブルを作成するプロセスについて説明します。
必要なデータベース オブジェクトを作成する
外部テーブルでは、次のオブジェクトを作成する必要があります。
- データベースでスコープされる認証情報のシークレットを、暗号化するデータベース マスター キー
- ワークスペース ID を使用する、データベースでスコープされた認証情報
- ソース フォルダーを指す外部データ ソース
- ソース ファイルの形式を定義する外部ファイル形式
- クエリに使用される外部テーブルの定義
これらの手順を実行するには、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_TERMINATOR
、STRING_DELIMITER
、FIRST_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>
);
ここで:
<ExternalTableName>
は、外部テーブルに使用する名前です。<Path>
はソース データのパスで、外部データ ソースで指定されたロケーションに対する相対パスです。<ExternalDataSourceName>
は、先に作成済みの外部データ ソースの名前です。<FileFormatName>
は、先に作成済みの、外部ファイル形式の名前です。
テーブル名とスキーマは、ソース ファイル内で使用するデータの名前とスキーマに合わせて調整してください。
この時点で、外部テーブルへのアクセスに必要なすべてのメタデータが作成されます。 作業を検証するため外部テーブルをテストするには、次の T-SQL サンプルのようなクエリを使用します。
SELECT TOP 10 Col1, Col2 FROM <ExternalTableName>;
すべてが正しく構成されていれば、このクエリの結果として、ソース データからのデータが表示されます。
CREATE EXTERNAL TABLE
の完全な構文の詳細を調べるには、「CREATE EXTERNAL TABLE (Transact-SQL)」を参照してください。