Query Azure Cosmos DB data with a serverless SQL pool in Azure Synapse Link

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

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

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

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

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

نظرة عامة

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

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

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

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

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

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

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

تحتوي سلسلة اتصال SQL على التنسيق التالي:

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

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

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

هام

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

ملاحظة

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

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

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

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

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

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

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

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

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

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

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

بافتراض أن العناصر الموجودة في حاوية قاعدة بيانات Azure Cosmos لها 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.

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 كمجموعة من الصفوف والأعمدة في 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، راجع قواعد تعيينات أنواع SQL في نهاية المقالة.

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

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

بمجرد تحديد المخطط، يمكنك إعداد طريقة عرض أعلى بيانات قاعدة بيانات Azure Cosmos الخاصة بك. يجب وضع مفتاح حساب 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 أفضل أداء عند تصفية بيانات yu باستخدام بعض أعمدة السلسلة.

كائنات متداخلة للاستعلام

باستخدام 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 كسلاسل 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 العنوان metadata المؤلف
bb11206963e831f... معلومات تكميلية وبائية بيئية... {"title":"Supplementary Informati… [{"first":"Julien","last":"Mélade","suffix":"","af…
bb1206963e831f1... استخدام أمصال النقاهة في مناعة... {"title":"The Use of Convalescent… [{"first":"Antonio","last":"Lavazza","suffix":"", …
bb378eca9aac649... Tylosema esculentum (Marama) درنة و B ... {"title":"Tylosema esculentum (Ma… [{"first":"Walter","last":"Chingwaru","suffix":"",…

تعرف على المزيد حول تحليل أنواع البيانات المعقدة في Azure Synapse Linkوالهياكل المتداخلة في تجمع SQL بدون خادم.

هام

إذا رأيت أحرف غير متوقعة في النص الخاص بك مثل Mé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

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

العنوان المؤلف first last الانتماء
معلومات تكميلية وبائية بيئية... [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… جوليان Mélade {"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élade بدلا من Mélade، فلن يتم تعيين ترتيب قاعدة البيانات إلى ترتيب UTF-8 . تغيير ترتيب قاعدة البيانات إلى ترتيب UTF-8 باستخدام عبارة SQL مثل ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8.

Azure Cosmos DB to SQL type mappings

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

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

Azure Cosmos DB نوع الملكية نوع العمود SQL
منطقي بت
عدد صحيح عدد صحيح كبير
العدد العشري حُر
سلسلة varchar (ترتيب قاعدة بيانات UTF-8)
التاريخ الزمني (سلسلة بتنسيق ISO) فارشار(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
{"التاريخ":"2020-08-13"} {"int32":"254"} {"string":"RS"}
{"التاريخ":"2020-08-12"} {"int32":"235"} {"string":"RS"}
{"التاريخ":"2020-08-11"} {"int32":"316"} {"string":"RS"}
{"التاريخ":"2020-08-10"} {"int32":"281"} {"string":"RS"}
{"التاريخ":"2020-08-09"} {"int32":"295"} {"string":"RS"}
{"سلسلة":"2020/08/08"} {"int32":"312"} {"string":"RS"}
{"التاريخ":"2020-08-07"} {"float64":"339.0"} {"string":"RS"}

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

هام

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

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

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

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

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

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، ) لا يمكن تنظيفها في حاوية قاعدة بيانات Azure Cosmos، cases.float64فستحتاج إلى الإشارة إليها صراحة في WITH عبارة ودمج النتائج. يقوم الاستعلام التالي بتجميع كل من int32، وتخزينها float64 في العمود casesint64:

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 قيم. يجب استخراج جميع القيم لحساب عدد الحالات لكل بلد.

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

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

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

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