تنفيذ استعلامات التحقق من النوع

مكتمل

واحدة من Azure Cosmos DB لمزايا NoSQL كمخزن بيانات، هي مرونتها لتخزين البيانات بهياكل وأشكال مختلفة. أثناء صياغة المطور للاستعلامات لهذه البيانات، غالبا ما تقع مسؤولية التحقق من النوع على استعلاماتك. تتضمن لغة استعلام SQL لواجهة برمجة تطبيقات NoSQL مجموعة من الوظائف المضمنة لتمكينك من التحقق من أنواع الخصائص أو التعبيرات بسرعة عندما تكون متغيرة أو غير معروفة.

حتى الآن، بنية بيانات العينة بسيطة وسهلة الفهم. ولكن دعونا نراعي بعض الاستثناءات المحتملة.

يمتلك كل عنصر منتج في الحاوية خاصية تسمى علامات. خاصية العلامات هي صفيف كائنات له خصائص المعرّفوالاسم. الافتراض، حتى الآن، هو أن صفيف العلامات موجود دائما لكل منتج في الحاوية. ولكن في حالة إزالة هذا الافتراض الأساسي، فقد يكون لدينا موقف يتم فيه إدراج عنصر منتج جديد في الحاوية دون خاصية العلامة مثل هذا المثال:

{
    "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

يمكننا أيضا التحقق مما إذا كانت خاصية العلامات خالية أو لا تستخدم الدالة المضمنة 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.