쿼리에서 형식 검사 구현
데이터 저장소로서 Azure Cosmos DB for NoSQL의 장점 중 하나는 다양한 구조와 셰이프로 데이터를 유연하게 저장할 수 있다는 점입니다. 개발자가 이 데이터에 대한 쿼리를 작성할 때, 형식 검사에 대한 책임은 주로 당신이 작성한 쿼리에 있습니다. NoSQL API에 대한 SQL 쿼리 언어에는 변수가 있거나 알 수 없는 경우 즉시 속성 또는 식 유형을 확인할 수 있도록 하는 기본 제공 함수 모음이 포함되어 있습니다.
지금까지 샘플 데이터 구조는 간단하고 이해하기 쉽습니다. 그러나 몇 가지 가능한 예외를 살펴보겠습니다.
컨테이너의 각 제품 항목에는 태그라는 속성이 있습니다. 태그 속성은 ID 및 이름 속성이 있는 개체의 배열입니다. 지금까지는 태그 배열이 컨테이너의 모든 제품에 대해 항상 존재한다고 가정했습니다. 그러나 해당 기준 가정을 제거하면 다음 예제와 같이 태그 속성 없이 새 제품 항목이 컨테이너에 삽입되는 상황이 발생할 수 있습니다.
{
"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 기본 제공 함수를 사용하여 태그 속성이 이 항목에 있는지 확인할 수 있습니다.
SELECT
IS_DEFINED(p.tags) AS tags_exist
FROM
products p
[
{
"tags_exist": false
}
]
태그 속성이 있지만, 배열이 아니고 다른 형식의 속성이라고 가정해 보겠습니다.
{
"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 기본 제공 함수를 사용하여 태그 속성이 배열인지 확인할 수 있습니다.
SELECT
IS_ARRAY(p.tags) AS tags_is_array
FROM
products p
태그 속성이 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_OBJECT 및 IS_BOOLEAN을 비롯한 다른 기본 제공 형식 검사 함수가 있습니다.