外部データベース オブジェクトを作成する

完了

OPENROWSET 関数は、組み込みのサーバーレス SQL プールの既定のマスター データベースで実行される SQL クエリで使用して、データ レイク内のデータを探すことができます。 ただし、頻繁にクエリを実行する必要があるデータ レイク内の外部データの操作を容易にするオブジェクトを含むカスタム データベースを作成したい場合があります。

データベースの作成

SQL Server インスタンスの場合と同様に、サーバーレス SQL プールにデータベースを作成できます。 グラフィカル インターフェイスは、Synapse Studio または CREATE DATABASE ステートメントで使用できます。 1 つの考慮事項は、ファイル内のテキスト データから適切な Transact-SQL データ型への変換をサポートするように、データベースの照合順序を設定することです。

次のコード例では、UTF-8 でエンコードされたテキスト データを VARCHAR 列にインポートしやすくする照合順序を持つ salesDB という名前のデータベースを作成します。

CREATE DATABASE SalesDB
    COLLATE Latin1_General_100_BIN2_UTF8

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

OPENROWSET 関数を BULK パスと共に使用して、マスター データベースの場合と同様に、独自のデータベースからファイル データを照会できます。ただし、同じ場所のデータに頻繁にクエリを実行する場合は、その場所を参照する外部データ ソースを定義する方が効率的です。 たとえば、次のコードでは、架空の https://mydatalake.blob.core.windows.net/data/files/ フォルダーの files という名前のデータ ソースを作成します。

CREATE EXTERNAL DATA SOURCE files
WITH (
    LOCATION = 'https://mydatalake.blob.core.windows.net/data/files/'
)

外部データ ソースの利点の 1 つは、OPENROWSET クエリを簡略化して、データ ソースと、クエリを実行するフォルダーまたはファイルへの相対パスの組み合わせを使用できることです。

SELECT *
FROM
    OPENROWSET(
        BULK 'orders/*.csv',
        DATA_SOURCE = 'files',
        FORMAT = 'csv',
        PARSER_VERSION = '2.0'
    ) AS orders

この例では、BULK パラメーターを使用して、データ ソースによって参照される files フォルダーのサブフォルダーである orders フォルダー内のすべての.csv ファイルの相対パスを指定します。

データ ソースを使用するもう 1 つの利点は、基になるストレージにアクセスするときに使用するデータ ソースの資格情報を割り当てることで、ユーザーがストレージ アカウント内のデータに直接アクセスすることを許可することなく、SQL を介してデータへのアクセスを提供できることです。 たとえば、次のコードでは、データ レイクをホストする基になる Azure ストレージ アカウントに対して、Shared Access Signature (SAS) を使用して認証を行う資格情報を作成します。

CREATE DATABASE SCOPED CREDENTIAL sqlcred
WITH
    IDENTITY='SHARED ACCESS SIGNATURE',  
    SECRET = 'sv=xxx...';
GO

CREATE EXTERNAL DATA SOURCE secureFiles
WITH (
    LOCATION = 'https://mydatalake.blob.core.windows.net/data/secureFiles/'
    CREDENTIAL = sqlcred
);
GO

ヒント

SAS 認証に加えて、"マネージド ID" (Azure Synapse ワークスペースで使用される Microsoft Entra ID)、特定の Microsoft Entra プリンシパル、または、クエリを実行しているユーザーの ID に基づくパススルー認証を使用する (既定の認証タイプ) 資格情報を定義できます。 サーバーレス SQL プールでの資格情報の使用の詳細については、Azure Synapse Analytics ドキュメントの「Azure Synapse Analytics でサーバーレス SQL プールのストレージ アカウント アクセスを制御する」を参照してください。

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

外部データ ソースは OPENROWSET 関数を使用してファイルにアクセスするために必要なコードを簡略化しますが、アクセスするファイルの形式の詳細を指定する必要があります。これには、区切りテキスト ファイルの複数の設定を含めることができます。 次のように、外部ファイル形式でこれらの設定をカプセル化できます。

CREATE EXTERNAL FILE FORMAT CsvFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS(
            FIELD_TERMINATOR = ',',
            STRING_DELIMITER = '"'
        )
    );
GO

作業する必要がある特定のデータ ファイルのファイル形式を作成した後、次に説明するように、ファイル形式を使用して外部テーブルを作成できます。

外部のテーブルの作成

データ レイク内のファイルから大量の分析やレポートを実行する必要がある場合は、OPENROWSET 関数を使用すると、データ ソースとファイル パスを含む複雑なコードが作成される場合があります。 データへのアクセスを簡略化するために、ユーザーとレポート アプリケーションが他のデータベース テーブルと同様に標準の SQL SELECT ステートメントを使用してクエリを実行できるテーブルに、ファイルをカプセル化することができます。 外部テーブルを作成するには、CREATE EXTERNAL TABLE ステートメントを使用し、標準テーブルと同様に列スキーマを指定し、データの外部データ ソース、相対パス、外部ファイル形式を指定する WITH 句を含めます。

CREATE EXTERNAL TABLE dbo.products
(
    product_id INT,
    product_name VARCHAR(20),
    list_price DECIMAL(5,2)
)
WITH
(
    DATA_SOURCE = files,
    LOCATION = 'products/*.csv',
    FILE_FORMAT = CsvFormat
);
GO

-- query the table
SELECT * FROM dbo.products;

このユニットで説明する外部オブジェクトを含むデータベースを作成することで、データ レイク内のファイルに対してリレーショナル データベース レイヤーを提供できるため、多くのデータ アナリストやレポート ツールが標準の SQL クエリ セマンティクスを使用してデータに簡単にアクセスできるようになります。