Synapse Analytics のファイアウォール設定や、プライベートエンドポイント経由でのアクセスを、Synapse Studio で確認していて、一部の項目がうまく表示されない場合などの調査時のメモを。
ファイアウォールで「Azure サービスおよびリソースに、このワークスペースへのアクセスを許可する」をオフにして、アクセスを厳しくしている場合の調査に使っていました。
SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿
Synapse Analytics は Azure Data Factory のようなパイプラインの実行機能を持っており、クラウドベースの ETL の実行を行うことができます。
Synapse Analytics と Data Factory のパイプラインの違いについては、Data integration in Azure Synapse Analytics versus Azure Data Factory に記載されており、いくつかの違いがあります。
Monitoring についても機能差があり、Synapse のパイプラインは Azure Monitor に統合が行われていません。
これにより、現時点では、パイプライン (またはトリガー) の実行状況の取得方法が、Data Factory とは異なります。
また、Azure Monitor と統合がされていないことにより、診断設定の利用可否も変わってくるかと思います。
しばやん先生が Hack Azure! #4 – Synapse と Cosmos で実現するサーバーレスデータ分析 フォローアップ で紹介していますが、Synapse Analytics の Serverless SQL pool の分散クエリ処理エンジン (Distributed Query Processing Engine : DQP) については、POLARIS として、Microsoft Research から、「POLARIS: The Distributed SQL Engine in Azure Synapse」として、論文が公開されています。
論文を読むのはしんどいのですが、VLDB 2020 では、動画の公開も行われていましたので、こちらも合わせながら、ざっくりと眺めてみました。
Synapse Analytics (Workspace) の SQL on-demand (Serverless SQL Pool) では、次の形態の DB を利用することができます。
従来の、Azure SQL Database では「論理サーバー」を使用した環境の場合、サーバーはエンドポイントとなっていました。
エンドポイント内に複数のデータベースを作成することはできるのですが、各データベースは独立したリソースで動作しているため、データベースを跨いだクエリの実行にはかなり制限がありました。
SQL on-demand の場合、Azure SQL Database の論理サーバーモデルとは異なり、データベースを跨いだクエリの実行ができるようです。
Azure Synapse SQL でサポートされる Transact-SQL 機能 で、サポートされる T-SQL の機能が記載されているのですが、SQL on-demand では、データベース間のクエリはサポートとなっています。
SQL on-demand (Serverless SQL Pool) では、共有メタデータテーブル という形で Spark Pool で作製した Parquet フォーマットを使用したテーブルを、SQL on-demand で参照することができます。
先日投稿した、Synapse Analytics の Serverless SQL Pool (SQL on-demand) でテキストを参照する際の文字コードの設定 (おまけで Synapse Link for Cosmos DB) でも Synapse Analytics の照合順序に触れましたが、共有メタデータテーブルでも照合順序はポイントとなる点がありますので、触れておきたいと思います。
ドキュメントについては、SQL オンデマンド (プレビュー) で Apache Spark for Azure Synapse の外部テーブル定義を同期する を参照すると良いかと。
Synapse Analytics の SQL on-demand(Serverless SQL Pool) と、Azure Storage の Query Acceleration では、Azure Storage 上のファイルに対して、SQL を実行することが可能です。
どちらもファイル対して、SQL を実行する機能ではありますが、これらの機能ではどのような違いがあるのか気になったので簡単にではありますが比較してみました。
ツールによりデータを取得するか、SDK からクエリを実行してデータを取得するかという、そもそものユースケースに違いがありますので、あまり比較しても意味はないかもしれませんが、ざっとした比較では次のようになるかと。
SQL on-demand | Query Acceleration | |
検索対象として利用可能な Azure ストレージ | Azure BLOB ストレージ Azure Data Lake Storage Gen2 |
Azure BLOB ストレージ Azure Data Lake Storage Gen2 (Synapse Link で Cosmos DB に接続可) |
クエリの実行方法 | TDS データは TDS で取得 |
SDK データは Stream オブジェクトで取得 |
サポートする SQL | 一般的な検索の SQL をサポート データソース間の JOIN が可能 |
限定的 な SQL をサポート 単一データソースによる検索 |
データのエクスポート | TDS を利用可能なツール CETAS |
Stream オブジェクトをコードで操作 |
検索対象のファイル | CSV JSON Parquet |
CSV JSON |
一つのクエリで検索可能なファイル | ディレクトリ ワイルドカード |
単一ファイル |
メタデータによる検索するファイルのフィルター | filename() 関数 filepath() 関数 |
メタデータ BLOB インデックスタグ |
Ignite 2020 の What’s New in Azure Storage では、Query Acceleration に関しては、次のような解説が行われていました。
「Deeply integrated into Azure Synapse Analytics for improved performance and cost」と説明がされています。
具体的にどのように Synaspe Anaytics と統合されているのかまでは解説されていないのですが、Synapse Analytics で使用されている Polaris という分散 SQL エンジンが内部的には使用されているのかもしれませんね。
Synapse Link for Cosmos DB を SQL Ondemand (Serverless SQL Pool) で操作する場合のメモを。
SQL Ondemand なのか、Serverless SQL Pool なのかがよくわからないので、どちらでもヒットするようにしています (遠い目)
ドキュメントとしては次の内容をベースとしています。
Synapse Analytics の Serverless SQL Pool (SQL on-demand) では、BLOB / ADL Gen2 上のファイルに対してクエリを実行することができます。
同様の内容を実現する機能としては、Azure Data Lake Storage のクエリ アクセラレーション があります。
こちらについては、しばやん先生が Azure Data Lake Storage の Query Acceleration が GA になったので試したら最高だった で機能の解説をされています。
この機能の比較をするために検証していたときに「そういえば、Serverless SQL Pool で、テキストを読むとき文字コードって何にする必要があったっけ?」と思い、軽く検証してみました。
今回は Shift-JIS / UTF8? / UTF16 LE の 3 パターンで検証しています。
使用しているデータは、本ブログのアクセスログを CSV に出力したものです。
シンプルな構成にするのであれば、次のような構成をしておけばいいのではないでしょうか。
Synapse Analytics では、データの移動について、
という 2 種類の操作を目にする機会が多いかと思います。
これらの動作については、次のドキュメントなどに情報が記載されています。
Synapse の SQL Pool に関しては、Analytics Platform System (APS) という、以前は、Parallel Data Warehouse (PDW) と呼ばれていたシステムがベースになっており、基本的な考え方については、並列データウェアハウスコンポーネント-分析プラットフォームシステム の情報も参考になるケースがあります。
クエリの操作については、Analytics Platform System Appliance Update 5 Documentation and Client Tools からダウンロードできるドキュメントが今でも一番情報が記載されているのではないでしょうか。
このドキュメント内には、BroadcastMoveOperation と ShuffleMoveOperation についても記載されています。
というような記載があります。
基本的には、ディストリビューションに格納されていないデータ間での結合や集計が発生した際に、他のディストリビューションのデータを再配布することで必要なデータをコピーする処理となるのですが、どのような動作が実行されているかについて、まとめたことがなかったので、この機会にまとめておこうかと思います。
Synapse Workspace では、ワークスペースのリソースをデプロイする際に、Managed VNET に関連付けができます。(デプロイ時にのみ設定することができ、ワークスペースの作成後に設定を変更することはできません)
詳細については、Azure Synapse Analytics のマネージド仮想ネットワーク (プレビュー) に記載されているのですが、この辺の設定がいまいちわかっていなかったので、情報を整理しておこうかと。