Azure Synapse SQL でサポートされる Transact-SQL 機能

Azure Synapse SQL は、T-SQL 言語を使用してデータのクエリと分析を実行できるビッグ データ分析サービスです。 SQL Server と Azure SQL Database で使用される SQL 言語の標準の ANSI 準拠言語をデータ分析に使用できます。

Transact-SQL 言語はサーバーレス SQL プールで使用されます。専用モデルは別のオブジェクトを参照でき、サポートされている機能のセットが少し異なります。 このページでは、Synapse SQL の消費モデル間での Transact-SQL 言語の大まかな違いについて確認できます。

データベース オブジェクト

Synapse SQL の消費モデルでは、さまざまなデータベース オブジェクトを使用できます。 サポートされているオブジェクトの種類を比較した表を次に示します。

Object 専用 サーバーレス
テーブル はい いいえ。データベース内のテーブルはサポートされていません。 サーバーレス SQL プールでは、Azure Data Lake ストレージまたは Dataverse に格納されているデータを参照する外部テーブルに対してのみクエリを実行できます。
ビュー はい。 ビューでは、専用モデルで使用可能なクエリ言語要素を使用できます。 はい外部テーブルのビュー、OPENROWSET 関数を使用したクエリ、その他のビューを作成できます。 ビューでは、サーバーレス モデルで使用可能なクエリ言語要素を使用できます。
スキーマ はい はい。スキーマはサポートされます。 スキーマを使用して、異なるテナントを分離し、スキーマごとにテーブルを配置します。
一時テーブル はい 一時テーブルは、システム ビュー、リテラル、またはその他の一時テーブルからの何らかの情報を格納するためだけに使用される場合があります。 一時テーブルの UPDATE/DELETE もサポートされています。 一時テーブルをシステム ビューと結合できます。 外部テーブルからデータを選択して一時テーブルに挿入することや、一時テーブルを外部テーブルと結合することはできません。外部データと一時テーブルを同じクエリに混在させることはできないため、これらの操作は失敗します。
ユーザー定義プロシージャ あり はい。ストアド プロシージャは、任意のユーザー データベース ( master データベースではない) に配置できます。 プロシージャでできることは、外部データの読み取りと、サーバーレス プールで使用可能なクエリ言語要素を使用することだけです。
ユーザー定義関数 はい はい。インライン テーブル値関数のみがサポートされています。 スカラーのユーザー定義関数はサポートされていません。
トリガー いいえ いいえ。サーバーレス SQL プールはデータの変更を許可しないため、トリガーはデータの変更に対応できません。
外部テーブル はい。 サポートされるデータ形式をご確認ください。 はい。外部テーブルは使用可能であり、Azure Data Lake ストレージまたは Dataverse からデータを読み取るために使用できます。 サポートされるデータ形式をご確認ください。
クエリのキャッシュ はい。複数の形式 (SSD ベースのキャッシュ、インメモリ、結果セットのキャッシュ)。 さらに、具体化されたビューがサポートされます。 いいえ。ファイル統計のみがキャッシュされます。
結果セットのキャッシュ あり いいえ。クエリ結果はキャッシュされません。 ファイル統計のみがキャッシュされます。
具体化されたビュー はい いいえ。具体化されたビューはサーバーレス SQL プールではサポートされていません。
テーブル変数 いいえ。一時テーブルを使用します テーブル変数はサポートされていません。
テーブルの分散 はい ただし、テーブル ディストリビューションはサポートされません。
テーブルのインデックス はい いいえ。インデックスはサポートされていません。
テーブル パーティション はい 外部テーブルでは、パーティション分割はサポートされていません。 Hive パーティション フォルダー構造を使用してファイルをパーティション分割し、Spark でパーティション テーブルを作成することができます。 Spark パーティションはサーバーレス プールと同期されます。 Spark を使用していない場合は、ファイルをフォルダー構造でパーティション分割して、フォルダー パーティション構造でパーティション ビューを作成できますが、パーティション分割されたフォルダーに外部テーブルを作成することはできません。
統計 はい はい。統計は外部ファイルに対して作成されます。
ワークロード管理、リソース クラス、コンカレンシー制御 はい。ワークロード管理、リソース クラス、コンカレンシー制御をご覧ください。 いいえ。クエリに割り当てられているリソースを管理することはできません。 サーバーレス SQL プールはリソースを自動的に管理します。
コスト管理 はい。スケールアップおよびスケールダウン アクションを使用。 はい。Azure portal または T-SQL プロシージャを使用して、サーバーレス プールの毎日、毎週、または毎月の使用量を制限できます。

クエリ言語

Synapse SQL で使用されるクエリ言語では、従量課金モデルに応じてサポートされる機能が異なります。 次の表では、Transact-SQL 言語において最も重要なクエリ言語の違いについて説明します。

ステートメント 専用 サーバーレス
SELECT ステートメント はい。 SELECT ステートメントはサポートされていますが、FOR XML、FOR JSONMATCH、OFFSET、FETCH などの Transact-SQL クエリ句はサポートされていません。 はい。SELECT ステートメントはサポートされていますが、FOR XMLMATCHPREDICT、GROUPNG SETS などの Transact-SQL クエリ句、およびクエリ ヒントはサポートされていません。
INSERT ステートメント はい いいえ。 Spark またはその他のツールを使用してデータ レイクに新しいデータをアップロードします。 トランザクション性の高いワークロードには、Azure Cosmos DB と分析ストレージを使用します。 CETAS を使用して、外部テーブルを作成したり、データを挿入したりできます。
UPDATE ステートメント はい いいえ。Spark を使用して Parquet/CSV データを更新すると、変更はサーバーレス プールにも自動的に反映されます。 トランザクション性の高いワークロードには、Azure Cosmos DB と分析ストレージを使用します。
DELETE ステートメント はい いいえ。Spark を使用して Parquet/CSV データを削除すると、変更はサーバーレス プールにも自動的に反映されます。 トランザクション性の高いワークロードには、Azure Cosmos DB と分析ストレージを使用します。
MERGE ステートメント はい (プレビュー) いいえ。Spark を使用して Parquet/CSV データをマージすると、変更はサーバーレス プールにも自動的に反映されます。
CTAS ステートメント はい いいえ。CREATE TABLE AS SELECT ステートメントは、サーバーレス SQL プールではサポートされていません。
CETAS ステートメント はい。CETAS を使用して外部テーブルへの初期読み込みを実行できます。 はい。CETAS を使用して外部テーブルへの初期読み込みを実行できます。 CETAS では、Parquet および CSV の出力形式がサポートされています。
トランザクション はい はい。トランザクションはメタデータ オブジェクトにのみ適用されます。
ラベル はい いいえ、ラベルはサーバーレス SQL プールではサポートされていません。
データ読み込み はい。 推奨されるユーティリティは COPY ステートメントです。ただし、データ読み込みでは一括読み込み (BCP) と CETAS の両方がサポートされます。 いいえ。データは外部ストレージに格納されているため、サーバーレス SQL プールにデータを読み込むことはできません。 CETAS ステートメントを使用して、最初に外部テーブルにデータを読み込む必要があります。
データ エクスポート はい。 CETAS を使用。 はい。 CETAS を使用して、外部ストレージ (Azure Data Lake、Dataverse、Azure Cosmos DB) から Azure Data Lake にデータをエクスポートできます。
はい。cursorhierarchyidntext、text、imagerowversion空間型sql_variantxml を除くすべての Transact-SQL 型 はい。cursorhierarchyidntext、text、imagerowversion空間型sql_variantxml、テーブル型を除くすべての Transact-SQL 型がサポートされています。 Parquet の列型を SQL 型にマップする方法を参照してください。
複数データベース間のクエリ いいえ はい。複数データベース間のクエリと 3 部構成の名前参照は、USE ステートメントを含めてサポートされています。 クエリでは、同じワークスペース内のサーバーレス SQL データベースまたは Lake データベースを参照できます。 ワークスペースをまたいだクエリはサポートされていません。
組み込みシステム関数 (分析) はい。CHOOSE および PARSE を除くすべての Transact-SQL 分析、変換、日付と時刻、論理、および数学関数 はい。すべての Transact-SQL 分析、変換、日付と時刻、論理、および数学関数がサポートされています。
組み込みシステム関数 (文字列) はい。 STRING_ESCAPETRANSLATE を除くすべての Transact-SQL 文字列JSON、および照合順序関数 はい。 すべての Transact-SQL 文字列JSON、および照合順序関数がサポートされています。
組み込みシステム関数 (暗号化) 一部 HASHBYTES は、サーバーレス SQL プールでサポートされている唯一の暗号関数です。
組み込みシステム テーブル値関数 はい。OPENXMLOPENDATASOURCEOPENQUERYOPENROWSET を除く Transact-SQL 行セット関数 はい。OPENXMLOPENDATASOURCEOPENQUERY を除くすべての Transact-SQL 行セット関数がサポートされています。
組み込みシステム集計 CHECKSUM_AGGGROUPING_ID を除く Transact-SQL 組み込み集計 はい。すべての Transact-SQL 組み込み集計がサポートされています。
オペレーター はい。!>!< を除くすべての Transact-SQL 演算子 はい。すべての Transact-SQL 演算子がサポートされています。
フロー制御 はい。 CONTINUEGOTORETURNUSEWAITFOR を除くすべての Transact-SQL フロー制御ステートメント はい。 すべての Transact-SQL フロー制御ステートメントがサポートされています。 WHILE (...) 条件での SELECT クエリはサポートされていません。
DDL ステートメント (CREATE、ALTER、DROP) はい。 サポートされているオブジェクトの種類に適用できるすべての Transact-SQL DDL ステートメント はい。サポートされているオブジェクトの種類に適用できるすべての Transact-SQL DDL ステートメントがサポートされています。

Security

Synapse SQL プールを使用すると、組み込みのセキュリティ機能を使用し、データをセキュリティで保護してアクセスを制御できます。 次の表は、Synapse SQL 消費モデル間の大まかな違いを比較したものです。

機能 専用 サーバーレス
ログイン なし (データベースでサポートされるのは包含ユーザーのみ) 利用可能。サーバーレベルの Microsoft Entra ID および SQL ログインがサポートされています。
ユーザー なし (データベースでサポートされるのは包含ユーザーのみ) はい。データベース ユーザーはサポートされています。
包含ユーザー はい。 注: 制限のない管理者になれる Microsoft Entra ユーザーは 1 人だけです いいえ。包含ユーザーはサポートされていません。
SQL ユーザー名とパスワードによる認証 はい はい。ユーザーは自分のユーザー名とパスワードを使用してサーバーレス SQL プールにアクセスできます。
Microsoft Entra 認証 利用可能。Microsoft Entra ユーザーに関して 利用可能。Microsoft Entra のログインとユーザーは、それぞれの Microsoft Entra の ID を使用してサーバーレス SQL プールにアクセスできます。
ストレージ Microsoft Entra パススルー認証 はい 利用可能。Microsoft Entra パススルー認証は、Microsoft Entra ログインに適用されます。 資格情報が指定されていない場合、Microsoft Entra ユーザーの ID がストレージに渡されます。 SQL ユーザーは、Microsoft Entra パススルー認証を使用できません。
ストレージの Shared Access Signature (SAS) トークン認証 いいえ はい。EXTERNAL DATA SOURCEDATABASE SCOPED CREDENTIAL共有アクセス署名トークンと共に使用するか、インスタンスレベルの CREDENTIAL共有アクセス署名と共に使用します。
Storage のアクセス キー認証 はい。EXTERNAL DATA SOURCEDATABASE SCOPED CREDENTIAL を使用 いいえ。ストレージ アクセス キーの代わりに SAS トークンを使用します。
Storage のマネージド ID 認証 はい。マネージド サービス ID 資格情報を使用 はい。クエリではワークスペースのマネージド ID 資格情報を使用してストレージにアクセスできます。
ストレージ アプリケーション ID/サービス プリンシパル (SPN) 認証 あり はい。サービス プリンシパル アプリケーション ID を使用して、ストレージでの認証に使用される資格情報を作成できます。
サーバーの役割 いいえ はい。sysadmin、public、およびその他のサーバー ロールがサポートされています。
サーバー レベルの資格情報 No はい。サーバー レベルの資格情報は、明示的なデータ ソースを使用しない OPENROWSET 関数によって使用されます。
アクセス許可 - サーバーレベル いいえ はい。たとえば、CONNECT ANY DATABASESELECT ALL USER SECURABLES はユーザーが任意のデータベースからデータを読み取れるようにします。
データベース ロール はい はい。db_ownerdb_datareaderdb_ddladmin の各ロールを使用できます。
DATABASE SCOPED CREDENTIAL はい。外部データ ソースで使用されます。 はい。データベース スコープの資格情報を外部データソースで使用してストレージの認証方法を定義できます。
アクセス許可 - データベースレベル はい はい。データベース オブジェクトに対するアクセス許可の付与、拒否、または取り消しができます。
アクセス許可 - スキーマレベル はい。スキーマでのユーザーまたはログインへのアクセス許可の付与、拒否、取り消しを行う機能を含む はい。スキーマレベルのアクセス許可を指定できます。これには、スキーマ上のユーザーまたはログインに対するアクセス許可の付与、拒否、取り消しができることが含まれます。
アクセス許可 - オブジェクトレベル はい。ユーザーへのアクセス許可の付与、拒否、取り消しを行う機能を含む はい。サポートされているシステム オブジェクト上のユーザーまたはログインに対してアクセス許可の付与、拒否、取り消しができます。
アクセス許可 - 列レベルのセキュリティ はい サーバーレス SQL プールにおいて、列レベル セキュリティは、ビューに対してはサポートされていますが、外部テーブルに対してはサポートされていません。 外部テーブルの場合、外部テーブルの上に論理ビューを作成してから、列レベルのセキュリティを適用できます。
行レベルのセキュリティ はい いいえ。行レベルのセキュリティに対するサポートは組み込まれていません。 回避策としてカスタム ビューを使用します。
データ マスク あり いいえ。組み込みのデータ マスキングは、サーバーレス SQL プールではサポートされていません。 回避策として、一部の列を明示的にマスクするラッパー SQL ビューを使用します。
組み込みのシステム セキュリティと ID の関数 一部の Transact-SQL セキュリティ関数および演算子: CURRENT_USERHAS_DBACCESSIS_MEMBERIS_ROLEMEMBERSESSION_USERSUSER_NAMESUSER_SNAMESYSTEM_USERUSERUSER_NAMEEXECUTE ASOPEN/CLOSE MASTER KEY 一部の Transact-SQL セキュリティ関数および演算子がサポートされています: CURRENT_USERHAS_DBACCESSHAS_PERMS_BY_NAMEIS_MEMBERIS_ROLEMEMBERIS_SRVROLEMEMBERSESSION_USERSESSION_CONTEXTSUSER_NAMESUSER_SNAMESYSTEM_USERUSERUSER_NAMEEXECUTE ASREVERT。 セキュリティ関数は、外部データのクエリを実行するために使用できません (クエリで使用できる変数に結果を格納します)。
透過的なデータ暗号化 (TDE) はい いいえ。Transparent Data Encryption はサポートされていません。
データの検出と分類 はい いいえ。データの検出と分類はサポートされていません。
脆弱性評価 はい いいえ。脆弱性評価は利用できません。
Advanced Threat Protection はい いいえ。Advanced Threat Protection はサポートされていません。
監査 はい はい。サーバーレス SQL プールで監査はサポートされています
ファイアウォール規則 はい はい。サーバーレス SQL エンドポイントでファイアウォール規則を設定できます。
プライベート エンドポイント はい はい。サーバーレス SQL プールでプライベート エンドポイントを設定できます。

専用 SQL プールとサーバーレス SQL プールでは、標準の Transact-SQL 言語を使用してデータのクエリを実行します。 詳細な相違点については、Transact-SQL 言語のリファレンスを参照してください。

プラットフォーム機能

機能 専用 サーバーレス
スケーリング はい サーバーレス SQL プールは、ワークロードに応じて自動的にスケーリングされます。
一時停止/再開 はい サーバーレス SQL プールは、使用されていない場合は自動的に非アクティブになり、必要に応じてアクティブになります。 ユーザーによるアクションは不要です。
データベースのバックアップ あり いいえ。 データは外部システム (ADLS、Cosmos DB) に格納されるため、ソースでデータのバックアップを実行していることを確認してください。 ソース管理で SQL メタデータ (テーブル、ビュー、プロシージャ定義、およびユーザーアクセス許可) を格納していることを確認してください。 Lake データベース内のテーブル定義は Spark メタデータに格納されるため、ソース管理でも Spark テーブル定義を保持していることを確認してください。
データベースの復元 あり いいえ。 データは外部システム (ADLS、Cosmos DB) に格納されるため、データを取り込むにはソース システムを復旧する必要があります。 SQL オブジェクトを再作成できるように、SQL メタデータ (テーブル、ビュー、プロシージャ定義、およびユーザーのアクセス許可) がソース管理に存在することを確認してください。 Lake データベース内のテーブル定義は Spark メタデータに格納されるため、ソース管理でも Spark テーブル定義を保持していることを確認してください。

ツール

さまざまなツールを使用して Synapse SQL に接続し、データのクエリを実行できます。

ツール 専用 サーバーレス
Synapse Studio はい。SQL スクリプト はい。Synapse Studio で SQL スクリプトを使用できます。 大量のデータが結果として返される場合は、Synapse Studio の代わりに SSMS または ADS を使用してください。
Power BI はい はい。Power BI を使用して、サーバーレス SQL プールのレポートを作成できます。 レポートではインポート モードが推奨されています。
Azure Analysis Service はい はい。サーバーレス SQL プールを使用して Azure Analysis Service にデータを読み込むことができます。
Azure Data Studio (ADS) はい はい。(バージョン 1.18.0 以降の) Azure Data Studio を使用して、サーバーレス SQL プールに対してクエリを実行できます。 SQL スクリプトと SQL ノートブックがサポートされています。
SQL Server Management Studio (SSMS) はい はい。(バージョン 18.5 以降の) SQL Server Management Studio を使用して、サーバーレス SQL プールに対してクエリを実行できます。 SSMS は、サーバーレス SQL プールで使用可能なオブジェクトのみを示します。

注意

SSMS を使用してサーバーレス SQL プールに接続し、クエリを実行できます。 これはバージョン 18.5 以降、部分的にサポートされています。接続してクエリを実行する場合にのみ使用できます。

標準の Transact-SQL 言語が使用されるほとんどのアプリケーションでは、専用とサーバーレス両方の Synapse SQL 消費モデルのクエリを実行できます。

データ アクセス

分析されるデータは、さまざまな種類のストレージで保存できます。 次の表は、すべての使用可能なストレージ オプションの一覧です。

ストレージの種類 専用 サーバーレス
内部ストレージ はい いいえ。データは Azure Data Lake または Azure Cosmos DB 分析ストレージに配置されます。
Azure Data Lake v2 はい はい。外部テーブルと OPENROWSET 関数を使用して、ADLS からデータを読み取ることができます。 アクセスの制御をセットアップする方法を参照してください。
Azure Blob Storage はい はい。外部テーブルと OPENROWSET 関数を使用して、Azure Blob Storage からデータを読み取ることができます。 アクセスの制御をセットアップする方法を参照してください。
Azure SQL/SQL Server (リモート) いいえ いいえ。サーバーレス SQL プールは Azure SQL データベースを参照できません。 エラスティック クエリまたはリンク サーバーを使用して、Azure SQL からサーバーレスの SQL プールを参照できます。
Dataverse いいえ。Spark またはサーバーレス SQL プール (ADLS 経由) で Azure Synapse Link を使用して、Azure Cosmos DB データを専用プールに読み込むことができます。 はい。Azure Data Lake で Dataverse 用の Azure Synapse Link を使用して、Dataverse テーブルを読み取ることができます。
Azure Cosmos DB トランザクション ストレージ いいえ いいえ。Azure Cosmos DB コンテナーにアクセスして、データを更新したり、Azure Cosmos DB トランザクション ストレージからデータを読み取ったりすることはできません。 Spark プールを使用して、Azure Cosmos DB のトランザクション ストレージを更新します。
Azure Cosmos DB 分析ストレージ いいえ。サーバーレス SQL プール (ADLS 経由) で Azure Synapse Link を使用して、Azure Cosmos DB データを専用プールに読み込むことができます。ADF、Spark、または他の何らかの読み込みツールでも行えます。 はい。Azure Synapse Link を使用して Azure Cosmos DB 分析ストレージに対してクエリを実行できます。
Apache Spark テーブル (ワークスペース内) いいえ はい。サーバーレス プールでは、メタデータ同期を使用して PARQUET テーブルと CSV テーブルを読み取ることができます。
Apache Spark テーブル (リモート) いいえ いいえ。サーバーレス プールは、同じ Synapse ワークスペース内の Apache Spark プールに作成された PARQUET テーブルと CSV テーブルのみにアクセスできます。 ただし、外部の Spark テーブルの場所を参照する外部テーブルを手動で作成することはできます。
Databricks テーブル (リモート) いいえ いいえ。サーバーレス プールは、同じ Synapse ワークスペース内の Apache Spark プールに作成された PARQUET テーブルと CSV テーブルのみにアクセスできます。 ただし、Databricks テーブルの場所を参照する外部テーブルを手動で作成することはできます。

データ形式

分析されるデータは、さまざまな形式のストレージで保存できます。 次の表は、分析できるすべての使用可能なデータ形式の一覧です。

データ形式 専用 サーバーレス
区切り記号 はい はい。区切りファイルに対してクエリを実行できます。
CSV はい (複数の文字による区切り記号はサポートされません) はい。CSV ファイルに対してクエリを実行できます。 パフォーマンスを向上させるには、より高速な解析を提供する PARSER_VERSION 2.0 を使用します。 CSV ファイルに行を追加する場合は、追加可能としてファイルに対してクエリを実行するようにしてください。
Parquet はい はい。入れ子にされた型のファイルを含む Parquet ファイルに対してクエリを実行できます。
Hive ORC はい いいえ。サーバーレス SQL プールでは、Hive ORC 形式を読み取ることはできません。
Hive RC はい いいえ。サーバーレス SQL プールでは、Hive RC 形式を読み取ることはできません。
JSON はい はい。区切りテキスト形式と T-SQL JSON 関数を使用して、JSON ファイルに対してクエリを実行できます。
Avro いいえ いいえ。サーバーレス SQL プールでは、Avro 形式を読み取ることはできません。
Delta Lake いいえ はい。入れ子にされた型のファイルを含む Delta Lake ファイルに対してクエリを実行できます。
Common Data Model (CDM) いいえ いいえ。サーバーレス SQL プールでは、Common Data Model を使用して格納されたデータを読み取ることはできません。

次のステップ

専用 SQL プールとサーバーレス SQL プールのベスト プラクティスに関する追加情報については、次の記事を参照してください。