Azure SQL Database のエラスティック クエリの概要 (プレビュー)Azure SQL Database elastic query overview (preview)

エラスティック クエリ機能 (プレビュー) を使うと、Azure SQL Database の複数のデータベースにまたがる Transact-SQL クエリを実行することができます。The elastic query feature (in preview) enables you to run a Transact-SQL query that spans multiple databases in Azure SQL Database. データベース間クエリを実行してリモート テーブルにアクセスしたり、Microsoft 製およびサード パーティ製ツール (Excel、PowerBI、Tableau など) を接続して複数のデータベースが含まれるデータ層間でクエリを実行したりできます。It allows you to perform cross-database queries to access remote tables, and to connect Microsoft and third party tools (Excel, PowerBI, Tableau, etc.) to query across data tiers with multiple databases. この機能により、クエリを SQL Database 内の大規模なデータ層にスケールアウトし、結果をビジネス インテリジェンス (BI) レポートで視覚化することができます。Using this feature, you can scale out queries to large data tiers in SQL Database and visualize the results in business intelligence (BI) reports.

エラスティック クエリを使用する理由Why use elastic queries?

Azure SQL DatabaseAzure SQL Database

T-SQL で Azure SQL Database 間の完全なクエリを実行します。Query across Azure SQL databases completely in T-SQL. これにより、リモート データベースの読み取り専用クエリを実行できます。This allows for read-only querying of remote databases. これにより、現在のオンプレミス SQL Server のお客様が 3 部および 4 部構成名または SQL DB へのリンク サーバーを使用してアプリケーションを移行できるようになります。This provides an option for current on-premises SQL Server customers to migrate applications using three- and four-part names or linked server to SQL DB.

Standard レベルで利用可能Available on standard tier

エラスティック クエリは、Premium パフォーマンス レベルだけでなく、Standard パフォーマンス レベルでもサポートされます。Elastic query is supported on the Standard performance tier in addition to the Premium performance tier. 下位のパフォーマンス レベルのパフォーマンスに関する制限事項については、後述の「プレビューの制限事項」をご覧ください。See the section on Preview Limitations below on performance limitations for lower performance tiers.

リモート データベースへのプッシュ送信Push to remote databases

エラスティック クエリでは、SQL パラメーターを実行用にリモート データベースにプッシュ送信できるようになりました。Elastic queries can now push SQL parameters to the remote databases for execution.

ストアド プロシージャの実行Stored procedure execution

sp_execute _remote を使用して、リモート ストアド プロシージャ呼び出しまたはリモート関数を実行します。Execute remote stored procedure calls or remote functions using sp_execute _remote.


エラスティック クエリを使用する外部テーブルで、スキーマまたはテーブル名が異なるリモート テーブルを参照できるようになりました。External tables with elastic query can now refer to remote tables with a different schema or table name.

エラスティック クエリのシナリオElastic query scenarios

目的は、複数のデータベースが 1 つの全体的な結果に行を提供するクエリ シナリオを容易に実現することです。The goal is to facilitate querying scenarios where multiple databases contribute rows into a single overall result. クエリは、ユーザーまたはアプリケーションによって直接、またはデータベースに接続されているツールを使って間接的に構成できます。The query can either be composed by the user or application directly, or indirectly through tools that are connected to the database. これは特に、商用の BI またはデータ統合ツール (または、変更することができないアプリケーション) を使用してレポートを作成する場合に便利です。This is especially useful when creating reports, using commercial BI or data integration tools—or any application that cannot be changed. エラスティック クエリを使用すると、Excel、PowerBI、Tableau、Cognos などのツールの使い慣れた SQL Server 接続機能を使用して、複数のデータベースにまたがるクエリを実行できます。With an elastic query, you can query across several databases using the familiar SQL Server connectivity experience in tools such as Excel, PowerBI, Tableau, or Cognos. また、SQL Server Management Studio や Visual Studio によって発行されるクエリ経由でデータベースのコレクション全体に簡単にアクセスでき、Entity Framework やその他の ORM 環境から複数のデータベースにまたがるクエリを容易に実行できます。An elastic query allows easy access to an entire collection of databases through queries issued by SQL Server Management Studio or Visual Studio, and facilitates cross-database querying from Entity Framework or other ORM environments. 図 1 に示すシナリオでは、既存のクラウド アプリケーション ( エラスティック データベース クライアント ライブラリを使用) はスケールアウトされたデータ層を基盤としており、エラスティック クエリを使用して複数のデータベースにまたがるレポートが作成されます。Figure 1 shows a scenario where an existing cloud application (which uses the elastic database client library) builds on a scaled-out data tier, and an elastic query is used for cross-database reporting.

図 1 スケールアウトされたデータ層で使用されるエラスティック クエリFigure 1 Elastic query used on scaled-out data tier

スケールアウトされたデータ層で使用されるエラスティック クエリ

エラスティック クエリの顧客シナリオは、次のトポロジによって特徴付けられます。Customer scenarios for elastic query are characterized by the following topologies:

  • 列方向のパーティション分割 – データベース間クエリ (トポロジ 1): データは、データ層内の複数のデータベースの間で列方向にパーティション分割されます。Vertical partitioning - Cross-database queries (Topology 1): The data is partitioned vertically between a number of databases in a data tier. 通常は、データベースごとに異なるテーブルのセットが存在します。Typically, different sets of tables reside on different databases. これは、異なるデータベースではスキーマが異なることを意味します。That means that the schema is different on different databases. たとえば、あるデータベースに在庫に関するすべてのテーブルが含まれていて、別のデータベースには会計に関連するすべてのテーブルが含まれているケースが該当します。For instance, all tables for inventory are on one database while all accounting-related tables are on a second database. このトポロジを使用する一般的なユース ケースでは、複数のデータベースの複数のテーブルを対象にクエリを実行したりレポートを作成したりする必要があります。Common use cases with this topology require one to query across or to compile reports across tables in several databases.
  • 行方向のパーティション分割 – シャーディング (トポロジ 2): データは行方向にパーティション分割され、スケールアウトされたデータ層にわたって行が分散されます。Horizontal Partitioning - Sharding (Topology 2): Data is partitioned horizontally to distribute rows across a scaled out data tier. この方法では、参加しているすべてのデータベースでスキーマが同じになります。With this approach, the schema is identical on all participating databases. この方法は、"シャーディング" とも呼ばれます。This approach is also called “sharding”. シャーディングは、(1) エラスティック データベース ツール ライブラリまたは (2) 自己シャーディングを使って実行、管理できます。Sharding can be performed and managed using (1) the elastic database tools libraries or (2) self-sharding. エラスティック クエリは、複数のシャードを対象にクエリを実行したりレポートを作成するために使用します。An elastic query is used to query or compile reports across many shards.


エラスティック クエリは、大部分の処理をデータ層で実行できるレポート シナリオの場合に最適です。Elastic query works best for occasional reporting scenarios where most of the processing can be performed on the data tier. より複雑なクエリが含まれている負荷の高いレポート ワークロードやデータ ウェアハウス シナリオの場合は、 Azure SQL Data Warehouseを使用することも検討してください。For heavy reporting workloads or data warehousing scenarios with more complex queries, also consider using Azure SQL Data Warehouse.

列方向のパーティション分割 – データベース間クエリVertical partitioning - cross-database queries

コード作成を開始するには、 データベース間クエリの概要 (列方向のパーティション分割)に関するページを参照してください。To begin coding, see Getting started with cross-database query (vertical partitioning).

エラスティック クエリを使うと、SQL Database にあるデータを他の SQL Database で利用できます。An elastic query can be used to make data located in a SQL database available to other SQL databases. これにより、あるデータベースに対するクエリで他のリモート SQL Database 内のテーブルを参照することができます。This allows queries from one database to refer to tables in any other remote SQL database. まず、各リモート データベースの外部データ ソースを定義します。The first step is to define an external data source for each remote database. 外部データ ソースは、リモート データベース上にあるテーブルにアクセスするローカル データベースに定義します。The external data source is defined in the local database from which you want to gain access to tables located on the remote database. リモート データベースに変更を加える必要はありません。No changes are necessary on the remote database. スキーマがデータベースごとに異なる一般的な列方向のパーティション分割シナリオでは、エラスティック クエリを使用して、参照データへのアクセスや、データベース間クエリなどの一般的なユース ケースを実装できます。For typical vertical partitioning scenarios where different databases have different schemas, elastic queries can be used to implement common use cases such as access to reference data and cross-database querying.


ユーザーは、ALTER ANY EXTERNAL DATA SOURCE アクセス許可を所有している必要があります。You must possess ALTER ANY EXTERNAL DATA SOURCE permission. このアクセス許可は、ALTER DATABASE アクセス許可に含まれています。This permission is included with the ALTER DATABASE permission. ALTER ANY EXTERNAL DATA SOURCE アクセス許可は、基になるデータ ソースを参照するために必要です。ALTER ANY EXTERNAL DATA SOURCE permissions are needed to refer to the underlying data source.

参照データ: 参照データの管理のためにトポロジが使われます。Reference data: The topology is used for reference data management. 次の図では、参照データを含む 2 つのテーブル (T1 と T2) は、専用のデータベースに保持されています。In the figure below, two tables (T1 and T2) with reference data are kept on a dedicated database. エラスティック クエリを使用すると、図に示すように、他のデータベースからリモートでテーブル T1 と T2 にアクセスできるようになります。Using an elastic query, you can now access tables T1 and T2 remotely from other databases, as shown in the figure. 参照テーブルのサイズが小さい場合や参照テーブルへのリモート クエリに選択的述語が含まれる場合は、トポロジ 1 を使用します。Use topology 1 if reference tables are small or remote queries into reference table have selective predicates.

図 2 列方向のパーティション分割 - エラスティック クエリを使用して参照データを照会するFigure 2 Vertical partitioning - Using elastic query to query reference data

列方向のパーティション分割 - エラスティック クエリを使用して参照データを照会する

データベース間クエリ: エラスティック クエリを使うと、複数の SQL Database にまたがるクエリを必要とするユース ケースに対応できます。Cross-database querying: Elastic queries enable use cases that require querying across several SQL databases. 図 3 には、CRM、Inventory、HR、Products の 4 つの異なるデータベースが示されています。Figure 3 shows four different databases: CRM, Inventory, HR and Products. これらのデータベースのいずれかで実行されるクエリでは、他のデータベースにもアクセスする必要があります。Queries performed in one of the databases also need access to one or all the other databases. エラスティック クエリを使用すると、4 つのデータベースごとにいくつかの単純な DDL ステートメントを実行することで、このケースに対応するデータベースを構成できます。Using an elastic query, you can configure your database for this case by running a few simple DDL statements on each of the four databases. この 1 回限りの構成を行った後は、T-SQL クエリまたは BI ツールからローカル テーブルを参照するだけでリモート テーブルにアクセスできます。After this one-time configuration, access to a remote table is as simple as referring to a local table from your T-SQL queries or from your BI tools. この方法は、リモート クエリからサイズの大きな結果が返されない場合にお勧めします。This approach is recommended if the remote queries do not return large results.

図 3 列方向のパーティション分割 - エラスティック クエリを使用して複数のデータベースにまたがって照会するFigure 3 Vertical partitioning - Using elastic query to query across various databases

列方向のパーティション分割 - エラスティック クエリを使用して複数のデータベースにまたがって照会する

次の手順では、同じスキーマのリモート SQL Database 上にあるテーブルへのアクセスを必要とする列方向のパーティション分割シナリオ向けに、エラスティック データベース クエリを構成します。The following steps configure elastic database queries for vertical partitioning scenarios that require access to a table located on remote SQL databases with the same schema:

DDL ステートメントを実行すると、ローカル テーブルであるかのようにリモート テーブル "mytable" にアクセスできます。After running the DDL statements, you can access the remote table “mytable” as though it were a local table. Azure SQL Database により、リモート データベースへの接続が自動的に開かれてリモート データベースで要求が処理され、その結果が返されます。Azure SQL Database automatically opens a connection to the remote database, processes your request on the remote database, and returns the results.

行方向のパーティション分割 - シャーディングHorizontal partitioning - sharding

エラスティック クエリを使用してシャーディングされた (行方向にパーティション分割された) データ層に対してレポート タスクを実行するには、データ層のデータベースを表す エラスティック データベース シャード マップ が必要です。Using elastic query to perform reporting tasks over a sharded, i.e., horizontally partitioned, data tier requires an elastic database shard map to represent the databases of the data tier . 一般に、このシナリオではシャード マップが 1 つだけ使用され、エラスティック クエリ機能 (ヘッド ノード) を備えた専用のデータベースがレポート クエリのエントリ ポイントとして機能します。Typically, only a single shard map is used in this scenario and a dedicated database with elastic query capabilities (head node) serves as the entry point for reporting queries. シャード マップにアクセスする必要があるのは、この専用のデータベースのみです。Only this dedicated database needs access to the shard map. 図 4 に、このトポロジと、エラスティック クエリ データベースおよびシャード マップを使用した構成を示します。Figure 4 illustrates this topology and its configuration with the elastic query database and shard map. データ層では、Azure SQL Database の任意のバージョンまたはエディションのデータベースを使用できます。The databases in the data tier can be of any Azure SQL Database version or edition. エラスティック データベース クライアント ライブラリの概要とシャード マップの作成方法の詳細については、「 シャード マップの管理」を参照してください。For more information about the elastic database client library and creating shard maps, see Shard map management.

図 4 行方向のパーティション分割: シャーディングされたデータ層に対してエラスティック クエリを使用するFigure 4 Horizontal partitioning - Using elastic query for reporting over sharded data tiers

行方向のパーティション分割: シャーディングされたデータ層に対してエラスティック クエリを使用する


エラスティック クエリ データベース (ヘッド ノード) は、別のデータベースにするか、シャード マップをホストする同じデータベースにすることができます。Elastic Query Database (head node) can be separate database, or it can be the same database that hosts the shard map. 選択した構成にかかわらず、データベースに期待されるログイン/クエリ要求数を処理できるレベルのサービスとパフォーマンスを確保します。Whatever configuration you choose, make sure that service and performance tier of that database is high enough to handle the expected amount of login/query requests.

次の手順では、(通常は) いくつかのリモート SQL Database 上にある一連のテーブルへのアクセスを必要とする行方向のパーティション分割シナリオ向けに、エラスティック データベース クエリを構成します。The following steps configure elastic database queries for horizontal partitioning scenarios that require access to a set of table that are located on (typically) several remote SQL databases:

これらの手順を実行すると、ローカル テーブルであるかのように、行方向にパーティション分割されたテーブル "mytable" にアクセスできます。Once you have performed these steps, you can access the horizontally partitioned table “mytable” as though it were a local table. Azure SQL Database により、テーブルが物理的に格納されているリモート データベースへの複数の並列接続が自動的に開かれます。さらに、リモート データベースで要求が処理され、その結果が返されます。Azure SQL Database automatically opens multiple parallel connections to the remote databases where the tables are physically stored, processes the requests on the remote databases, and returns the results. 行方向のパーティション分割シナリオに必要な手順の詳細については、行方向のパーティション分割のためのエラスティック クエリに関するページをご覧ください。More information on the steps required for the horizontal partitioning scenario can be found in elastic query for horizontal partitioning.

コーディングを開始するには、「クロスデータベース クエリの概要 (列方向のパーティション分割) (プレビュー)」をご覧ください。To begin coding, see Getting started with elastic query for horizontal partitioning (sharding).

T-SQL クエリの実行T-SQL querying

外部データ ソースと外部テーブルを定義すると、通常の SQL Server 接続文字列を使用して、外部テーブルが定義されているデータベースに接続できます。Once you have defined your external data sources and your external tables, you can use regular SQL Server connection strings to connect to the databases where you defined your external tables. 次に、その接続で外部テーブルに対して T-SQL ステートメントを実行できます。この場合、次に示す制限事項があります。You can then run T-SQL statements over your external tables on that connection with the limitations outlined below. T-SQL クエリの詳細とサンプルについては、行方向のパーティション分割列方向のパーティション分割に関するページをご覧ください。You can find more information and examples of T-SQL queries in the documentation topics for horizontal partitioning and vertical partitioning.

ツールの接続性Connectivity for tools

通常の SQL Server 接続文字列を使用して、アプリケーション、BI、またはデータ統合ツールを、外部テーブルを持つデータベースに接続できます。You can use regular SQL Server connection strings to connect your applications and BI or data integration tools to databases that have external tables. ご使用のツールのデータ ソースとして SQL Server がサポートされていることを確認してください。Make sure that SQL Server is supported as a data source for your tool. 接続されたら、ツールを使用して接続する他の SQL Server データベースと同様に、エラスティック クエリ データベースと外部テーブルを参照します。Once connected, refer to the elastic query database and the external tables in that database just like you would do with any other SQL Server database that you connect to with your tool.


Azure Active Directory とエラスティック クエリを使用した認証は、現時点ではサポートされていません。Authentication using Azure Active Directory with elastic queries is not currently supported.


エラスティック クエリは、Azure SQL Database データベースのコストに含まれます。Elastic query is included into the cost of Azure SQL Database databases. リモート データベースがエラスティック クエリ エンドポイントとは異なるデータ センターに配置されるトポロジはサポートされますが、リモート データベースからのデータ送信は、通常の Azure 料金で課金されます。Note that topologies where your remote databases are in a different data center than the elastic query endpoint are supported, but data egress from remote databases are charged regular Azure rates.

プレビューの制限事項Preview limitations

  • Standard パフォーマンス レベルでは、初回のエラスティック クエリの実行に数分かかる場合があります。Running your first elastic query can take up to a few minutes on the Standard performance tier. これは、エラスティック クエリ機能の読み込みに要する時間です。パフォーマンス レベルが上位になるほど、読み込みのパフォーマンスが高くなります。This time is necessary to load the elastic query functionality; loading performance improves with higher performance tiers.
  • SSMS または SSDT の外部データ ソースまたは外部テーブルからのスクリプト処理はまだサポートされていません。Scripting of external data sources or external tables from SSMS or SSDT is not yet supported.
  • SQL DB の Import/Export では、外部データ ソースと外部テーブルはまだサポートされていません。Import/Export for SQL DB does not yet support external data sources and external tables. Import/Export を使用する必要がある場合は、エクスポートの前にこれらのオブジェクトを削除し、インポート後にこれらのオブジェクトを再作成します。If you need to use Import/Export, drop these objects before exporting and then re-create them after importing.
  • 現在、エラスティック クエリでは、外部テーブルへの読み取り専用アクセスだけがサポートされています。Elastic query currently only supports read-only access to external tables. ただし、外部テーブルが定義されているデータベースでは、完全な T-SQL 機能を使用できます。You can, however, use full T-SQL functionality on the database where the external table is defined. これは、SELECT <column_list> INTO <local_table> を使用して一時的な結果を保持する場合や、外部テーブルを参照するエラスティック クエリ データベースでストアド プロシージャを定義する場合などに便利です。This can be useful to, e.g., persist temporary results using, e.g., SELECT <column_list> INTO <local_table>, or to define stored procedures on the elastic query database which refer to external tables.
  • 外部テーブル定義では、nvarchar(max) 以外の LOB 型はサポートされていません。Except for nvarchar(max), LOB types are not supported in external table definitions. この制限を回避するために、リモート データベースで LOB 型を nvarchar(max) にキャストするビューを作成し、ベース テーブルではなくそのビューで外部テーブルを定義し、クエリを使ってこれを元の LOB 型にキャストするという方法を利用できます。As a workaround, you can create a view on the remote database that casts the LOB type into nvarchar(max), define your external table over the view instead of the base table and then cast it back into the original LOB type in your queries.
  • 外部テーブルに対する列の統計情報は、現在サポートされていません。Column statistics over external tables are currently not supported. テーブルの統計情報はサポートされていますが、手動で作成する必要があります。Tables statistics are supported, but need to be created manually.


以下に示す Livefyre、MSDN フォーラム、または Stackoverflow で、エラスティック クエリに関するノウハウを共有してください。Please share feedback on your experience with elastic queries with us on Livefyre below, the MSDN forums, or on Stackoverflow. サービスに関して何でもご意見とご感想をお寄せください (障害、機能差、悪口など)。We are interested in all kinds of feedback about the service (defects, rough edges, feature gaps).

次のステップNext steps