Azure Cosmos DB を使ってみよう

Microsoft Japan Data Platform Tech Sales Team

森本 信次

Cosmos DB は過去の Blog “Cosmos DB ことはじめ” でもご紹介しましたが、Microsoft Azure が提供する No SQL データベースサービスです。複数のデータモデルを利用することができ、簡単な操作でリージョン間でのデータレプリケーションやスケールの変更を行うことができます。Cosmos DBは複数のデータモデルを利用できますが、今回はその中で Document DBを使い、実際にサンプルデータを Cosmos DB にインポートして SQL クエリを実行するまでの流れをご紹介します。

 

Cosmos DB を使用するにあたって、まずは前回のおさらいとして、Azure Cosmos DB のリソースモデルについて触れておきたいと思います。Azure Cosmos DB は階層型リソースモデルを採用しており、下図のように、データベース、コレクションは階層構造になっており、アカウントに従属しています。

Cosmos DB のリソースモデル
CosmosDB Resource Model

それでは早速 Step 1~3 という流れで順番に進めて Cosmos DB を使ってみましょう。

Step 1.  Azure Cosmos DB アカウントの作成とコレクションの追加
・Azure Portal から Azure Cosmos DB  アカウントをデータモデルをドキュメント (SQL) として作成します。

CosmosDB_CreateAccount
・コレクション “Airports” をパーティションキーを “/Country” として追加します。
パーティション キーは、Cosmos DB 内部で行われるパーティション分割に使用されます。
Cosmos DB は、データをパーティション毎に分割し、ストレージに格納します。
パーティション キーは、データの論理パーティションとして機能し、データを分散配置する際の境界として使用されます。
CosmosDB_CreateCollection
Step 2 のデータのインポート時に指定する ”プライマリ接続文字列”を確認しておきます。 CosmosDB-URL-PrimaryKey

Step 2. データ移行ツールによるサンプルデータのインポート ・オープンデータとして公開されている世界の空港に関するデータをここからダウンロードします。データの各列の詳細な説明は こちら をご覧ください。
・次に データ移行ツール “DocumentDB Data Migration Tool“ をダウウンロードしてクライアント環境にインストールします。このツールのソースコードは GitHub の こちらのリポジトリ から、コンパイル済みバージョンは Microsoft ダウンロードセンターから入手できます。このツールの使い方は こちら をご覧ください。
・”DocumentDB Data Migration Tool” を実行して CSV 形式のサンプルデータを JSON 形式のドキュメントとしてCosmos DB にインポートします。データソースとしては  CSV ファイル以外にも JSON ファイル, Microsoft SQL Server, MongoDB, Amazon DynamoDB, Azure Cosmos DB などが選択できます。Step 1 で確認しておいた “プライマリ接続文字列” を指定して、Cosmos DBへ接続します。
Connection String の フォーマットは AccountEndpoint=<url>;AccountKey=<key>;Database=<db> です。
CosmosDB-Tool-Target
インポートしたドキュメントを Azure Portal – Cosmos DB の  “データエクスプローラ” から確認します。
CosmosDB-AfterDocImport

Step 3. SQL クエリを実行して結果を確認
・データエクスプローラからSQLクエリを実行してみます、消費された RU (Requests Unit : 要求ユニット) も確認することができます。
・例として、次のような 標高が 1,000 フィート (約 300m) 以上の日本の空港を検索するクエリを実行します。
 SELECT c.AirortID, c.Name, c.Altitude FROM c WHERE c.Country = 'Japan' and c.Altitude > 1000 CosmosDB_SQLQueryResult

Cosmos DB は、SQL を利用した JSON ドキュメントのリレーショナル クエリ、階層クエリ、空間クエリにサポートしています。スキーマやセカンダリ インデックスを指定する必要がありません。 標準 ANSI-SQL のキーワードと演算子に加え、Cosmos DB は JavaScript のユーザー定義関数 (UDF)、JavaScript 演算子、さまざまな組み込み関数に対応しています。SQLクエリの構文については こちら のチートシートをご覧ください。

 

最後に いかがだったでしょうか? 今回は データモデルとして Document DB を選択し、移行ツールを使いサンプルデータをインポート、SQL クエリを実行して結果を確認しました、次の Cosmos DB に関する Blog では、自動生成されるサンプル Web アプリを使用して、Cosmos DB にアクセスする手順などをご紹介する予定です。