クエリで型チェックを実装する

完了

データ ストアとしての Azure Cosmos DB for NoSQL の利点の 1 つは、さまざまな構造や形状を持つデータが柔軟に格納されることです。 このデータに対するクエリを作成する開発者として、型チェックの責任はしばしばクエリ自身にかかっています。 NoSQL API の SQL クエリ言語には、一連の組み込み関数が含まれており、変数または不明な場合に、その場でプロパティまたは式の種類を確認できます。

これまでは、サンプル データ構造はシンプルでわかりやすいものになっています。 ただし、起きる可能性のある例外を考えましょう。

コンテナー内の各 product 項目には、tags という名前のプロパティがあります。 この tags プロパティは、id および name プロパティを持つオブジェクトの配列です。 これまでは、コンテナー内のすべての製品に対して tags 配列が常に存在することを前提としていました。 しかし、そのベースラインの前提を取り除くと、次の例のようなタグ プロパティを使用せずに、新しい製品項目がコンテナーに挿入される状況が生じる可能性があります。

{
    "id": "6374995F-9A78-43CD-AE0D-5F6041078140",
    "categoryid": "3E4CEACD-D007-46EB-82D7-31F6141752B2",
    "sku": "FR-R38R-60",
    "name": "LL Road Frame - Red, 60",
    "price": 337.22
}

まず、IS_DEFINED 組み込み関数を使用して、この項目に tags プロパティが存在するかどうかを確認できます。

SELECT
    IS_DEFINED(p.tags) AS tags_exist
FROM
    products p
[
    {
        "tags_exist": false
    }
]

tags プロパティは存在するが、配列ではないとします。これは別の種類のプロパティです。

{
    "id": "6374995F-9A78-43CD-AE0D-5F6041078140",
    "categoryid": "3E4CEACD-D007-46EB-82D7-31F6141752B2",
    "sku": "FR-R38R-60",
    "name": "LL Road Frame - Red, 60",
    "price": 337.22,
    "tags": "fun, sporty, rad"
}

まず、IS_ARRAY 組み込み関数を使用して、この項目に tags プロパティが配列かどうかを確認できます。

SELECT
    IS_ARRAY(p.tags) AS tags_is_array
FROM
    products p

tags プロパティが null か、IS_NULL組み込み関数を使用していないかも確認できます。

SELECT
    IS_NULL(p.tags) AS tags_is_null
FROM
    products p

他のデータ型を含むさまざまなシナリオに対して、さらに多くの組み込み関数があります。

たとえば、異なるデータ ストアで一貫性のない状態で価格情報を保持している状況を考えてみます。 文字列データを使用して価格情報を保持する場合と、数値を使用して価格情報を格納する場合があります。 組み込み IS_NUMBER 関数は、クエリの WHERE 式で使用できます。

SELECT
    p.id,
    p.price, 
    (p.price * 1.25) AS priceWithTax
FROM
    products p
WHERE
    IS_NUMBER(p.price)

組み込み IS_STRING 関数を使用して、価格が文字列であり、書式設定が適用されていないことを確認することもできます。

SELECT
    p.id,
    p.price
FROM
    products p
WHERE
    IS_STRING(p.price)

IS_OBJECTIS_BOOLEAN などの他の組み込みの型チェック関数があります。