الاستعلام عن بيانات Azure Cosmos DB باستخدام تجمع SQL بلا خادم في Azure Synapse Link

يسمح لك تجمع SQL بلا خادم بتحليل البيانات الموجودة في حاويات Azure Cosmos DB التي تم تمكينها باستخدام Azure Synapse Link في الوقت الحقيقي تقريباً دون التأثير على أداء أحمال العمل الخاصة بالعمليات. وهو يوفر بناء جملة T-SQL مألوفاً للاستعلام عن البيانات من المتجر التحليلي والاتصال المتكامل بمجموعة واسعة من المعلومات المهنية (BI) وأدوات الاستعلام المخصصة عبر واجهة T-SQL.

للاستعلام عن Azure Cosmos DB، يتم دعم منطقة سطح SELECT الكاملة من خلال الدالة OPENROWSET، والتي تتضمن غالبية وظائف SQL وعوامل التشغيل. يمكنك أيضا تخزين نتائج الاستعلام الذي يقرأ البيانات من Azure Cosmos DB مع البيانات في Azure Blob Storage أو Azure Data Lake Storage باستخدام إنشاء جدول خارجي كمحدد (CETAS). لا يمكنك حالياً تخزين نتائج استعلام تجمع SQL بلا خادم إلى Azure Cosmos DB باستخدام CETAS.

في هذه المقالة، ستتعلم كيفية كتابة استعلام باستخدام تجمع SQL بلا خادم يقوم بالاستعلام عن البيانات من حاويات Azure Cosmos DB التي تم تمكينها باستخدام Azure Synapse Link. يمكنك بعد ذلك معرفة المزيد حول إنشاء طرق عرض تجمع بلا خادم SQL عبر حاويات Azure Cosmos DB وتوصيلها بنماذج Power BI في هذا البرنامج التعليمي. يستخدم هذا البرنامج التعليمي حاوية مع مخطط Azure Cosmos DB محدد جيداً. يمكنك أيضا التحقق من وحدة Learn النمطية حول كيفية الاستعلام عن Azure Cosmos DB باستخدام SQL Serverless ل Azure Synapse Analytics.

إشعار

لا يمكنك استخدام الهوية المدارة للوصول إلى حاوية Azure Cosmos DB من تجمع SQL بلا خادم.

المتطلبات الأساسية

  • تأكد من إعداد متجر تحليلي:
  • تأكد من تطبيق جميع أفضل الممارسات، مثل:
    • تأكد من أن التخزين التحليلي ل Azure Cosmos DB في نفس المنطقة مثل تجمع SQL بلا خادم.
    • تأكد من أن تطبيق العميل (Power BI، خدمة التحليل) في نفس المنطقة، مثل تجمع SQL بلا خادم.
    • إذا كنت تقوم بإعادة كمية كبيرة من البيانات (أكبر من 80 غيغابايت)، ففكر في استخدام طبقة التخزين المؤقت، مثل خدمات التحليل وتحميل الأقسام الأصغر من 80 غيغابايت في نموذج خدمات التحليل.
    • إذا كنت تقوم بتصفية البيانات باستخدام أعمدة السلسلة، فتأكد من أنك تستخدم الدالة OPENROWSET مع العبارة الصريحة WITH التي تحتوي على أصغر الأنواع الممكنة (على سبيل المثال، لا تستخدم VARCHAR(1000) إذا كنت تعرف أن الخاصية تحتوي على ما يصل إلى 5 أحرف).

نظرة عامة

يتيح لك تجمع SQL بلا خادم الاستعلام عن التخزين التحليلي لـ Azure Cosmos DB باستخدام الدالة OPENROWSET.

  • OPENROWSET مع مفتاح مضمن. يمكن استخدام بناء الجملة هذا للاستعلام عن مجموعات Azure Cosmos DB دون الحاجة إلى إعداد بيانات الاعتماد.
  • OPENROWSET بيانات الاعتماد المشار إليها التي تحتوي على مفتاح حساب Azure Cosmos DB. يمكن استخدام بناء الجملة هذا لإنشاء طرق عرض على مجموعات Azure Cosmos DB.

لدعم الاستعلام عن البيانات وتحليلها في مخزن تحليلي لـ Azure Cosmos DB، يتم استخدام تجمع SQL بلا خادم. يستخدم تجمع SQL بلا خادم بناء جملة SQL OPENROWSET، لذلك يجب أولاً تحويل سلسلة اتصال Azure Cosmos DB إلى هذا التنسيق:

OPENROWSET( 
       'CosmosDB',
       '<SQL connection string for Azure Cosmos DB>',
       <Container name>
    )  [ < with clause > ] AS alias

تحدد سلسلة الاتصال SQL لـ Azure Cosmos DB اسم حساب Azure Cosmos DB واسم قاعدة البيانات والمفتاح الرئيسي لحساب قاعدة البيانات واسم منطقة اختياري للدالة OPENROWSET. يمكن أخذ بعض هذه المعلومات من سلسلة اتصال Azure Cosmos DB القياسية.

التحويل من تنسيق سلسلة اتصال Azure Cosmos DB القياسية:

AccountEndpoint=https://<database account name>.documents.azure.com:443/;AccountKey=<database account master key>;

سيكون لسلسلة الاتصال التنسيق التالي:

'account=<database account name>;database=<database name>;region=<region name>;key=<database account master key>'

المنطقة اختيارية. إذا تم حذفها، يتم استخدام المنطقة الأساسية للحاوية.

هام

هناك معلمة اختيارية أخرى في سلسلة الاتصال تسمى endpoint. endpoint المعلمة مطلوبة للحسابات التي لا تتطابق مع التنسيق القياسي*.documents.azure.com. على سبيل المثال، إذا كان حساب Azure CosmosDB ينتهي ب .documents.azure.us، فتأكد من إضافة endpoint=<account name>.documents.azure.us في سلسلة الاتصال.

يتم تحديد اسم حاوية Azure Cosmos DB بدون علامات اقتباس في بناء الجملة OPENROWSET. إذا كان اسم الحاوية يحتوي على أي أحرف خاصة، على سبيل المثال، شرطة (-)، يجب التفاف الاسم داخل أقواس مربعة ([]) في بناء الجملة OPENROWSET.

هام

تأكد من أنك تستخدم بعض ترتيب قاعدة بيانات UTF-8، على سبيل المثال، Latin1_General_100_CI_AS_SC_UTF8، لأن قيم السلسلة في مخزن تحليلي لـ Azure Cosmos DB مشفرة كنص UTF-8. قد يتسبب عدم التطابق بين ترميز النص في الملف والترتيب في حدوث أخطاء غير متوقعة في تحويل النص. يمكنك بسهولة تغيير الترتيب الافتراضي لقاعدة البيانات الحالية باستخدام عبارة T-SQL alter database current collate Latin1_General_100_CI_AI_SC_UTF8.

إشعار

لا يدعم تجمع SQL بلا خادم الاستعلام عن مخزن عمليات Azure Cosmos DB.

نموذج مجموعة بيانات

تستند الأمثلة الواردة في هذه المقالة إلى بيانات من المركز الأوروبي للوقاية من الأمراض ومكافحتها (ECDC) وحالات COVID-19 ومجموعة بيانات البحث المفتوح COVID-19 (CORD-19)، doi: 10.5281 / zenodo.3715505.

يمكنك مشاهدة الترخيص وبنية البيانات على هذه الصفحات. يمكنك أيضا تنزيل بيانات نموذجية لمجموعات بيانات ECDC و CORD-19.

للمتابعة مع هذه المقالة التي تعرض كيفية الاستعلام عن بيانات Azure Cosmos DB باستخدام تجمع SQL بلا خادم، تأكد من إنشاء الموارد التالية:

  • حساب قاعدة بيانات Azure Cosmos DB الذي تم تمكين Azure Synapse Link له.
  • قاعدة بيانات Azure Cosmos DB تسمى covid.
  • حاويتان من حاويات Azure Cosmos DB المسماة Ecdc وCord19 المحملة بمجموعات بيانات العينة السابقة.

يمكنك استخدام سلسلة الاتصال التالية لغرض الاختبار: Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==. لاحظ أن هذا الاتصال لن يضمن الأداء لأن هذا الحساب قد يكون موجوداً في منطقة بعيدة مقارنة بنقطة نهاية Synapse SQL.

استكشاف بيانات Azure Cosmos DB باستخدام الاستدلال التلقائي على المخطط

أسهل طريقة لاستكشاف البيانات في Azure Cosmos DB تتم باستخدام إمكانية الاستدلال التلقائي للمخطط. عن طريق حذف العبارة WITH من العبارة OPENROWSET، يمكنك إرشاد تجمع SQL بلا خادم إلى الكشف التلقائي (الاستدلال) عن مخطط المخزن التحليلي لحاوية Azure Cosmos DB.

SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Ecdc) as documents

في المثال السابق، قمنا بتوجيه تجمع SQL بلا خادم للاتصال بقاعدة البيانات covid في حساب Azure Cosmos DB MyCosmosDbAccount المصادق عليه باستخدام مفتاح Azure Cosmos DB (الوهمي في المثال السابق). ثم قمنا بالوصول إلى المخزن التحليلي للحاوية Ecdc في المنطقة West US 2. نظراً لعدم وجود إسقاط لخصائص معينة، سترجع الدالة OPENROWSET جميع الخصائص من عناصر Azure Cosmos DB.

بافتراض أن العناصر الموجودة في حاوية Azure Cosmos DB تحتوي على خصائص date_rep وcases وgeo_id، تظهر نتائج هذا الاستعلام في الجدول التالي:

date_rep الحالات geo_id
2020-08-13 254 RS
2020-08-12 235 RS
2020-08-11 163 RS

إذا كنت بحاجة إلى استكشاف البيانات من الحاوية الأخرى في نفس قاعدة بيانات Azure Cosmos DB، يمكنك استخدام نفس سلسلة الاتصال والإشارة إلى الحاوية المطلوبة كمعلمة ثالثة:

SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Cord19) as cord19

تحديد المخطط بشكل صريح

بينما توفر إمكانية الاستدلال التلقائي للمخطط في OPENROWSET استعلامًا بسيطًا وسهل الاستخدام، فقد تتطلب منك سيناريوهات عملك تحديد المخطط بشكل صريح للخصائص ذات الصلة للقراءة فقط من بيانات Azure Cosmos DB.

تمكنك الدالة OPENROWSET من تحديد الخصائص التي تريد قراءتها من البيانات في الحاوية وتحديد أنواع البيانات الخاصة بها بشكل صريح.

لنتخيل أننا استوردنا بعض البيانات من مجموعة بيانات ECDC COVID بالبنية التالية إلى Azure Cosmos DB:

{"date_rep":"2020-08-13","cases":254,"countries_and_territories":"Serbia","geo_id":"RS"}
{"date_rep":"2020-08-12","cases":235,"countries_and_territories":"Serbia","geo_id":"RS"}
{"date_rep":"2020-08-11","cases":163,"countries_and_territories":"Serbia","geo_id":"RS"}

يمكن تمثيل مستندات JSON المسطحة هذه في Azure Cosmos DB كملف من الصفوف والأعمدة في Synapse SQL. تمكنك الدالة OPENROWSET من تحديد مجموعة فرعية من الخصائص التي تريد قراءتها وأنواع الأعمدة الدقيقة في عبارة WITH:

SELECT TOP 10 *
FROM OPENROWSET(
      'CosmosDB',
      'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Ecdc
    ) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows

قد تبدو نتيجة هذا الاستعلام كالجدول التالي:

date_rep الحالات geo_id
2020-08-13 254 RS
2020-08-12 235 RS
2020-08-11 163 RS

لمزيد من المعلومات حول أنواع SQL التي يجب استخدامها لقيم Azure Cosmos DB، راجع قواعد تعيينات نوع SQL في نهاية المقالة.

إنشاء طريقة العرض

إن إنشاء طرق عرض في master أو قواعد البيانات الافتراضية هو أمر غير مستحسن أو مدعوم. لذلك، تحتاج إلى إنشاء قاعدة بيانات مستخدم لطرق العرض الخاصة بك.

بمجرد تحديد المخطط، يمكنك إعداد طريقة عرض أعلى بيانات Azure Cosmos DB. يجب وضع مفتاح حساب Azure Cosmos DB في بيانات اعتماد منفصلة ثم الرجوع إلى بيانات الاعتماد هذه من الدالة OPENROWSET. لا تحتفظ بمفتاح حسابك في تعريف طريقة العرض.

CREATE CREDENTIAL MyCosmosDbAccountCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 's5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==';
GO
CREATE OR ALTER VIEW Ecdc
AS SELECT *
FROM OPENROWSET(
      PROVIDER = 'CosmosDB',
      CONNECTION = 'Account=synapselink-cosmosdb-sqlsample;Database=covid',
      OBJECT = 'Ecdc',
      SERVER_CREDENTIAL = 'MyCosmosDbAccountCredential'
    ) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows

لا تستخدم OPENROWSET دون مخطط محدد بشكل صريح لأنه قد يؤثر على أدائك. تأكد من استخدام أصغر الأحجام الممكنة للأعمدة (على سبيل المثال VARCHAR(100) بدلاً من VARCHAR(8000) الافتراضي). يجب استخدام بعض ترتيب UTF-8 كترتيب افتراضي لقاعدة البيانات أو تعيينه كترتيب عمود صريح لتجنب مشكلة تحويل UTF-8. يوفر الترتيب Latin1_General_100_BIN2_UTF8 أفضل أداء عند تصفية البيانات باستخدام بعض أعمدة السلسلة.

عند الاستعلام عن طريقة العرض، قد تواجه أخطاء أو نتائج غير متوقعة. ربما يعني هذا أن طريقة العرض تشير إلى أعمدة أو كائنات تم تعديلها أو لم تعد موجودة. تحتاج إلى ضبط تعريف العرض يدويا للتوافق مع تغييرات المخطط الأساسية. ضع في اعتبارك أن هذا يمكن أن يحدث عند استخدام استنتاج المخطط التلقائي في طريقة العرض وعند تحديد المخطط بشكل صريح.

الاستعلام عن العناصر المتداخلة

باستخدام Azure Cosmos DB، يمكنك تمثيل نماذج بيانات أكثر تعقيداً عن طريق تكوينها كعناصر أو صفائف متداخلة. تدير إمكانية التزامن التلقائي لـ Azure Synapse Link لـ Azure Cosmos DB تمثيل المخطط في المخزن التحليلي خارج الصندوق، والذي يتضمن معالجة أنواع البيانات المتداخلة التي تسمح بالاستعلام الغني من تجمع SQL بلا خادم.

على سبيل المثال، تحتوي مجموعة بيانات CORD-19 على مستندات JSON التي تتبع هذه البنية:

{
    "paper_id": <str>,                   # 40-character sha1 of the PDF
    "metadata": {
        "title": <str>,
        "authors": <array of objects>    # list of author dicts, in order
        ...
     }
     ...
}

يتم تمثيل العناصر المتداخلة والصفائف في Azure Cosmos DB كسلاسل JSON في نتيجة الاستعلام عندما تقرأها الدالة OPENROWSET. يمكنك تحديد المسارات إلى القيم المتداخلة في العناصر عند استخدام العبارة WITH:

SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Cord19)
WITH (  paper_id    varchar(8000),
        title        varchar(1000) '$.metadata.title',
        metadata     varchar(max),
        authors      varchar(max) '$.metadata.authors'
) AS docs;

قد تبدو نتيجة هذا الاستعلام كالجدول التالي:

paper_id العنوان بيانات التعريف المؤلفون
bb11206963e831f… معلومات تكميلية عن وباء بيئي… {"title":"Supplementary Informati… [{"first":"Julien","last":"Mélade","suffix":"","af…
bb1206963e831f1… استخدام Sera Convalescent في المناعة E... {"title":"The Use of Convalescent… [{"first":"Antonio","last":"Lavazza","suffix":"", …
bb378eca9aac649… Tylosema esculentum (ماراما) درنة وبـ... {"title":"Tylosema esculentum (Ma… [{"first":"Walter","last":"Chingwaru","suffix":"",…

اكتشف المزيد عن تحليل أنواع البيانات المعقدة مثل ملفات وحاويات Parquet في Azure Synapse Link لـ Azure Cosmos DB أو الهياكل المتداخلة في تجمع SQL بلا خادم.

هام

إذا رأيت أحرف غير متوقعة في النص، مثل MÃÂ&copy;lade بدلاً من Mélade، فلن يتم تعيين ترتيب قاعدة البيانات إلى ترتيب UTF-8. تغيير ترتيب قاعدة البيانات إلى ترتيب UTF-8 باستخدام عبارة SQL مثل ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8.

تبسيط الصفائف المتداخلة

قد تكون بيانات Azure Cosmos DB قد تداخلت مع الصفائف الفرعية، مثل صفيف المؤلف من مجموعة بيانات CORD-19:

{
    "paper_id": <str>,                      # 40-character sha1 of the PDF
    "metadata": {
        "title": <str>,
        "authors": [                        # list of author dicts, in order
            {
                "first": <str>,
                "middle": <list of str>,
                "last": <str>,
                "suffix": <str>,
                "affiliation": <dict>,
                "email": <str>
            },
            ...
        ],
        ...
}

في بعض الحالات، قد تحتاج إلى "ضم" الخصائص من العنصر العلوي (بيانات التعريف) مع كافة عناصر الصفيف (المؤلفون). يمكنك تجمع SQL بلا خادم من تبسيط البنيات المتداخلة عن طريق تطبيق الدالة OPENJSON على الصفيف المتداخل:

SELECT
    *
FROM
    OPENROWSET(
      'CosmosDB',
      'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Cord19
    ) WITH ( title varchar(1000) '$.metadata.title',
             authors varchar(max) '$.metadata.authors' ) AS docs
      CROSS APPLY OPENJSON ( authors )
                  WITH (
                       first varchar(50),
                       last varchar(50),
                       affiliation nvarchar(max) as json
                  ) AS a

قد تبدو نتيجة هذا الاستعلام كالجدول التالي:

العنوان المؤلفون أولاً last الانتماء
معلومات تكميلية عن وباء بيئي… [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… جوليان ميلاد {"laboratory":"Centre de Recher…
معلومات تكميلية عن وباء بيئي… [{"first":"Nicolas","last":"4#","suffix":"","affiliation":{"laboratory":"","institution":"U… نيكولاس 4# {"laboratory":"","institution":"U…
معلومات تكميلية عن وباء بيئي… [{"first":"Beza","last":"Ramazindrazana","suffix":"","affiliation":{"laboratory":"Centre de Recher… بيزا رامازيندرازانا {"laboratory":"Centre de Recher…
معلومات تكميلية عن وباء بيئي… [{"first":"Olivier","last":"Flores","suffix":"","affiliation":{"laboratory":"UMR C53 CIRAD, … أوليفييه فلورس {"laboratory":"UMR C53 CIRAD, …

هام

إذا رأيت أحرف غير متوقعة في النص، مثل MÃÂ&copy;lade بدلاً من Mélade، فلن يتم تعيين ترتيب قاعدة البيانات إلى ترتيب UTF-8. تغيير ترتيب قاعدة البيانات إلى ترتيب UTF-8 باستخدام عبارة SQL مثل ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8.

تعيينات نوع Azure Cosmos DB إلى SQL

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

تدعم حسابات Azure Cosmos DB لواجهة برمجة تطبيقات SQL (Core) أنواع خصائص JSON للرقم أو السلسلة أو القيمة المنطقية أو الخالية أو العنصر المتداخل أو الصفيف. ستحتاج إلى اختيار أنواع SQL التي تطابق أنواع JSON هذه إذا كنت تستخدم العبارة WITH في OPENROWSET. يعرض الجدول التالي أنواع أعمدة SQL التي يجب استخدامها لأنواع خصائص مختلفة في Azure Cosmos DB.

نوع خاصية Azure Cosmos DB نوع عمود SQL
Boolean بت
رقم صحيح عدد صحيح كبير
عدد عشري عائم
السلسلة‬ varchar (ترتيب قاعدة بيانات UTF-8)
وقت التاريخ (سلسلة منسقة بواسطة ISO) varchar (30)
وقت التاريخ (الطابع الزمني UNIX) عدد صحيح كبير
قيمة فارغة any SQL type
عنصر أو صفيف متداخل varchar(max) (ترتيب قاعدة بيانات UTF-8)، متسلسل كنص JSON

مخطط كامل الدقة

يسجل المخطط كامل الدقة لـ Azure Cosmos DB كلاً من القيم وأفضل أنواع المطابقة لكل خاصية في الحاوية. توفر الدالة OPENROWSETالموجودة على حاوية ذات مخطط الدقة الكاملة كلاً من النوع والقيمة الفعلية في كل خلية. لنفترض أن الاستعلام التالي يقرأ العناصر من حاوية مع مخطط الدقة الكاملة:

SELECT *
FROM OPENROWSET(
      'CosmosDB',
      'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
       Ecdc
    ) as rows

سترجع نتيجة هذا الاستعلام الأنواع والقيم المنسقة كنص JSON:

date_rep الحالات geo_id
{"date":"2020-08-13"} {"int32":"254"} {"string":"RS"}
{"date":"2020-08-12"} {"int32":"235"} {"string":"RS"}
{"date":"2020-08-11"} {"int32":"316"} {"string":"RS"}
{"date":"2020-08-10"} {"int32":"281"} {"string":"RS"}
{"date":"2020-08-09"} {"int32":"295"} {"string":"RS"}
{"string":"2020/08/08"} {"int32":"312"} {"string":"RS"}
{"date":"2020-08-07"} {"float64":"339.0"} {"string":"RS"}

بالنسبة لكل قيمة، يمكنك رؤية النوع المحدد في عنصر حاوية Azure Cosmos DB. تحتوي معظم قيم الخاصية date_rep على قيم date، ولكن يتم تخزين بعضها بشكل غير صحيح كسلاسل في Azure Cosmos DB. سيرجع مخطط الدقة الكاملة كلاً من قيم date المكتوبة بشكل صحيح، والقيم string المنسقة بشكل غير صحيح. يعبر عدد الحالات عن معلومات مخزنة كقيمة int32، ولكن هناك قيمة واحدة تم إدخالها كعدد عشري. تحتوي هذه القيمة على النوع float64. إذا كانت هناك بعض القيم التي تتجاوز أكبر int32 عدد، فسيتم تخزينها كنوع int64. يتم تخزين قيم geo_id جميعها في هذا المثال كأنواع string.

هام

تعرض الدالة OPENROWSET بدون عبارة WITH كلاً من القيم ذات الأنواع المتوقعة والقيم ذات الأنواع المدخلة بشكل غير صحيح. تم تصميم هذه الدالة لاستكشاف البيانات وليس لإعداد التقارير. لا تقم بتوزيع قيم JSON التي تم إرجاعها من هذه الدالة لإنشاء التقارير. استخدم عبارة WITH صريحة لإنشاء تقاريرك. يجب تنظيف القيم التي تحتوي على أنواع غير صحيحة في حاوية Azure Cosmos DB لتطبيق التصحيحات في مخزن تحليل الدقة الكامل.

للاستعلام عن Azure Cosmos DB لحسابات MongoDB، يمكنك معرفة المزيد حول تمثيل مخطط الدقة الكامل في المخزن التحليلي وأسماء الخصائص الموسعة التي سيتم استخدامها في ما هو مخزن Azure Cosmos DB التحليلي؟.

عناصر الاستعلام مع مخطط الدقة الكاملة

أثناء الاستعلام عن مخطط الدقة الكاملة، تحتاج إلى تحديد نوع SQL ونوع خاصية Azure Cosmos DB المتوقع في العبارة WITH بشكل صريح.

في المثال التالي، سنفترض أن string هو النوع الصحيح للخاصية geo_id، وأن int32 هو النوع الصحيح للخاصية cases:

SELECT geo_id, cases = SUM(cases)
FROM OPENROWSET(
      'CosmosDB'
      'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
       Ecdc
    ) WITH ( geo_id VARCHAR(50) '$.geo_id.string',
             cases INT '$.cases.int32'
    ) as rows
GROUP BY geo_id

سيتم إرجاع القيم الخاصة بـ geo_id وcases التي تحتوي على أنواع أخرى كقيم NULL. سيشير هذا الاستعلام فقط إلى cases مع النوع المحدد في التعبير (cases.int32).

إذا كانت لديك قيم مع أنواع أخرى (cases.int64، cases.float64) لا يمكن تنظيفها في حاوية Azure Cosmos DB، فستحتاج إلى الرجوع إليها بشكل صريح في عبارة WITH، ودمج النتائج. يجمع الاستعلام التالي كلاً من int32 وint64 وfloat64 التي تم تخزينها في العمود cases:

SELECT geo_id, cases = SUM(cases_int) + SUM(cases_bigint) + SUM(cases_float)
FROM OPENROWSET(
      'CosmosDB',
      'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
       Ecdc
    ) WITH ( geo_id VARCHAR(50) '$.geo_id.string', 
             cases_int INT '$.cases.int32',
             cases_bigint BIGINT '$.cases.int64',
             cases_float FLOAT '$.cases.float64'
    ) as rows
GROUP BY geo_id

في هذا المثال، يتم تخزين عدد الحالات إما كقيم int32 أو int64 أو float64. يجب استخراج جميع القيم لحساب عدد الحالات لكل بلد/منطقة.

استكشاف الأخطاء وإصلاحها

راجع صفحة المساعدة الذاتية للعثور على المشكلات المعروفة أو خطوات استكشاف الأخطاء وإصلاحها التي يمكن أن تساعدك على حل المشكلات المحتملة مع استعلامات Azure Cosmos DB.

الخطوات التالية

لمزيد من المعلومات، راجع المقالات التالية: