Azure Cosmos DB ODBC ドライバーを使用して BI およびデータ分析のツールに接続する

適用対象: NoSQL

この記事では、Azure Cosmos DB ODBC ドライバーをインストールして使用し、Azure Cosmos DB データの正規化されたテーブルとビューを作成する方法について説明します。 SQL クエリを使用して正規化されたデータにクエリを実行したり、データを Power BI やその他の BI および分析ソフトウェアにインポートしてレポートや視覚化を作成したりできます。

Azure Cosmos DB はスキーマレス データベースであり、厳格なスキーマの制約を受けないので、アプリケーションを迅速に開発し、データ モデルを反復することができます。 1 つの Azure Cosmos DB データベースに、さまざまな構造の JSON ドキュメントを格納できます。 このデータを分析またはレポートするには、スキーマに適合するようにデータをフラット化する必要がある場合があります。

ODBC ドライバーにより、Azure Cosmos DB のデータはデータ分析やレポート作成のニーズに適したテーブルとビューに正規化されます。 正規化されたスキーマを使用すると、ODBC 準拠のツールでデータにアクセスできます。 スキーマが基になるデータに影響を与えたり、それに従うように開発者に要求したりすることはありません。 ODBC ドライバーのおかげで、Azure Cosmos DB のデータベースはデータ アナリストや開発チームにとって有益なものになります。

正規化されたテーブルやビューに対して、クエリによるグループ化、挿入、更新、削除などを含む SQL 操作を実行できます。 ドライバーは ODBC 3.8 に準拠していて、ANSI SQL-92 構文をサポートしています。

重要

Azure Synapse Link for Azure Cosmos DB を使用して、データのテーブルとビューを作成することを検討してください。 Synapse Link には、ODBC ドライバーよりも大規模なデータセットに対して明確なパフォーマンス上の利点があります。 正規化された Azure Cosmos DB データを、SQL Server Integration Services (SSIS)、QlikSense、Tableau、その他の分析ソフトウェア、BI、データ統合ツールなどの他のソフトウェア ソリューションに接続することもできます。 これらのソリューションを使用すると、Azure Cosmos DB データを用いた視覚化の分析、移動、変換、作成が実施できます。

重要

  • ODBC ドライバーによる Azure Cosmos DB への接続は、現在は Azure Cosmos DB for NoSQL でのみサポートされています。
  • 現在の ODBC ドライバーは、集計プッシュダウンをサポートしていないため、いくつかの分析ツールに既知の問題があります。 新しいバージョンがリリースされるまでは、次のいずれかの代替手段を利用できます。
    • Azure Synapse Link は、Azure Cosmos DB 用の推奨分析ソリューションです。 Azure Synapse Link と Azure Synapse SQL のサーバーレス プールを使うと、任意の BI ツールを用いて、Azure Cosmos DB SQL または MongoDB 用 API データからほぼリアルタイムで分析情報を抽出できます。
    • Power BI では、Power BI 用の Azure Cosmos DB コネクタを使用できます。
    • Qlik Sense については、Qlik Sense の Azure Cosmos DB への接続に関する記事を参照してください。

ODBC ドライバーをインストールしてデータベースに接続する

  1. お使いの環境用のドライバーをダウンロードします。

    Installer サポートされるオペレーティング システム
    Microsoft Azure Cosmos DB ODBC 64-bit.msi (64 ビット Windows 用) Windows 8.1 以降、Windows 8、Windows 7 の 64 ビット バージョン。 Windows Server 2012 R2、Windows Server 2012、Windows Server 2008 R2 の 64 ビット バージョン。
    Microsoft Azure Cosmos DB ODBC 32x64-bit.msi (64 ビット上の 32 ビット Windows 用) Windows 8.1 以降、Windows 8、Windows 7、Windows XP、Windows Vista の 64 ビット バージョン。 Windows Server 2012 R2、Windows Server 2012、Windows Server 2008 R2、Windows Server 2003 の 64 ビット バージョン。
    Microsoft Azure Cosmos DB ODBC 32-bit.msi (32 ビット Windows 用) Windows 8.1 以降、Windows 8、Windows 7、Windows XP、Windows Vista の 32 ビット バージョン。
  2. .msi ファイルをローカルで実行すると、Microsoft Azure Cosmos DB ODBC ドライバーのインストール ウィザードが開始されます。

  3. 既定の入力を使用してインストール ウィザードを完了します。

  4. ドライバーがインストールされたら、Windows 検索ボックスに「ODBC データ ソース」と入力し、ODBC データ ソース アドミニストレーターを開きます。

  5. [Microsoft Azure DocumentDB ODBC Driver](Microsoft Azure DocumentDB ODBC ドライバー)[ドライバー] タブに表示されていることを確認します。

    [ODBC データ ソース管理者] ウィンドウのスクリーンショット。

  6. [ユーザー DSN] タブで、[追加] を選択して新しいデータ ソース名 (DSN) を作成します。 システム DSN を作成することもできます。

  7. [新しいデータ ソースの作成] ウィンドウで、[Microsoft Azure DocumentDB ODBC Driver](Microsoft Azure DocumentDB ODBC ドライバー) を選択してから [完了] を選択します。

  8. [DocumentDB ODBC Driver DSN Setup](DocumentDB ODBC ドライバーの DSN セットアップ) ウィンドウに、次の内容を入力します。

    ドメイン ネーム サーバー (DNS) のセットアップ ウィンドウのスクリーンショット。

    • [データ ソース名]: ODBC DSN のフレンドリ名。 この名前は、この Azure Cosmos DB アカウント固有のものです。
    • 説明:データ ソースの簡単な説明。
    • [ホスト]: Azure Cosmos DB アカウントの URI。 この情報は、Azure portal の Azure Cosmos DB アカウントの [キー] ページから取得できます。
    • [アクセス キー]: Azure Portal の Azure Cosmos DB [キー] ページにあるプライマリまたはセカンダリの読み取り/書き込みまたは読み取り専用のキー。 DSN を読み取り専用のデータ処理とレポート作成に使用する場合は、読み取り専用キーを使用することをお勧めします。

    認証エラーを回避するには、コピー ボタンを使用して、Azure portal から URI とキーをコピーします。

    [Azure Cosmos DB キー] ページのスクリーンショット。

    • [Encrypt Access Key for](アクセス キーの暗号化): このコンピューターのユーザーに基づいて最適な選択を行います。
  9. [テスト] を選択して、Azure Cosmos DB アカウントに接続できることを確認します。

  10. [詳細オプション] を選択して、次の値を設定します。

    • REST API バージョン: 操作に使用する REST API バージョンを選択します。 既定値は 2015-12-16 です。

      REST API バージョンを必要とする大きなパーティション キーを持つコンテナーがある場合は、「2018-12-31」と入力し、このプロシージャの最後にある手順に従います

    • Query Consistency (クエリの一貫性) :操作の一貫性レベルを選択します。 既定では [セッション] になっています。

    • [再試行回数]: サービス レートの制限により最初の要求が完了しない場合、操作を再試行した回数を入力します。

    • [スキーマ ファイル]: スキーマ ファイルを選択していない場合、ドライバーは各コンテナーのデータの最初のページをスキャンして、コンテナー マッピングと呼ばれるスキーマを各セッションに対して決定します。 このプロセスにより、DSN を使用するアプリケーションの起動時間が長くなることがあります。 スキーマ ファイルを DSN に関連付けることをお勧めします。

      • スキーマ ファイルが既にある場合は、[参照] を選択してファイルに移動し、[保存][OK] の順で選択します。

      • スキーマ ファイルがまだない場合は、[OK] を選択し、次のセクションの手順に従ってスキーマ定義を作成します。 スキーマを作成したら、この [詳細オプション] ウィンドウに戻り、スキーマ ファイルを追加します。

[OK] を選択して [DocumentDB ODBC Driver DSN Setup](DocumentDB ODBC ドライバーの DSN セットアップ) ウィンドウを完了して閉じると、[ODBC データ ソース アドミニストレーター] ウィンドウの [ユーザー DSN] タブに新しいユーザー DSN が表示されます。

[ユーザー DSN] タブの新しいユーザー DSN を示すスクリーンショット。

Windows レジストリを編集して REST API バージョン 2018-12-31 をサポートする

REST API バージョン 2018-12-31 が必要な大きなパーティション キーを持つコンテナーがある場合は、こちらの手順に従って、このバージョンをサポートするように Windows レジストリを更新します。

  1. Windows の [スタート] メニューで「regedit」と入力し、[レジストリ エディター] を検索して開きます。

  2. [レジストリ エディター] で、[Computer\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI] パスに移動します。

  3. "Contoso Account ODBC DSN" など、DSN と同じ名前の新しいサブキーを作成します。

  4. 新しい [Contoso Account ODBC DSN] サブキーに移動し、右クリックして新しい文字列値を追加します。

    • 値の名前: IgnoreSessionToken

    • 値のデータ: 1

    Windows レジストリ エディターの設定を示すスクリーンショット。

スキーマ定義を作成する

スキーマの作成に使用できるサンプリング メソッドには、"コンテナー マッピング" と "テーブル区切り記号マッピング" の 2 種類があります。 サンプリング セッションではどちらのサンプリング メソッドも利用できますが、各コンテナーが使用できるのはいずれかのサンプリング メソッドのみです。 使用するメソッドは、データの特性によって異なります。

  • コンテナー マッピングは、コンテナー ページのデータを取得してデータ構造を判断し、コンテナーを ODBC 側のテーブルに入れ替えます。 このサンプリング方法は、コンテナーのデータの種類が同じ場合は効率的で迅速です。

  • テーブル区切り記号マッピングにより、異種データに対してより堅牢なサンプリングが実施できます。 このメソッドにより、サンプリングのスコープを一連の属性と対応する値に設定されます。

    たとえば、ドキュメントにのプロパティが含まれる場合は、サンプリングのスコープをこのプロパティの値に設定できます。 サンプリングの最終的な結果は、指定したの各値が記載されたテーブルのセットになります。 型が車の場合はのテーブルが生成され、型が飛行機の場合は飛行機のテーブルが生成されます。

スキーマを定義するには、こちらの手順に従います。 テーブル区切り記号マッピング メソッドでは、スキーマの属性と値を定義するための追加の手順を実行します。

  1. [ODBC データ ソース アドミニストレーター] ウィンドウの [ユーザー DSN] タブで、ご自身の Azure Cosmos DB ユーザー DSN 名を選択し、[構成] を選択します。

  2. [DocumentDB ODBC Driver DSN Setup](DocumentDB ODBC ドライバーの DSN セットアップ) ウィンドウで [スキーマ エディター] を選択します。

    [DSN 設定] ウィンドウの [スキーマ エディター] ボタンを示すスクリーンショット。

  3. [スキーマ エディター] ウィンドウで、[新規作成] を選択します。

  4. [スキーマを生成する] ウィンドウに、Azure Cosmos DB アカウントのすべてのコレクションが表示されます。 サンプリングするコンテナーの横にあるチェック ボックスをオンにします。

  5. コンテナー マッピング メソッドを使用するには、[サンプル] を選択します。

    または、"テーブル区切り記号" マッピングを使用するには、次の手順に従って、サンプルをスコープするための属性と値を定義します。

    1. DSN の [マッピング定義] 列で [編集] を選択します。

    2. [マッピング定義] ウィンドウの [マッピング メソッド] で、[Table Delimiters](テーブル区切り記号) を選択します。

    3. [属性] ボックスに、サンプリングのスコープを設定するドキュメント内の区切り記号プロパティの名前 (たとえば、"都市") を入力します。 Enter キーを押します。

    4. サンプリングのスコープを入力した属性の特定の値に設定する場合は、属性を選択してから、[値] ボックスに値 (たとえば、"シアトル") を入力して Enter キーを押します。 属性に複数の値を追加できます。 値を入力するときは、適切な属性が選択されていることを確認してください。

    5. 属性と値の入力が完了したら、[OK] を選択します。

    6. [スキーマの生成] ウィンドウで、[サンプル] を選択します。

  6. [デザイン ビュー] タブで、スキーマを絞り込みます。 [デザイン ビュー] では、データベース、スキーマ、テーブルが表示されます。 [テーブル ビュー] には、列名 (SQL 名ソース名など) と関連付けられている一連のプロパティが表示されます。

    列ごとに、該当する場合は、SQL 名SQL 型SQL の長さスケール精度Null 許容を変更できます。

    クエリ結果から列を除外したい場合は、 [列の非表示]true に設定できます。 [列の非表示] が true でマークされた列は、まだスキーマの一部ではあるものの、選択やプロジェクションでは返されません。 たとえば、Azure Cosmos DB のシステムで必要な _ で始まるすべてのプロパティを非表示にすることができます。 ID 列は、正規化されたスキーマのプライマリ キーであるため、非表示にできない唯一のフィールドです。

  7. スキーマの定義が終了したら、[ファイル]>[保存] を選択し、保存するディレクトリに移動して、[保存] を選択します。

  8. DSN でこのスキーマを使用するには、[DocumentDB ODBC Driver DSN Setup](DocumentDB ODBC ドライバーの DSN セットアップ) ウィンドウで [詳細オプション] を選択します。 [スキーマ ファイル] ボックスを選択し、保存したスキーマに移動し、[OK] を選択してから、もう一度 [OK] を選択します。 スキーマ ファイルを保存すると、DNS 接続のスコープが、スキーマ定義のデータと構造に変更されます。

ビューの作成

必要に応じて、サンプリング プロセスの一環として [スキーマ エディター] でビューを定義および作成できます。 これらのビューは、SQL ビューと同じです。 ビューは読み取り専用で、スコープは定義された Azure Cosmos DB SQL クエリの選択とプロジェクションに設定されます。

こちらの手順に従ってお使いのデータのビューを作成します。

  1. [スキーマ エディター] ウィンドウの [サンプル ビュー] タブで、サンプリングするコンテナーを選択し、[ビュー定義] 列で [追加] を選択します。

    ドライバー内でビューを作成するスクリーンショット。

  2. [ビュー定義] ウィンドウで、[新規] を選択します。 ビューの名前 (たとえば、EmployeesfromSeattleView) を入力し、[OK] を選択します。

  3. [ビューの編集] ウィンドウで、次のような Azure Cosmos DB クエリを入力します。

    SELECT c.City, c.EmployeeName, c.Level, c.Age, c.Manager FROM c WHERE c.City = "Seattle"

  4. [OK] を選択します。

    ビューを作成する際にクエリを追加するスクリーンショット。

ビューは好きな数だけ作成できます。 ビューの定義が完了したら、[サンプル] を選択してデータをサンプリングします。

重要

ビュー定義のクエリ テキストには改行を含めないようにしてください。 そうでない場合は、ビューのプレビュー時に一般的なエラーが発生します。

SQL Server Management Studio を使用してクエリを実行する

Azure Cosmos DB ODBC ドライバーのユーザー DSN を設定したら、リンク サーバーの接続を設定することによって、SQL Server Management Studio (SSMS) から Azure Cosmos DB にクエリを実行できます。

  1. SQL Server Management Studio をインストールし、サーバーに接続します。

  2. SSMS クエリ エディターで、次のコマンドを実行することで、データ ソースのリンク サーバー オブジェクトを作成します。 DEMOCOSMOS をリンク サーバーの名前に、SDS Name をデータ ソース名に置き換えます。

    USE [master]
    GO
    
    EXEC master.dbo.sp_addlinkedserver @server = N'DEMOCOSMOS', @srvproduct=N'', @provider=N'MSDASQL', @datasrc=N'SDS Name'
    
    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'DEMOCOSMOS', @useself=N'False', @locallogin=NULL, @rmtuser=NULL, @rmtpassword=NULL
    
    GO
    

新しいリンク サーバー名を表示するには、リンク サーバーの一覧を更新します。

SSMS での、リンク サーバーを示すスクリーンショット。

リンクされたデータベースにクエリを実行するには、SSMS クエリを入力します。 この例では、クエリで customers という名前のコンテナー内のテーブルから選択します。

SELECT * FROM OPENQUERY(DEMOCOSMOS, 'SELECT *  FROM [customers].[customers]')

クエリを実行します。 結果は次の出力のようになります。

attachments/  1507476156    521 Bassett Avenue, Wikieup, Missouri, 5422   "2602bc56-0000-0000-0000-59da42bc0000"   2015-02-06T05:32:32 +05:00 f1ca3044f17149f3bc61f7b9c78a26df
attachments/  1507476156    167 Nassau Street, Tuskahoma, Illinois, 5998   "2602bd56-0000-0000-0000-59da42bc0000"   2015-06-16T08:54:17 +04:00 f75f949ea8de466a9ef2bdb7ce065ac8
attachments/  1507476156    885 Strong Place, Cassel, Montana, 2069       "2602be56-0000-0000-0000-59da42bc0000"   2015-03-20T07:21:47 +04:00 ef0365fb40c04bb6a3ffc4bc77c905fd
attachments/  1507476156    515 Barwell Terrace, Defiance, Tennessee, 6439     "2602c056-0000-0000-0000-59da42bc0000"   2014-10-16T06:49:04 +04:00      e913fe543490432f871bc42019663518
attachments/  1507476156    570 Ruby Street, Spokane, Idaho, 9025       "2602c156-0000-0000-0000-59da42bc0000"   2014-10-30T05:49:33 +04:00 e53072057d314bc9b36c89a8350048f3

Power BI Desktop でデータを表示する

DSN を使用して、ODBC 準拠のツールで Azure Cosmos DB に接続できます。 このプロシージャでは、Power BI Desktop に接続して Power BI 視覚化を作成する方法について説明します。

  1. Power BI Desktop で、 [データを取得] を選択します。

    Power BI Desktop での、[データの取得] を示すスクリーンショット。

  2. [データを取得] ウィンドウで、[その他]>[ODBC] を選択し、[接続] を選択します。

    Power BI の [データの取得] での ODBC データ ソースの選択を示すスクリーンショット。

  3. [ODBC から] ウィンドウで作成した DSN を選択し、[OK] を選択します。

    Power BI の [データの取得] での DSN の選択を示すスクリーンショット。

  4. [Access a data source using an ODBC driver](ODBC ドライバーを使用してデータ ソースにアクセスする) ウィンドウで、[既定またはカスタム] を選択し、[接続] を選択します。

  5. [ナビゲーター] ウィンドウの左側ペインでデータベースとスキーマを展開し、テーブルを選択します。 結果ペインには作成したスキーマを使用するデータが含まれています。

    Power BI の [データの取得] でテーブルを選択しているスクリーンショット。

  6. Power BI デスクトップでデータを視覚化するには、テーブル名の横にあるチェック ボックスをオンにし、[読み込み] を選択します。

  7. Power BI Desktop で、画面左端の [データ] タブを選択し、データがインポートされたことを確認します。

  8. 画面左端の [レポート] タブを選択し、リボンから [新しいビジュアル] を選択して、ビジュアルをカスタマイズします。

トラブルシューティング

  • 問題: 接続しようとすると、次のエラーが発生します。

    [HY000]: [Microsoft][Azure Cosmos DB] (401) HTTP 401 Authentication Error: {"code":"Unauthorized","message":"The input authorization token can't serve the request. Please check that the expected payload is built as per the protocol, and check the key being used. Server used the following payload to sign: 'get\ndbs\n\nfri, 20 jan 2017 03:43:55 gmt\n\n'\r\nActivityId: 9acb3c0d-cb31-4b78-ac0a-413c8d33e373"}
    

    ソリューション: Azure portal からコピーした [ホスト][アクセス キー] の値が正しいことを確認し、再試行します。

  • 問題: Azure Cosmos DB のリンク サーバーを作成しようとすると、SSMS で次のエラーが発生します。

    Msg 7312, Level 16, State 1, Line 44
    
    Invalid use of schema or catalog for OLE DB provider "MSDASQL" for linked server "DEMOCOSMOS". A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog or schema.
    

    ソリューション策: Azure Cosmos DB のリンク サーバーでは、4 つの部分で構成される名前はサポートされません。

次のステップ