تنفيذ استعلامات التحقق من النوع
واحدة من 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.