الاستعلام عن بيانات 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.
- احصل على سلسلة الاتصال بمفتاح للقراءة فقط ستستخدمه للاستعلام عن مخزن تحليلي.
- الحصول على مفتاح القراءة فقط الذي سيتم استخدامه للوصول إلى حاوية Azure Cosmos DB
- تأكد من تطبيق جميع أفضل الممارسات، مثل:
- تأكد من أن التخزين التحليلي ل 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é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é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.
الخطوات التالية
لمزيد من المعلومات، راجع المقالات التالية:
- استخدام Power BI وتجمع SQL بلا خادم مع Azure Synapse Link
- إنشاء طرق العرض واستخدامها في تجمع من SQL بلا خادم
- البرنامج التعليمي حول بناء طرق عرض تجمع SQL بلا خادم عبر Azure Cosmos DB وتوصيلها بنماذج Power BI عبر DirectQuery
- قم بزيارة ارتباط Azure Synapse لصفحة المساعدة الذاتية ل Azure Cosmos DB إذا كنت تتلقى بعض الأخطاء أو تواجه مشكلات في الأداء.
- تحقق من وحدة Learn النمطية حول كيفية الاستعلام عن Azure Cosmos DB باستخدام SQL Serverless ل Azure Synapse Analytics.