SQL プールで Delta Lake を使う
Delta Lake は、Azure Synapse Analytics の Spark プールなど、Apache Spark 用のトランザクション型リレーショナル ストレージ レイヤーとして設計されています。 ただし、Azure Synapse Analytics には、サーバーレス SQL プール ランタイムも含まれています。データ アナリストやエンジニアはこれを使い、データ レイクやリレーショナル データベースのデータに対して SQL クエリを実行することができます。
Note
サーバーレス SQL プール内の Data Lake テーブルのデータに対しては、"クエリ" のみを実行できます。データを "更新"、"挿入"、または "削除" することはできません。
OPENROWSET を使った差分形式ファイルのクエリ
Azure Synapse Analytics のサーバーレス SQL プールには、差分形式ファイルの読み取りサポートが含まれています。SQL プールを使って Delta Lake テーブルへのクエリを実行することができます。 この方法が役立つのは、Spark と Delta のテーブルを使って大量のデータを処理し、SQL プールを使って処理済みデータのレポートと分析のためにクエリを実行するシナリオです。
次の例では、SQL SELECT
クエリで OPENROWSET
関数を使って差分形式データを読み取ります。
SELECT *
FROM
OPENROWSET(
BULK 'https://mystore.dfs.core.windows.net/files/delta/mytable/',
FORMAT = 'DELTA'
) AS deltadata
サーバーレス SQL プールでこのクエリを実行すると、指定したファイルの場所に格納されている Delta Lake テーブルから最新のデータを取得できます。
また、次の例のように、データベースを作成し、Delta Lake データ ファイルの場所をカプセル化したデータ ソースを追加することもできます。
CREATE DATABASE MyDB
COLLATE Latin1_General_100_BIN2_UTF8;
GO;
USE MyDB;
GO
CREATE EXTERNAL DATA SOURCE DeltaLakeStore
WITH
(
LOCATION = 'https://mystore.dfs.core.windows.net/files/delta/'
);
GO
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'mytable',
DATA_SOURCE = 'DeltaLakeStore',
FORMAT = 'DELTA'
) as deltadata;
Note
Parquet 形式で格納されている Delta Lake データを扱う場合、文字列の互換性を確保するために、一般に UTF-8 ベースの照合順序でデータベースを作成するのが最適です。
カタログ テーブルのクエリ
Azure Synapse Analytics のサーバーレス SQL プールは、Spark メタストア内のデータベースへのアクセスを共有しているので、Spark SQL を使って作成されたカタログ テーブルのクエリを実行できます。 次の例では、サーバーレス SQL プールの SQL クエリを使って、Delta Lake データを含むカタログ テーブルのクエリを実行しています。
-- By default, Spark catalog tables are created in a database named "default"
-- If you created another database using Spark SQL, you can use it here
USE default;
SELECT * FROM MyDeltaTable;
ヒント
サーバーレス SQL プールからの Delta テーブルの使用については、Azure Synapse Analytics ドキュメントの「Azure Synapse Analytics でサーバーレス SQL プールを使用して Delta Lake ファイルのクエリを実行する」を参照してください。