次の方法で共有


方法: Azure Cosmos DB から Microsoft Fabric ミラーデータベース内の入れ子になったデータにクエリを実行します (プレビュー)

Microsoft Fabric のミラーデータベースを使用して、Azure Cosmos DB for NoSQL からソース化された入れ子になった JSON データに対してクエリを実行します。

重要

Azure Cosmos DB のサポートは現在プレビュー段階です。 プレビュー期間中は、運用環境のワークロードはサポートされていません。 現在、Azure Cosmos DB for NoSQL アカウントのみでサポートされています。

前提条件

ヒント

パブリック プレビュー期間中は、バックアップから迅速に復旧できる既存の Azure Cosmos DB データのテスト コピーまたは開発コピーを使用することをお勧めします。

ソース データベース内に入れ子になったデータを作成する

入れ子になった JSON データのさまざまなレベルを含む JSON 項目を Azure Cosmos DB for NoSQL アカウント内に作成します。

  1. Azure portal で Azure Cosmos DB アカウントに移動します。

  2. リソース メニューで [データ エクスプローラー] を選択します。

  3. [+ 新しいコンテナー] を使用して、新しいコンテナーを作成します。 このガイドでは、コンテナー TestC に名前を付けます。 対応するデータベース名は任意です。

  4. [+ 新しい項目] オプションを複数回使用して、これら 5 つの JSON 項目を作成して保存します。

    {
      "id": "123-abc-xyz",
      "name": "A 13",
      "country": "USA",
      "items": [
        {
          "purchased": "11/23/2022",
          "order_id": "3432-2333-2234-3434",
          "item_description": "item1"
        },
        {
          "purchased": "01/20/2023",
          "order_id": "3431-3454-1231-8080",
          "item_description": "item2"
        },
        {
          "purchased": "02/20/2023",
          "order_id": "2322-2435-4354-2324",
          "item_description": "item3"
        }
      ]
    }
    
    {
      "id": "343-abc-def",
      "name": "B 22",
      "country": "USA",
      "items": [
        {
          "purchased": "01/20/2023",
          "order_id": "2431-2322-1545-2322",
          "item_description": "book1"
        },
        {
          "purchased": "01/21/2023",
          "order_id": "3498-3433-2322-2320",
          "item_description": "book2"
        },
        {
          "purchased": "01/24/2023",
          "order_id": "9794-8858-7578-9899",
          "item_description": "book3"
        }
      ]
    }
    
    {
      "id": "232-abc-x43",
      "name": "C 13",
      "country": "USA",
      "items": [
        {
          "purchased": "04/03/2023",
          "order_id": "9982-2322-4545-3546",
          "item_description": "clothing1"
        },
        {
          "purchased": "05/20/2023",
          "order_id": "7989-9989-8688-3446",
          "item_description": "clothing2"
        },
        {
          "purchased": "05/27/2023",
          "order_id": "9898-2322-1134-2322",
          "item_description": "clothing3"
        }
      ]
    }
    
    {
      "id": "677-abc-yuu",
      "name": "D 78",
      "country": "USA"
    }
    
    {
      "id": "979-abc-dfd",
      "name": "E 45",
      "country": "USA"
    }
    

ミラーリングと前提条件をセットアップする

Azure Cosmos DB for NoSQL データベースのミラーリングを構成します。 ミラーリングの構成方法がわからない場合は、「ミラーデータベースの構成に関するチュートリアル」を参照してください。

  1. Fabric ポータルに移動します。

  2. Azure Cosmos DB アカウントの資格情報を使用して、新しい接続とミラーデータベースを作成します。

  3. レプリケーションがデータの初期スナップショットを完了するまで待ちます。

入れ子になった基本的なデータに対してクエリを実行する

次に、SQL 分析エンドポイントを使用して、単純な入れ子になった JSON データを処理できるクエリを作成します。

  1. Fabric ポータルで [ミラーリングされたデータベース] に移動します。

  2. ミラー化された Azure Cosmos DB から SQL 分析エンドポイントに切り替えます。

    Fabric ポータルでアイテムを切り替えるセレクターのスクリーンショット。

  3. テスト テーブルのコンテキスト メニューを開き、[新しい SQL クエリ] を選択します。

  4. 次のクエリを実行して、OPENJSON を持つ items 列を展開します。 このクエリは、項目配列がない可能性がある追加の項目を含めるために OUTER APPLY を使用します。

    SELECT 
        t.name, 
        t.id, 
        t.country, 
        P.purchased, 
        P.order_id, 
        P.item_description 
    FROM OrdersDB_TestC AS t
    OUTER APPLY OPENJSON(t.items) WITH
    (
        purchased datetime '$.purchased',
        order_id varchar(100) '$.order_id',
        item_description varchar(200) '$.item_description'
    ) as P
    

    ヒント

    OPENJSON でデータ型を選択するときに、文字列型に varchar(max) を使用すると、クエリのパフォーマンスが低下する可能性があります。 代わりに、n には任意の数値を指定できる varchar(n) を使用します。 n が低いほど、クエリのパフォーマンスが向上する可能性が高くなります。

  5. items 配列を持つ項目のみを表示するには、次のクエリで CROSS APPLY を使用します。

    SELECT
        t.name,
        t.id,
        t.country,
        P.purchased,
        P.order_id,
        P.item_description 
    FROM
        OrdersDB_TestC as t CROSS APPLY OPENJSON(t.items) WITH (
            purchased datetime '$.purchased',
            order_id varchar(100) '$.order_id',
            item_description varchar(200) '$.item_description' 
        ) as P 
    

深く入れ子になったデータを作成する

この入れ子になったデータの例を基にして、深く入れ子になったデータの例を追加しましょう。

  1. Azure portal で Azure Cosmos DB アカウントに移動します。

  2. リソース メニューで [データ エクスプローラー] を選択します。

  3. [+ 新しいコンテナー] を使用して、新しいコンテナーを作成します。 このガイドでは、コンテナー TestD に名前を付けます。 対応するデータベース名は任意です。

  4. [+ 新しい項目] オプションを複数回使用して、この JSON 項目を作成して保存します。

    {
      "id": "eadca09b-e618-4090-a25d-b424a26c2361",
      "entityType": "Package",
      "packages": [
        {
          "packageid": "fiwewsb-f342-jofd-a231-c2321",
          "storageTemperature": "69",
          "highValue": true,
          "items": [
            {
              "id": "1",
              "name": "Item1",
              "properties": {
                "weight": "2",
                "isFragile": "no"
              }
            },
            {
              "id": "2",
              "name": "Item2",
              "properties": {
                "weight": "4",
                "isFragile": "yes"
              }
            }
          ]
        },
        {
          "packageid": "d24343-dfdw-retd-x414-f34345",
          "storageTemperature": "78",
          "highValue": false,
          "items": [
            {
              "id": "3",
              "name": "Item3",
              "properties": {
                "weight": "12",
                "isFragile": "no"
              }
            },
            {
              "id": "4",
              "name": "Item4",
              "properties": {
                "weight": "12",
                "isFragile": "no"
              }
            }
          ]
        }
      ],
      "consignment": {
        "consignmentId": "ae21ebc2-8cfc-4566-bf07-b71cdfb37fb2",
        "customer": "Humongous Insurance",
        "deliveryDueDate": "2020-11-08T23:38:50.875258Z"
      }
    }
    

深く入れ子になったデータに対してクエリを実行する

最後に、JSON 文字列で深く入れ子になったデータを検索できる T-SQL クエリを作成します。

  1. TestD テーブルのコンテキスト メニューを開き、もう一度 [新しい SQL クエリ] を選択 します。

  2. このクエリを実行して、委託販売で OUTER APPLY を使用して入れ子になったデータのすべてのレベルを展開します。

    SELECT
        P.id,
        R.packageId,
        R.storageTemperature,
        R.highValue,
        G.id,
        G.name,
        H.weight,
        H.isFragile,
        Q.consignmentId,
        Q.customer,
        Q.deliveryDueDate 
    FROM
        OrdersDB_TestD as P CROSS APPLY OPENJSON(P.packages) WITH ( packageId varchar(100) '$.packageid',
        storageTemperature INT '$.storageTemperature',
        highValue varchar(100) '$.highValue',
        items nvarchar(MAX) AS JSON ) as R 
    OUTER APPLY OPENJSON (R.items) WITH (
        id varchar(100) '$.id',
        name varchar(100) '$.name',
        properties nvarchar(MAX) as JSON 
    ) as G OUTER APPLY OPENJSON(G.properties) WITH  (
        weight INT '$.weight',
        isFragile varchar(100) '$.isFragile'
    ) as H OUTER APPLY OPENJSON(P.consignment) WITH  (
        consignmentId varchar(200) '$.consignmentId',
        customer varchar(100) '$.customer',
        deliveryDueDate Date '$.deliveryDueDate'
    ) as Q 
    

    Note

    packages を展開する時には、items はJSON として表示され、必要に応じて展開できます。 この items プロパティには、オプションで展開できる JSON としてのサブプロパティがあります。

  3. 最後に、特定のレベルの入れ子を拡張するタイミングを選択するクエリを実行します。

    SELECT
        P.id,
        R.packageId,
        R.storageTemperature,
        R.highValue,
        R.items,
        Q.consignmentId,
        Q.customer,
        Q.deliveryDueDate 
    FROM
        OrdersDB_TestD as P CROSS APPLY OPENJSON(P.packages) WITH (
            packageId varchar(100) '$.packageid',
            storageTemperature INT '$.storageTemperature',
            highValue varchar(100) '$.highValue',
            items nvarchar(MAX) AS JSON
        ) as R 
    OUTER APPLY OPENJSON(P.consignment) WITH  (
        consignmentId varchar(200) '$.consignmentId',
        customer varchar(100) '$.customer',
        deliveryDueDate Date '$.deliveryDueDate'
    ) as Q 
    

    Note

    入れ子になったレベルのプロパティ制限は、この T-SQL クエリ エクスペリエンスでは適用されません。