Azure SQL Database で複数データベースにまたがるクエリ発行

Azure SQL Database で、elastic database query でいくつかの改善が発表されました。
今回の改善により、Azure SQL Database の elastic database quey は、垂直分割も水平分割も同じコンセプトで、同一表面上で実現できるようになりました。

  • データベースをまたがったクエリのサポート改善
  • Elastic Query がStandardとPremiumパフォーマンス帯で提供開始
  • リモートデータベースのテーブル名やスキーマ名にエイリアスを設定できるようになった
  • リモートテーブル参照時に、T-SQLパラメーターを含んだクエリ性能が改善
  • リモートテーブルから多くの行を参照するクエリの性能改善
  • sp_execute_fanoutプロシージャーでのパラメーターサポート

複数データベースへのクエリ発行

ローカルのテーブルとリモートのテーブルを結合して参照するクエリに対応しています。

Cross-database queries in Azure SQL Database

複数のデータベースを参照して、データを参照する次の図のような構成も可能になりました。

Querying remote databases in Azure SQL Database

従来から、Elastic Query が対応していた水平パーティ初認具のサポートも継続しています。

 

HorizontalPartitioning

リモートテーブルへのクエリ発行方法

リモートにあるテーブルを参照する方法として、外部データソースを経由して指定します。
イメージ的には、リンクテーブルと同じような感じですね。
外部データソースの作成にはDDLを使用し、一つのデータベースのみを指定します。

CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
    TYPE=RDBMS,
    LOCATION=’myserver.database.windows.net’,
    DATABASE_NAME=’ReferenceData’,
    CREDENTIAL= SqlUser
);

リモートテーブルは外部テーブルで定義します。外部テーブルの定義には、外部データソースを指定します。

CREATE EXTERNAL TABLE [dbo].[zipcode](
    [zc_id] int NOT NULL,
    [zc_cityname] nvarchar(256) NULL,
    [zc_zipcode] nvarchar(20) NOT NULL,
    [zc_country] nvarchar(5) NOT NULL
)
WITH
(
    DATA_SOURCE = RemoteReferenceData
);

image

外部テーブルは、すべての読み取り専用のクエリを発行することができます。