Azure Synapse Link for Azure Cosmos DB を構成して使用する

適用対象: NoSQL MongoDB Gremlin

Azure Synapse Link for Azure Cosmos DB は、クラウド ネイティブのハイブリッド トランザクションと分析処理 (HTAP) の機能です。これを使用すると、Azure Cosmos DB のオペレーショナル データに対してリアルタイムに近い分析を実行できます。 Synapse Link によって、Azure Cosmos DB と Azure Synapse Analytics の間の緊密でシームレスな統合が実現します。

Azure Synapse Link は、Azure Cosmos DB SQL API または Mongo DB アカウント用の Azure Cosmos DB API で使用できます。 Gremlin API ではプレビュー段階であり、これには、CLI コマンドを使用したアクティブ化が含まれています。 Azure Cosmos DB の Azure Synapse Link を使用して分析クエリを実行するには、次の手順に従います。

また、Azure Cosmos DB の Azure Synapse Link を構成する方法に関するトレーニング モジュールも参考になります。

Synapse Link を使用するための最初の手順は、Azure Cosmos DB データベース アカウントに対して Synapse Link を有効化することです。

Note

Azure Synapse Link でカスタマー マネージド キーを使用する場合は、ご自身のアカウント上で Synapse Link を有効にする前に、お使いの Azure Key Vault アクセス ポリシー内でご自身のアカウントのマネージド ID を構成する必要があります。 詳細については、Azure Cosmos DB アカウントのマネージド ID を使用して、カスタマー マネージド キーを構成する方法に関する記事をご覧ください。

Note

NoSQL 用 API アカウントに対して完全に忠実なスキーマを使用する必要がある場合は、Azure portal を使用して Synapse Link を有効にすることはできません。 このオプションは、ご自身のアカウント内で Synapse Link が有効にされた後は変更できません。これを設定するには、Azure CLI または PowerShell を使用する必要があります。 詳細については、分析ストアのスキーマ表現に関するドキュメントをご確認ください。

Note

アカウント レベルで Synapse Link を有効にするには、共同作成者ロールが必要です。 また、コンテナーまたはコレクションで Synapse Link を有効にするには、少なくともオペレーター ロールが必要です。

Azure portal

  1. Azure portal にサインインします。

  2. 新しい Azure アカウントを作成するか、既存の Azure Cosmos DB アカウントを選択します。

  3. Azure Cosmos DB アカウントに移動し、左ペインの [統合] の下にある [Azure Synapse Link] を開きます。

  4. [有効化] を選択します。 処理が完了するまでに 1 ~ 5 分かかることがあります。

    Screenshot showing how to enable Synapse Link feature.

  5. これで、ご利用のアカウントで Synapse Link を使用できるようになりました。 次に、分析ストアが有効なコンテナーを作成して、トランザクション ストアから分析ストアへのオペレーショナル データのレプリケートを自動的に開始する方法について確認します。

Note

Synapse Link を有効にしても、分析ストアは自動的に有効になりません。 Cosmos DB アカウントで Synapse Link を有効にしたら、コンテナーで分析ストアを有効にして Synapse Link の使用を開始します。

注意

左側のナビゲーション メニューの [統合] セクションで、[Power BI] および [Synapse Link] ウィンドウを使用して、Synapse Link をアカウントに対して有効にすることもできます。

コマンド ライン ツール

Azure CLI または PowerShell を使用して、Azure Cosmos DB API for NoSQL または Azure Cosmos DB API for MongoDB アカウントで Synapse Link を有効にします。

Azure CLI

作成または更新の操作で --enable-analytical-storage true を使用します。 また、表現スキーマの種類も選択する必要があります。 NoSQL 用 API アカウントでは、--analytical-storage-schema-typeFullFidelity または WellDefined の値で使用できます。 MongoDB 用 API アカウントの場合は、常に --analytical-storage-schema-type FullFidelity を使用します。

Gremlin API の Synapse Link はプレビュー段階です。 Azure CLI を使用して、新規または既存のグラフ内で Synapse Link を有効にすることができます。 Gremlin API アカウントに対して Synapse Link を有効にするには、次の CLI コマンドを使用します。

az cosmosdb create --capabilities EnableGremlin --name MyCosmosDBGremlinDatabaseAccount --resource-group MyResourceGroup --enable-analytical-storage true

既存の Gremlin API アカウントの場合は、createupdate に置き換えてください。

PowerShell

作成または更新の操作で EnableAnalyticalStorage true を使用します。 また、表現スキーマの種類も選択する必要があります。 NoSQL 用 API アカウントでは、--analytical-storage-schema-typeFullFidelity または WellDefined の値で使用できます。 MongoDB 用 API アカウントの場合は、常に -AnalyticalStorageSchemaType FullFidelity を使用します。

Azure Resource Manager テンプレート

この Azure Resource Manager テンプレートでは、SQL API の Synapse Link が有効な Azure Cosmos DB アカウントを作成します。 このテンプレートでは、分析 TTL を有効にして構成されたコンテナーと、手動または自動スケールのスループットを使用するオプションで、1 つのリージョンにコア (SQL) API アカウントを作成します。 このテンプレートをデプロイするには、readme ページで [Azure に配置する] をクリックします。

コンテナーの Azure Synapse Link を有効にする

2 番目の手順は、コンテナーまたはコレクションに対して Synapse Link を有効にすることです。 これを行うには、analytical TTL プロパティを -1 (無期限のリテンション期間) に設定するか、正の整数 (分析ストアに保持する秒数) に設定します。 この設定は後で変更できます。 詳細については、分析 TTL でサポートされる値に関する記事を参照してください。

既存の SQL API コンテナーで Azure Synapse Link を有効にする場合は次の内容に注意してください。

  • 分析ストアの自動同期プロセスの同じパフォーマンス分離が初期同期に適用されるため、OLTP ワークロードでパフォーマンスへの影響はありません。
  • 分析ストアとのコンテナーの初期同期の合計時間は、データ ボリュームとドキュメントの複雑さによって異なります。 このプロセスには、数秒から数日かかる場合があります。 移行の進行状況を監視するには、Azure portal を使用してください。
  • コンテナーのスループットまたはデータベース アカウントは、初期同期時間の合計にも影響します。 この移行では RU/秒は使用されませんが、使用可能な RU/秒の合計はプロセスのパフォーマンスに影響します。 環境の使用可能な RU を一時的に増やして、プロセスを高速化できます。
  • Synapse Link が既存のコンテナーが有効になっている間、そのコンテナーの分析ストアにクエリを実行することはできません。 OLTP ワークロードは影響を受けないので、データの読み取りを通常の状態に維持できます。 初期同期の開始後に取り込まれたデータは、通常の分析ストアの自動同期プロセスによって分析ストアにマージされます。

Note

Azure CLI または PowerShell を使用して、既存の MongoDB API コレクションで Synapse Link を有効にできるようになりました。

Azure Portal

新しいコンテナー

  1. Azure portal または Azure Cosmos DB Explorer にサインインします。

  2. Azure Cosmos DB アカウントに移動して、 [データ エクスプローラー] タブを開きます。

  3. [新しいコンテナー] を選択し、データベースの名前、コンテナー、パーティション キー、スループットの詳細を入力します。 [分析ストア] オプションをオンにします。 分析ストアを有効にすると、analytical TTL プロパティが既定値の -1 (無限のリテンション期間) に設定されたコンテナーが作成されます。 この分析ストアでは、レコードのすべての履歴バージョンが保持され、後で変更することができます。

    Turn on analytical store for Azure Cosmos DB container

  4. このアカウントで以前に Synapse Link を有効にしていない場合は、分析ストアが有効なコンテナーを作成するための前提条件であるため、これを行うように求めるメッセージが表示されます。 プロンプトが表示されたら、 [Enable Synapse Link](Synapse Link を有効にする) を選択します。 処理が完了するまでに 1 ~ 5 分かかることがあります。

  5. [OK] を選択して、分析ストアが有効な Azure Cosmos DB コンテナーを作成します。

  6. コンテナーが作成されたら、Data Explorer の [ドキュメント] のすぐ下にある [設定] をクリックして分析ストアが有効になっていることを確認し、 [分析ストアの Time-to-Live] オプションがオンになっているかどうかを確認します。

既存のコンテナー

  1. Azure portal または Azure Cosmos DB Explorer にサインインします。

  2. Azure Cosmos DB アカウントに移動して、[Azure Synapse Link] タブを開きます。

  3. [コンテナーの Azure Synapse リンクを有効にする] セクションで、コンテナーを選択します。

    Screenshot showing how to turn on analytical store for an Azure Cosmos DB existing container.

  4. コンテナーを有効にした後、Data Explorer の [Documents](ドキュメント) のすぐ下にある [設定] をクリックして分析ストアが有効になっていることを確認し、[Analytical Store Time to Live](分析ストアの Time-to-Live) オプションがオンになっているかどうかを確認します。

注意

左側のナビゲーション メニューの [統合] セクションで、[Power BI] および [Synapse Link] ウィンドウを使用して、Synapse Link をアカウントに対して有効にすることもできます。

コマンド ライン ツール

Azure CLI

次のオプションでは、Azure CLI を使用して --analytical-storage-ttl プロパティを設定し、コンテナー内の Synapse Link を有効にします。

Gremlin API の Synapse Link はプレビュー段階です。 Azure CLI を使用して、新規または既存の Graph 内で Synapse Link を有効にすることができます。 Gremlin API グラフに対して Synapse Link を有効にするには、次の CLI コマンドを使用します。

az cosmosdb gremlin graph create --g MyResourceGroup --a MyCosmosDBGremlinDatabaseAccount --d MyGremlinDB --n MyGraph --analytical-storage-ttl –1

既存のグラフの場合は、createupdate に置き換えてください。

PowerShell

次のオプションでは、Azure CLI を使用して -AnalyticalStorageTtl プロパティを設定し、コンテナー内の Synapse Link を有効にします。

Azure Cosmos DB SDK - SQL API のみ

.NET SDK

次の .NET コードでは、AnalyticalStoreTimeToLiveInSeconds プロパティを設定して Synapse Link が有効なコンテナーを作成します。 既存のコンテナーを更新するには、Container.ReplaceContainerAsync メソッドを使用します。

// Create a container with a partition key, and analytical TTL configured to -1 (infinite retention)
ContainerProperties properties = new ContainerProperties()
{
    Id = "myContainerId",
    PartitionKeyPath = "/id",
    AnalyticalStoreTimeToLiveInSeconds = -1,
};
CosmosClient cosmosClient = new CosmosClient("myConnectionString");
await cosmosClient.GetDatabase("myDatabase").CreateContainerAsync(properties);

Java V4 SDK

次の Java コードでは、setAnalyticalStoreTimeToLiveInSeconds プロパティを設定して Synapse Link が有効なコンテナーを作成します。 既存のコンテナーを更新するには、container.replace クラスを使用します。

// Create a container with a partition key and  analytical TTL configured to  -1 (infinite retention) 
CosmosContainerProperties containerProperties = new CosmosContainerProperties("myContainer", "/myPartitionKey");

containerProperties.setAnalyticalStoreTimeToLiveInSeconds(-1);

container = database.createContainerIfNotExists(containerProperties, 400).block().getContainer();

Python V4 SDK

次の Python コードでは、analytical_storage_ttl プロパティを設定して Synapse Link が有効なコンテナーを作成します。 既存のコンテナーを更新するには、replace_container メソッドを使用します。

# Client
client = cosmos_client.CosmosClient(HOST,  KEY )

# Database client
try:
    db = client.create_database(DATABASE)

except exceptions.CosmosResourceExistsError:
    db = client.get_database_client(DATABASE)

# Creating the container with analytical store enabled
try:
    container = db.create_container(
        id=CONTAINER,
        partition_key=PartitionKey(path='/id', kind='Hash'),analytical_storage_ttl=-1
    )
    properties = container.read()
    print('Container with id \'{0}\' created'.format(container.id))
    print('Partition Key - \'{0}\''.format(properties['partitionKey']))

except exceptions.CosmosResourceExistsError:
    print('A container with already exists')

Synapse ワークスペースに接続する

Azure Synapse Link を使用して Azure Synapse Analytics Studio から Azure Cosmos DB データベースにアクセスする方法については、Azure Synapse Link に接続する方法に関する記事の手順を参照してください。

Azure Synapse Analytics を使用して分析ストアのクエリを実行する

Azure Synapse Analytics 用の Apache Spark を使用して分析ストアのクエリを実行する

Synapse Spark 3 を使用してクエリを実行する方法については、Spark 3 を使用して Azure Cosmos DB 分析ストアに対してクエリを実行する方法に関する記事の手順を参照してください。 この記事では、Synapse ジェスチャから分析ストアを操作する方法について、いくつかの例を紹介しています。 これらのジェスチャは、コンテナーを右クリックすると表示されます。 ジェスチャを使用すると、コードをすばやく生成し、ニーズに合わせて調整することができます。 また、1 回のクリックでデータを検出するのにも最適です。

Spark 2 統合の場合は、「Spark 2 を使用して分析ストアを Azure Cosmos DB クエリ」に記載されている手順を使用します。

Azure Synapse Analytics でサーバーレス SQL プールを使用して分析ストアにクエリを実行する

サーバーレス SQL プールを使用すると、Azure Synapse Link で有効になっている Azure Cosmos DB コンテナー内のデータに対してクエリと分析を行うことができます。 トランザクション ワークロードのパフォーマンスに影響を与えることなく、凖リアルタイムでデータを分析できます。 T-SQL インターフェイスを使用して分析ストアおよび統合された接続からさまざまな BI やアドホック クエリ ツールへのデータのクエリを実行するために、使い慣れた T-SQL 構文が用意されています。 詳細については、サーバーレス SQL プールを使用した分析ストアのクエリに関する記事を参照してください。

サーバーレス SQL プールを使用して Power BI のデータを分析して視覚化する

Azure Cosmos DB ポータルで統合された BI エクスペリエンスを使用して、わずか数回のクリックで Synapse Link を使用して BI ダッシュボードを構築できます。 詳細については、Synapse Link を使用して BI ダッシュボードを構築する方法に関する記事を参照してください。 この統合されたエクスペリエンスでは、Azure Cosmos DB コンテナーのために、Synapse サーバーレス SQL プールに単純な T-SQL ビューを作成します。 これらのビューに対して BI ダッシュボードを構築できます。これにより、データへの最新の変更が反映され、直接クエリを使用して、Azure Cosmos DB コンテナーにリアルタイムでクエリが実行されます。 トランザクション ワークロードへのパフォーマンスやコストの影響はなく、ETL パイプライン管理にも複雑さは伴いません。

コンテナー間の結合で高度な T-SQL ビューを使用する場合、またはインポート モードで Power BI ダッシュボードを構築する場合は、サーバーレス SQL プールを使用した Synapse Link での Azure Cosmos DB データの分析に関するページを参照してください。

ベスト プラクティスを使用してパフォーマンスを向上させる

カスタム パーティション分割

カスタム パーティション分割を使うと、分析クエリでフィルターとして一般的に使われるフィールドで分析ストア データをパーティション分割して、クエリ パフォーマンスを向上させることができます。 詳細については、カスタム パーティション分割の概要およびカスタム パーティション分割を構成する方法に関するページを参照してください。

SQL サーバーレス クエリには、こちらの必須のベスト プラクティスを使用してください。

Azure Synapse Link の使用を開始する場合、GitHub にサンプルが用意されています。 これらは、IoT および小売のシナリオでのエンド ツー エンドのソリューションを紹介しています。 また、Azure Cosmos DB for MongoDB に対応するサンプルは、MongoDB フォルダーの下にある同じリポジトリにあります。

次のステップ

詳細については、次のドキュメントを参照してください。