Synapse SQL で外部テーブルを使用する

外部テーブルは、Hadoop、Azure Storage BLOB、または Azure Data Lake Storage にあるデータを参照します。 外部テーブルは、Azure Storage 内のファイルからデータを読み取ったり、ファイルにデータを書き込んだりするために使用されます。 Synapse SQL では、外部テーブルを使用し、専用 SQL プールまたはサーバーレス SQL プールを使って外部データを読み取ることができます。

外部データ ソースの種類に応じて、次の 2 種類の外部テーブルを使用できます。

  • Hadoop 外部テーブル。各種データ形式 (CSV、Parquet、ORC など) のデータを読み取ったりエクスポートしたりする際に使用できます。 Hadoop 外部テーブルは、専用 SQL プールでは利用できますが、サーバーレス SQL プールでは利用できません。
  • ネイティブ外部テーブル。各種データ形式 (CSV、Parquet など) のデータの読み取りとエクスポートに使用できます。 ネイティブ外部テーブルは、サーバーレス SQL プールで利用可能であり、専用 SQL プールではパブリック プレビュー段階です。

Hadoop 外部テーブルとネイティブ外部テーブルの主な違いを次の表に示します。

外部テーブルの種類 Hadoop ネイティブ
専用 SQL プール 利用可能 Parquet テーブルは、パブリック プレビューでのみ利用可能です。
サーバーレス SQL プール 使用不可 利用可能
サポートされるフォーマット 区切り形式 (CSV)、Parquet、ORC、Hive RC、RC サーバーレス SQL プール: 区切り形式 (CSV)、Parquet、Delta Lake
専用 SQL プール: Parquet (プレビュー)
フォルダー パーティションの除外 No パーティションの除外は、Apache Spark プールから同期される Parquet 形式または CSV 形式で作成されたパーティション テーブルでのみ使用できます。 Parquet パーティション フォルダー上の外部テーブルを作成することはできますが、パーティション分割列はアクセス不能になり、無視されます。一方、パーティションの除外は適用されません。 Delta Lake フォルダー上の外部テーブルは作成しないでください。これらはサポートされていないためです。 パーティション分割された Delta Lake データのクエリを実行する必要がある場合は、Delta パーティション ビューを使用します。
ファイルの削除 (述語プッシュダウン) No Yes (サーバーレス SQL プールの場合)。 文字列のプッシュダウンでは、VARCHAR 列で Latin1_General_100_BIN2_UTF8 の照合順序を使用してプッシュダウンを有効にする必要があります。
場所のカスタム形式 No はい。Parquet 形式または CSV 形式に /year=*/month=*/day=* などのワイルドカードを使用します。 カスタム フォルダー パスは Delta Lake では使用できません。 サーバーレス SQL プールでは、再帰的なワイルドカード /logs/** を使用して、参照先フォルダーの下にある任意のサブフォルダー内の Parquet ファイルまたは CSV ファイルを参照することもできます。
再帰的フォルダー スキャン はい はい。 サーバーレス SQL プールでは、ロケーション パスの末尾に指定する必要があります (/**)。 専用プールでは、フォルダーは常に再帰的にスキャンされます。
ストレージ認証 ストレージ アクセス キー (SAK)、AAD パススルー、マネージド ID、カスタム アプリケーションの Azure AD ID Shared Access Signature (SAS)AAD パススルーマネージド IDカスタム アプリケーションの Azure AD ID
列マッピング 序数 - 外部テーブル定義の列は、基になる Parquet ファイル内の列に位置によってマップされます。 サーバーレス プール: 名前によります。 外部テーブル定義の列は、基になる Parquet ファイル内の列に列名の一致によってマップされます。
専用プール: 序数の一致。 外部テーブル定義の列は、基になる Parquet ファイル内の列に位置によってマップされます。

注意

ネイティブ外部テーブルは、一般提供されているプール内で推奨されるソリューションです。 外部データにアクセスする必要がある場合は、常にサーバーレス プールでネイティブ テーブルを使用してください。 専用プールでは、GA に入った後に Parquet ファイルを読み取るためにネイティブ テーブルに切り替える必要があります。 Hadoop テーブルは、ネイティブ外部テーブル (ORC、RC など) でサポートされていない一部の型にアクセスする必要がある場合、またはネイティブ バージョンが使用できない場合にのみ使用します。

専用 SQL プールとサーバーレス SQL プールにおける外部テーブル

外部テーブルを使用して次のことができます。

  • Transact-SQL ステートメントを使用して、Azure Blob Storage と Azure Data Lake Gen2 に対するクエリを実行する。
  • CETAS を使用して、クエリ結果を Azure Blob Storage または Azure Data Lake Storage 内のファイルに格納する。
  • Azure Blob Storage や Azure Data Lake Storage からデータをインポートして、専用 SQL プールに格納する (専用プールでは Hadoop テーブルのみ)。

Note

CREATE TABLE AS SELECT ステートメントと組み合わせて使用する場合は、外部テーブルから選択するとデータが専用 SQL プール内のテーブルにインポートされます。

専用プール内の Hadoop 外部テーブルのパフォーマンスがパフォーマンス目標を達成できない場合は、COPY ステートメントを使用して Datawarehouse テーブルに外部データを読み込むことを検討してください。

読み込みのチュートリアルについては、PolyBase を使用した Azure Blob Storage からのデータの読み込みに関するページを参照してください。

次の手順を通じて、Synapse SQL プールに外部テーブルを作成できます。

  1. CREATE EXTERNAL DATA SOURCE で、外部 Azure ストレージを参照し、ストレージへのアクセスに使用する資格情報を指定します。
  2. CREATE EXTERNAL FILE FORMAT で、CSV または Parquet ファイルの形式を記述します。
  3. CREATE EXTERNAL TABLE を、データ ソースに配置されているファイル上で、同じファイル形式を使用して実行します。

フォルダー パーティションの除外

Synapse プール内のネイティブ外部テーブルでは、クエリに関連しないフォルダーに配置されたファイルを無視できます。 ファイルがフォルダー階層 (例: /year=2020/month=03/day=16) に格納され、の値が列として公開されている場合、year=2020 のようなフィルターを含むクエリでは、year=2020 フォルダー内に配置されたサブフォルダーからのみファイルが読み取られます。 このクエリでは、他のフォルダー (year=2021year=2022) に配置されたファイルとフォルダーは無視されます。 この除外はパーティションの除外と呼ばれます。

フォルダー パーティションの除外は、Synapse Spark プールから同期されるネイティブ外部テーブルで使用できます。 データ セットをパーティション分割し、作成した外部テーブルでパーティションの除外を活用する場合は、外部テーブルではなくパーティション ビューを使用します。

ファイルの除外

Parquet や Delta などの一部のデータ形式には、各列のファイル統計 (各列の最小/最大値など) が含まれます。 データをフィルター処理するクエリでは、必要な列値が存在しないファイルは読み取られません。 クエリでは、まず、クエリ述語で使用される列の最小/最大値を調べ、必要なデータを含んでいないファイルを検索します。 これらのファイルは無視され、クエリ プランから除外されます。 この手法はフィルター述語のプッシュダウンとも呼ばれ、クエリのパフォーマンスを向上させることができます。 フィルター プッシュダウンは、Parquet および Delta 形式のサーバーレス SQL プールで使用できます。 文字列型のフィルター プッシュダウンを利用するには、Latin1_General_100_BIN2_UTF8 の照合順序と一緒に VARCHAR 型を使用します。

セキュリティ

ユーザーは、外部テーブルのデータを読み取る場合、それに対する SELECT アクセス許可が必要です。 外部テーブルから、基になる Azure Storage へのアクセスは、次の規則を使用してデータソース内で定義されているデータベース スコープ資格情報を使用して行います。

  • 資格情報なしのデータソースの場合、外部テーブルからは、Azure Storage 上の一般公開されているファイルにアクセスできます。
  • SAS トークンまたはワークスペースのマネージド ID を使用して外部テーブルが Azure Storage 上のファイルにしかアクセスできないようにするための資格情報をデータソースに含めることができます。例については、ストレージ ファイルのストレージ アクセス制御の開発に関する記事を参照してください。

CREATE EXTERNAL DATA SOURCE

外部データ ソースは、ストレージ アカウントへの接続に使用されます。 完全なドキュメントについては、こちらで概説されています。

CREATE EXTERNAL DATA SOURCE の構文

TYPE=HADOOP がある外部データ ソースは、専用 SQL プールでのみ利用できます。

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
(    LOCATION         = '<prefix>://<path>'
     [, CREDENTIAL = <database scoped credential> ]
     , TYPE = HADOOP
)
[;]

CREATE EXTERNAL DATA SOURCE の引数

data_source_name

データ ソースのユーザー定義の名前を指定します。 名前は、データベース内で一意である必要があります。

場所

LOCATION = '<prefix>://<path>': 接続プロトコルと外部データ ソースへのパスを指定します。 場所では、次のパターンを使用できます。

外部データ ソース 場所プレフィックス ロケーション パス
Azure Blob Storage wasb[s] <container>@<storage_account>.blob.core.windows.net
Azure Blob Storage http[s] <storage_account>.blob.core.windows.net/<container>/subfolders
Azure Data Lake Store Gen 1 http[s] <storage_account>.azuredatalakestore.net/webhdfs/v1
Azure Data Lake Store Gen 2 http[s] <storage_account>.dfs.core.windows.net/<container>/subfolders

https: プレフィックスを使用すると、パスでサブフォルダーを使用できます。

資格情報

CREDENTIAL = <database scoped credential> は、Azure Storage 上で認証を受けるために使用される省略可能な資格情報です。 資格情報のない外部データ ソースは、パブリック ストレージ アカウントにアクセスするか、呼び出し元の Azure AD ID を使用してストレージ上のファイルにアクセスできます。

  • 専用 SQL プールでは、データベース スコープ資格情報を使用して、カスタム アプリケーション ID、ワークスのペース マネージド ID、または SAK キーを指定できます。
  • サーバーレス SQL プールでは、データベース スコープ資格情報を使用して、ワークスペースのマネージド ID、または SAS キーを指定できます。

TYPE

TYPE = HADOOP は、基になるファイルへのアクセスに Java ベースのテクノロジを使用するよう指定するオプションです。 このパラメーターは、組み込みのネイティブ リーダーを使用するサーバーレス SQL プールでは使用できません。

CREATE EXTERNAL DATA SOURCE の例

次の例では、New York データ セットを参照する Azure Data Lake Gen2 の Hadoop 外部データ ソースを専用 SQL プールに作成します。

CREATE DATABASE SCOPED CREDENTIAL [ADLS_credential]
WITH IDENTITY='SHARED ACCESS SIGNATURE',  
SECRET = 'sv=2018-03-28&ss=bf&srt=sco&sp=rl&st=2019-10-14T12%3A10%3A25Z&se=2061-12-31T12%3A10%3A00Z&sig=KlSU2ullCscyTS0An0nozEpo4tO5JAgGBvw%2FJX2lguw%3D'
GO

CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH
  -- Please note the abfss endpoint when your account has secure transfer enabled
  ( LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net' ,
    CREDENTIAL = ADLS_credential ,
    TYPE = HADOOP
  ) ;

次の例では、一般公開されている New York データ セットを参照する Azure Data Lake Gen2 の外部データ ソースを作成します。

CREATE EXTERNAL DATA SOURCE YellowTaxi
WITH ( LOCATION = 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/',
       TYPE = HADOOP)

CREATE EXTERNAL FILE FORMAT

Azure Blob Storage または Azure Data Lake Storage に格納される外部データを定義する外部ファイル形式オブジェクトを作成します。 外部ファイル形式の作成は、外部テーブルを作成するための前提条件です。 完全なドキュメントはこちらにあります。

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

CREATE EXTERNAL FILE FORMAT の構文

-- Create an external file format for PARQUET files.  
CREATE EXTERNAL FILE FORMAT file_format_name  
WITH (  
    FORMAT_TYPE = PARQUET  
    [ , DATA_COMPRESSION = {  
        'org.apache.hadoop.io.compress.SnappyCodec'  
      | 'org.apache.hadoop.io.compress.GzipCodec'      }  
    ]);  

--Create an external file format for DELIMITED TEXT files
CREATE EXTERNAL FILE FORMAT file_format_name  
WITH (  
    FORMAT_TYPE = DELIMITEDTEXT  
    [ , DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec' ]
    [ , FORMAT_OPTIONS ( <format_options> [ ,...n  ] ) ]  
    );  

<format_options> ::=  
{  
    FIELD_TERMINATOR = field_terminator  
    | STRING_DELIMITER = string_delimiter
    | FIRST_ROW = integer
    | USE_TYPE_DEFAULT = { TRUE | FALSE }
    | ENCODING = {'UTF8' | 'UTF16'}
    | PARSER_VERSION = {'parser_version'}
}

CREATE EXTERNAL FILE FORMAT の引数

file_format_name: 外部ファイル形式の名前を指定します。

FORMAT_TYPE = [ PARQUET | DELIMITEDTEXT]: 外部データの形式を指定します。

  • PARQUET: Parquet 形式を指定します。
  • DELIMITEDTEXT: フィールド ターミネータとも呼ばれる、列区切り記号付きのテキスト形式を指定します。

FIELD_TERMINATOR = field_terminator: 区切りテキスト ファイルにのみ適用されます。 フィールド ターミネータは、テキスト区切りファイルでの各フィールド (列) の終了を示す 1 つ以上の文字を指定します。 既定値はパイプ文字 (ꞌ|ꞌ) です。

例 :

  • FIELD_TERMINATOR = '|'
  • FIELD_TERMINATOR = ' '
  • FIELD_TERMINATOR = ꞌ\tꞌ

STRING_DELIMITER = string_delimiter: テキスト区切りのファイル内の文字列型のデータにはフィールド ターミネータを指定します。 文字列の区切り記号の長さは 1 文字または複数文字とし、単一引用符で囲みます。 既定値は空の文字列 ("") です。

例 :

  • STRING_DELIMITER = '"'
  • STRING_DELIMITER = '*'
  • STRING_DELIMITER = ꞌ,ꞌ

FIRST_ROW = First_row_int: 最初に読み取られる行の番号を指定し、すべてのファイルに適用します。 値を 2 に設定すると、データの読み込み時に各ファイルの最初の行 (ヘッダー行) がスキップされます。 行は、行ターミネータ (/r/n、/r、/n) の存在に基づいてスキップされます。

USE_TYPE_DEFAULT = { TRUE | FALSE }: テキスト ファイルからデータを取得するときに、区切りテキスト ファイル内の不足値を処理する方法を指定します。

注意

USE_TYPE_DEFAULT=true は、FORMAT_TYPE = DELIMITEDTEXT、PARSER_VERSION = '2.0' ではサポートされないことに注意してください。

TRUE: テキスト ファイルからデータを取得するときは、外部テーブルの定義内の対応する列に既定値のデータ型を使用して、各不足値を格納します。 たとえば、不足値を次の値に置き換えます。

  • 列が numeric 型の列として定義されている場合は 0 decimal 型の列はサポートされておらず、エラーになります。
  • 列が string 型の列である場合は空の文字列 ("") です。
  • 列が date 列の場合は 1900-01-01 です。

FALSE: すべての不足値を NULL として格納します。 区切りテキスト ファイルで単語 NULL を使って格納されている NULL 値は、文字列 "NULL" としてインポートされます。

Encoding = {'UTF8' | 'UTF16'}: サーバーレス SQL プールでは、UTF8 および UTF16 でエンコードされた区切りテキスト ファイルを読み取ることができます。

DATA_COMPRESSION = data_compression_method: この引数では、外部データのデータ圧縮方法を指定します。

PARQUET ファイル形式の種類では、次の圧縮方法がサポートされています。

  • DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'
  • DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'

PARQUET 外部テーブルから読み取る場合に、この引数は無視されます。しかし、CETAS を使用して外部テーブルに書き込む場合は使用されます。

DELIMITEDTEXT ファイル形式の種類では、次の圧縮方法がサポートされています。

  • DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'

PARSER_VERSION = 'parser_version': CSV ファイルの読み取り時に使用するパーサーのバージョンを指定します。 使用可能なパーサーのバージョンは 1.0 および 2.0 です。 このオプションは、サーバーレス SQL プールでのみ使用できます。

CREATE EXTERNAL FILE FORMAT の例

次の例では、国勢調査ファイルの外部ファイル形式を作成します。

CREATE EXTERNAL FILE FORMAT census_file_format
WITH
(  
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
)

CREATE EXTERNAL TABLE

CREATE EXTERNAL TABLE コマンドでは、Azure Blob Storage または Azure Data Lake Storage 内に格納されたデータにアクセスするために Synapse SQL の外部テーブルを作成します。

CREATE EXTERNAL TABLE の構文

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ ,...n ] )  
    WITH (
        LOCATION = 'folder_or_filepath',  
        DATA_SOURCE = external_data_source_name,  
        FILE_FORMAT = external_file_format_name
        [, TABLE_OPTIONS = N'{"READ_OPTIONS":["ALLOW_INCONSISTENT_READS"]}' ]
        [, <reject_options> [ ,...n ] ] 
    )
[;] 

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]

<reject_options> ::=  
{  
    | REJECT_TYPE = value,  
    | REJECT_VALUE = reject_value,  
    | REJECT_SAMPLE_VALUE = reject_sample_value,
    | REJECTED_ROW_LOCATION = '/REJECT_Directory'
}   

CREATE EXTERNAL TABLE の引数

{ database_name.schema_name.table_name | schema_name.table_name | table_name }

作成するテーブルの 1 つから 3 つの部分で構成される名前。 外部テーブルの場合、Synapse SQL プールではテーブルのメタデータのみが格納されます。 実際のデータは移動されず、Synapse SQL データベースに格納されません。

<column_definition>, ...< ]

CREATE EXTERNAL TABLE では、列名、データ型、照合順序を構成できます。 外部テーブルに対して DEFAULT CONSTRAINT を使用することはできません。

重要

データ型と列の数を含む列の定義は、外部ファイルのデータと一致している必要があります。 不一致がある場合、実際のデータに対してクエリを実行するときに、ファイルの行が拒否されます。 拒否する行の動作を制御するには、「拒否オプション」を参照してください。

Parquet ファイルからの読み取りの場合は、読み取りたい列だけを指定して、残りをスキップすることができます。

LOCATION = 'folder_or_filepath'

Azure Blob Storage にある実際のデータのフォルダーまたはファイル パスとファイル名を指定します。 ルート フォルダーから、場所を開始します。 ルート フォルダーは、外部データ ソースで指定されたデータの場所です。

外部テーブルの再帰型データ

Hadoop 外部テーブルとは異なり、ネイティブ外部テーブルでは、パスの最後に /** を指定しない限り、サブフォルダーが返されません。 この例では、LOCATION='/webdata/' である場合、サーバーレス SQL プールのクエリで mydata.txt から行が返されます。 mydata2.txt と mydata3.txt はサブフォルダー内にあるため、これらは返されません。 Hadoop テーブルでは、サブフォルダー内のすべてのファイルが返されます。

Hadoop 外部テーブルとネイティブ外部テーブルではどちらも、名前が下線 (_) またはピリオド (.) で始まるファイルはスキップされます。

DATA_SOURCE = external_data_source_name

外部データの場所が含まれている外部データ ソースの名前を指定します。 外部データ ソースを作成するには、CREATE EXTERNAL DATA SOURCE を使用します。

FILE_FORMAT = external_file_format_name

外部データのファイル形式や圧縮方法を格納する外部ファイル形式オブジェクトの名前を指定します。 外部ファイル形式を作成するには、CREATE EXTERNAL FILE FORMAT を使用します。

拒否オプション

Note

拒否された行機能はパブリック プレビュー段階にあります。 拒否された行機能は、区切られたテキスト ファイルと PARSER_VERSION 1.0 で動作することに注意してください。

外部データ ソースから取得したダーティ レコードがどのように処理されるかを決める reject パラメーターを指定できます。 データ レコードが "ダーティ" と見なされるのは、実際のデータ型が外部テーブルの列の定義と一致しない場合です。

拒否オプションを指定も変更もしないと、既定値が使用されます。 reject パラメーターに関するこの情報は、CREATE EXTERNAL TABLE ステートメントを使用して外部テーブルを作成するときに、追加メタデータとして格納されます。 以降の SELECT ステートメントまたは SELECT INTO SELECT ステートメントで外部テーブルからデータを選択するとき、実際のクエリが失敗するまでに拒否できる行数は、拒否オプションを使用して決定されます。 拒否のしきい値を超えるまで、クエリの (部分的な) 結果が返されます。 その後、適切なエラー メッセージと共に失敗します。

REJECT_TYPE = value

現時点で唯一サポートされている値です。 REJECT_VALUE オプションがリテラル値として指定されていることを明確にします。

value

REJECT_VALUE はリテラル値です。 拒否された行が reject_value を超えると、クエリは失敗します。

たとえば、REJECT_VALUE = 5 で REJECT_TYPE = value の場合、SELECT クエリは、5 行を拒否した後に失敗します。

REJECT_VALUE = reject_value

クエリが失敗するまでに拒否できる行数を指定します。

REJECT_TYPE = value の場合、reject_value は 0 から 2,147, 483,647 の範囲の整数にする必要があります。

REJECTED_ROW_LOCATION = <ディレクトリの場所>

外部データ ソース内のディレクトリを指定します。拒否された行と該当エラー ファイルをそこに書き込みます。 指定したパスが存在しない場合、そのパスが自動的に作成されます。 "rejectedrows" という名前で子ディレクトリが作成されます。" " 文字があることで、場所パラメーターで明示的に指定されない限り、他のデータ処理ではこのディレクトリがエスケープされます。 このディレクトリ内には、読み込み送信時刻に基づいて作成されたフォルダーが存在し、これは次の形式になっています: YearMonthDay_HourMinuteSecond_StatementID (例: 20180330-173205-559EE7D2-196D-400A-806D-3BF5D007F891)。 ステートメント id を使用して、フォルダーをその生成元のクエリと関連付けることができます。 このフォルダーには、2 つのファイルが書き込まれます。具体的には、error.json ファイルとデータ ファイルです。

error.json ファイルには、拒否された行に関連する、発生したエラーの json 配列が含まれています。 エラーを表す各要素には、次の属性が含まれています。

属性 説明
エラー 行が拒否された理由。
ファイル内の拒否された行の序数。
拒否された列の序数。
拒否された列の値。 値が 100 文字を超える場合は、最初の 100 文字のみが表示されます。
File 行が属しているファイルのパス。

TABLE_OPTIONS

TABLE_OPTIONS = json options: 基になるファイルを読み取る方法を示す一連のオプションを指定します。 現時点で使用できる唯一のオプションは、"READ_OPTIONS":["ALLOW_INCONSISTENT_READS"] です。これは、不整合な読み取り操作が発生する可能性がある場合でも、基になるファイルに対して行われた更新を無視するように外部テーブルに指示します。 このオプションは、ファイルが頻繁に追加される特殊な場合にのみ使用してください。 このオプションは、CSV 形式のサーバーレス SQL プールで使用できます。

CREATE EXTERNAL TABLE のアクセス許可

外部テーブルから選択を行うには、適切な資格情報のほか、リストと読み取りのアクセス許可が必要です。

CREATE EXTERNAL TABLE の例

次の例では、外部テーブルを作成します。 最初の行が返されます。

CREATE EXTERNAL TABLE census_external_table
(
    decennialTime varchar(20),
    stateName varchar(100),
    countyName varchar(100),
    population int,
    race varchar(50),
    sex    varchar(10),
    minAge int,
    maxAge int
)  
WITH (
    LOCATION = '/parquet/',
    DATA_SOURCE = population_ds,  
    FILE_FORMAT = census_file_format
)
GO

SELECT TOP 1 * FROM census_external_table

Azure Data Lake 内のファイルから外部テーブルを作成してクエリを実行する

Synapse Studio の Data Lake 探索機能を使用すると、ファイルを右クリックするだけで、Synapse SQL プールを使って外部テーブルを作成してクエリを実行できるようになります。 ADLS Gen2 ストレージ アカウントから外部テーブルを作成するワンクリック ジェスチャーは、Parquet ファイルでのみサポートされます。

前提条件

  • 少なくとも、ファイルに対してクエリを実行できるよう、ADLS Gen2 アカウントまたはアクセス制御リスト (ACL) への Storage Blob Data Contributor アクセス ロールが設定されたワークスペースにアクセスできる必要があります。

  • Synapse SQL プール (専用またはサーバーレス) で外部テーブルを作成してクエリを実行するためのアクセス許可が少なくとも必要です。

[データ] パネルで、外部テーブルの作成元にするファイルを選択します。

externaltable1

ダイアログ ウィンドウが開きます。 専用 SQL プールかサーバーレス SQL プールを選択し、テーブルに名前を付けて [スクリプトを開く] を選択します。

externaltable2

SQL スクリプトは、ファイルからのスキーマの推論により自動的に生成されます。

externaltable3

スクリプトを実行します。 このスクリプトでは、Select Top 100 *. が自動的に実行されます。

externaltable4

外部テーブルが作成されました。今後この外部テーブルの内容を探索するために、ユーザーは [データ] ペインから直接クエリを実行できます。

externaltable5

次のステップ

クエリの結果を Azure Storage の外部テーブルに保存する方法については、CETAS に関する記事をご覧ください。 また、Azure Synapse 外部テーブルの Apache Spark に対するクエリを開始することもできます。