مشاركة عبر


مرجع لغة SQL لتسريع الاستعلام

يدعم تسريع الاستعلام لغة تشبه ANSI SQL للتعبير عن الاستعلامات عبر محتويات الكائن الثنائي كبير الحجم. لهجة SQL لتسريع الاستعلام هي مجموعة فرعية من ANSI SQL، مع مجموعة محدودة من أنواع البيانات المدعومة وعوامل التشغيل وما إلى ذلك، ولكنها أيضا تتوسع في ANSI SQL لدعم الاستعلامات عبر تنسيقات البيانات شبه المنظمة الهرمية مثل JSON.

تحديد بناء الجملة

عبارة SQL الوحيدة التي يدعمها تسريع الاستعلام هي عبارة SELECT. يقوم هذا المثال بإرجاع كل صف يرجع التعبير له القيمة true.

SELECT * FROM table [WHERE expression] [LIMIT limit]

بالنسبة للبيانات المنسقة بواسطة CSV، يجب أن يكون BlobStorage . وهذا يعني أن الاستعلام سيتم تشغيله مقابل أي كائن ثنائي كبير الحجم تم تحديده في استدعاء REST. بالنسبة للبيانات المنسقة بواسطة JSON، يكون الجدول "واصف جدول". راجع قسم واصفات الجدول في هذه المقالة.

في المثال التالي، لكل صف يرجع تعبير WHERE له القيمة true، سترجع هذه العبارة صفا جديدا تم إنشاؤه من تقييم كل تعبير من تعبيرات الإسقاط.

SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]

يمكنك تحديد عمود محدد واحد أو أكثر كجزء من تعبير SELECT (على سبيل المثال، SELECT Title, Author, ISBN).

إشعار

الحد الأقصى لعدد الأعمدة المحددة التي يمكنك استخدامها في تعبير SELECT هو 49. إذا كنت بحاجة إلى عبارة SELECT لإرجاع أكثر من 49 عمودا، فاستخدم حرف بدل (*) لتعبير SELECT (على سبيل المثال: SELECT *).

يقوم المثال التالي بإرجاع حساب تجميعي (على سبيل المثال: متوسط قيمة عمود معين) فوق كل صف من الصفوف التي يرجع التعبير قيمة صحيحة لها.

SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]

يقوم المثال التالي بإرجاع إزاحات مناسبة لتقسيم كائن ثنائي كبير الحجم بتنسيق CSV. راجع قسم Sys.Split من هذه المقالة.

SELECT sys.split(split_size)FROM BlobStorage

أنواع البيانات

نوع البيانات وصف
Int عدد صحيح موقع 64 بت.
حُر نقطة عائمة 64 بت ("الدقة المزدوجة").
سلسلة سلسلة Unicode ذات الطول المتغير.
الطابع الزمني نقطة زمنية.
منطقيه صواب‏‎ أو خطأ‏‎.

عند قراءة القيم من البيانات المنسقة بتنسيق CSV، تتم قراءة جميع القيم كسلاسل. قد يتم تحويل قيم السلسلة إلى أنواع أخرى باستخدام تعبيرات CAST. قد يتم تحويل القيم ضمنيا إلى أنواع أخرى اعتمادا على السياق. لمزيد من المعلومات، راجع أسبقية نوع البيانات (Transact-SQL).

التعبيرات

الحقول المرجعية

بالنسبة إلى البيانات المنسقة بواسطة JSON، أو البيانات المنسقة بتنسيق CSV مع صف رأس، قد تتم الإشارة إلى الحقول بالاسم. يمكن اقتباس أسماء الحقول أو إلغاء تحديدها. أسماء الحقول المقتبسة محاطة بأحرف اقتباس مزدوجة (")، وقد تحتوي على مسافات، وهي حساسة لحالة الأحرف. أسماء الحقول غير المدرجة غير حساسة لحالة الأحرف، وقد لا تحتوي على أي أحرف خاصة.

في البيانات المنسقة بتنسيق CSV، قد تتم الإشارة إلى الحقول أيضا حسب الترتيبي، مسبوقة بحرف (_) تسطير أسفل السطر. على سبيل المثال، قد تتم الإشارة إلى الحقل الأول ك _1، أو قد تتم الإشارة إلى الحقل الحادي عشر على أنه _11. تعد الإشارة إلى الحقول حسب الترتيب مفيدة للبيانات المنسقة بواسطة CSV التي لا تحتوي على صف رأس، وفي هذه الحالة تكون الطريقة الوحيدة للإشارة إلى حقل معين حسب الترتيب.

العوامل

يتم دعم عوامل تشغيل SQL القياسية التالية:

المشغل وصف
= مقارنة المساواة بين تعبيرين (عامل المقارنة).
!= اختبار ما إذا كان أحد التعبيرات لا يساوي تعبيرا آخر (عامل مقارنة).
<> مقارنة تعبيرين ل لا يساوي (عامل المقارنة).
< مقارنة تعبيرين لأقل من (عامل مقارنة).
<= مقارنة تعبيرين لأقل من أو يساوي (عامل المقارنة).
> مقارنة تعبيرين لأكبر من (عامل المقارنة).
>= مقارنة تعبيرين لأكبر من أو يساوي (عامل المقارنة).
+ إضافة رقمين. يمكن أيضا لعامل التشغيل الحسابي الإضافة هذا إضافة رقم، بالأيام، إلى تاريخ.
- طرح رقمين (عامل تشغيل طرح حسابي).
/ يقسم رقما واحدا على آخر (عامل تشغيل قسمة حسابية).
* ضرب تعبيرين (عامل ضرب حسابي).
% إرجاع باقي رقم مقسوما على رقم آخر.
AND تنفيذ عملية AND منطقية بت بين قيمتين صحيحتين.
OR تنفيذ عملية OR منطقية بت بين قيمتين صحيحتين محددتين كما تمت ترجمتها إلى تعبيرات ثنائية داخل عبارات Transact-SQL.
NOT ينفي إدخال منطقي.
CAST تحويل تعبير من نوع بيانات إلى آخر.
BETWEEN تحديد نطاق للاختبار.
IN تحديد ما إذا كانت القيمة المحددة تطابق أي قيمة في الاستعلام الفرعي أو القائمة.
NULLIF إرجاع قيمة فارغة إذا كان التعبيران المحددان متساويين.
COALESCE تقييم الوسيطات بالترتيب وإرجاع القيمة الحالية للتعبير الأول الذي لا يتم تقييمه في البداية إلى NULL.

إذا كانت أنواع البيانات على يسار عامل التشغيل ويساره مختلفة، إجراء التحويل التلقائي وفقا للقواعد المحددة هنا: أسبقية نوع البيانات (Transact-SQL).

تدعم لغة SQL لتسريع الاستعلام مجموعة فرعية صغيرة جدا فقط من أنواع البيانات التي تمت مناقشتها في تلك المقالة. راجع قسم أنواع البيانات في هذه المقالة.

يلقي

تدعم لغة SQL لتسريع الاستعلام عامل تشغيل CAST، وفقا للقواعد هنا: تحويل نوع البيانات (مشغل قاعدة البيانات).

تدعم لغة SQL لتسريع الاستعلام مجموعة فرعية صغيرة فقط من أنواع البيانات التي تمت مناقشتها في تلك المقالة. راجع قسم أنواع البيانات في هذه المقالة.

دالات السلسلة

تدعم لغة SQL لتسريع الاستعلام دالات سلسلة SQL القياسية التالية:

الدالة وصف
CHAR_LENGTH إرجاع الطول بالأحرف لتعبير السلسلة، إذا كان تعبير السلسلة من نوع بيانات حرف؛ وإلا، فترجع الطول بالبايت لتعبير السلسلة (أصغر عدد صحيح لا يقل عن عدد البتات مقسوما على 8). (هذه الدالة هي نفس الدالة CHARACTER_LENGTH.)
CHARACTER_LENGTH إرجاع الطول بالأحرف لتعبير السلسلة، إذا كان تعبير السلسلة من نوع بيانات حرف؛ وإلا، فترجع الطول بالبايت لتعبير السلسلة (أصغر عدد صحيح لا يقل عن عدد البتات مقسوما على 8). (هذه الدالة هي نفس الدالة CHAR_LENGTH
أوطأ إرجاع تعبير حرف بعد تحويل بيانات الأحرف الكبيرة إلى أحرف صغيرة.
أعلى إرجاع تعبير حرف مع تحويل بيانات الأحرف الصغيرة إلى أحرف كبيرة.
فرعيه إرجاع جزء من حرف أو ثنائي أو نص أو تعبير صورة في SQL Server.
اقتضب إزالة حرف المسافة char(32) أو الأحرف المحددة الأخرى من بداية السلسلة ونهايتها.
رئيسي إزالة حرف المسافة char(32) أو الأحرف المحددة الأخرى من بداية السلسلة.
زائده إزالة حرف المسافة char(32) أو الأحرف المحددة الأخرى من نهاية السلسلة.

فيما يلي بعض الأمثلة:

الدالة مثال نتيجة
CHARACTER_LENGTH SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTH SELECT CHAR_LENGTH(_1) from BlobStorage 1
أوطأ SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
أعلى SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
فرعيه SUBSTRING('123456789', 1, 5) 23456
اقتضب TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

دوال التاريخ

يتم دعم دوال تاريخ SQL القياسية التالية:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

حاليا، يتم تحويل كافة تنسيقات التاريخ IS08601 القياسية .

الدالة DATE_ADD

تدعم لغة SQL لتسريع الاستعلام السنة والشهر واليوم والساعة والدقيقة والثانية للدالة DATE_ADD .

أمثلة:

DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)

الدالة DATE_DIFF

تدعم لغة SQL لتسريع الاستعلام السنة والشهر واليوم والساعة والدقيقة والثانية للدالة DATE_DIFF .

DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00') 

الدالة EXTRACT

بالنسبة إلى EXTRACT بخلاف جزء التاريخ المدعوم للدالة DATE_ADD ، تدعم لغة SQL لتسريع الاستعلام timezone_hour timezone_minute كجزء من التاريخ.

أمثلة:

EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')

الدالة TO_STRING

أمثلة:

TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP),  'MMMM d, y')

يصف هذا الجدول السلاسل التي يمكنك استخدامها لتحديد تنسيق إخراج الدالة TO_STRING .

تنسيق السلسلة الإخراج
س س السنة بتنسيق رقمين - 1999 ك '99'
س السنة بتنسيق 4 أرقام
س س س س السنة بتنسيق 4 أرقام
M شهر من السنة - 1
ش ش صفر شهر مبطن - 01
ش ش ش الشهر المختصر من السنة - يناير
ش ش ش ش الشهر الكامل - مايو
d يوم من الشهر (1-31)
ي ي صفر يوم مضاف من الشهر (01-31)
ص AM أو PM
س ساعة من اليوم (1-12)
س س صفر ساعات من اليوم (01-12)
H ساعة من اليوم (0-23)
س س صفر ساعة مضاف من اليوم (00-23)
m دقيقة من الساعة (0-59)
د د صفر دقيقة مبطنة (00-59)
ث الثانية من الدقائق (0-59)
ث ث صفر ثانية مبطنة (00-59)
س كسر الثوان (0.1-0.9)
SS كسر الثوان (0.01-0.99)
SSS جزء من الثوان (0.001-0.999)
س الإزاحة بالساعات
XX أو XXXX الإزاحة بالساعات والدقائق (+0430)
XXX أو XXXXX الإزاحة بالساعات والدقائق (-07:00)
× الإزاحة بالساعات (7)
xx أو xxxx الإزاحة بالساعة والدقيقة (+0530)
Xxx أو xxxxx الإزاحة بالساعة والدقيقة (+05:30)

الدالة TO_TIMESTAMP

يتم دعم تنسيقات IS08601 فقط.

أمثلة:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

إشعار

يمكنك أيضا استخدام الدالة UTCNOW للحصول على وقت النظام.

تجميع التعبيرات

قد تحتوي عبارة SELECT على تعبير إسقاط واحد أو أكثر أو تعبير تجميعي واحد. يتم دعم التعبيرات التجميعية التالية:

تعبير وصف
COUNT(*) إرجاع عدد السجلات التي تطابق تعبير دالة التقييم.
COUNT(تعبير) إرجاع عدد السجلات التي يكون التعبير الخاص بها غير فارغ.
AVG (تعبير) إرجاع متوسط القيم غير الفارغة للتعبير.
MIN (تعبير) إرجاع الحد الأدنى للقيمة غير الفارغة للتعبير.
MAX(تعبير إرجاع الحد الأقصى للقيمة غير الفارغة للتعبير.
SUM(تعبير) إرجاع مجموع كافة القيم غير الفارغة للتعبير.

مفقود

IS MISSING عامل التشغيل هو الوحيد غير القياسي الذي تدعمه لغة SQL لتسريع الاستعلام. بالنسبة لبيانات JSON، إذا كان الحقل مفقودا من سجل إدخال معين، تقييم حقل IS MISSING التعبير إلى القيمة المنطقية true.

واصفات الجدول

بالنسبة لبيانات CSV، يكون اسم الجدول دائما BlobStorage. على سبيل المثال:

SELECT * FROM BlobStorage

بالنسبة لبيانات JSON، تتوفر خيارات إضافية:

SELECT * FROM BlobStorage[*].path

يسمح هذا بالاستعلامات عبر مجموعات فرعية من بيانات JSON.

بالنسبة إلى استعلامات JSON، يمكنك ذكر المسار في جزء من عبارة FROM. ستساعد هذه المسارات على تحليل المجموعة الفرعية من بيانات JSON. يمكن أن تشير هذه المسارات إلى قيم JSON Array و Object.

دعونا نأخذ مثالا لفهم هذا بمزيد من التفصيل.

هذه هي بيانات العينة الخاصة بنا:

{
  "id": 1,
  "name": "mouse",
  "price": 12.5,
  "tags": [
    "wireless",
    "accessory"
  ],
  "dimensions": {
    "length": 3,
    "width": 2,
    "height": 2
  },
  "weight": 0.2,
  "warehouses": [
    {
      "latitude": 41.8,
      "longitude": -87.6
    }
  ]
}

قد تكون مهتما فقط بكائن warehouses JSON من البيانات أعلاه. warehouses الكائن هو نوع صفيف JSON، لذلك يمكنك ذكر ذلك في عبارة FROM. يمكن أن يبدو نموذج الاستعلام الخاص بك مثل هذا.

SELECT latitude FROM BlobStorage[*].warehouses[*]

يحصل الاستعلام على جميع الحقول ولكنه يحدد خط العرض فقط.

إذا أردت الوصول إلى قيمة كائن JSON فقط dimensions ، يمكنك استخدام الإشارة إلى هذا الكائن في الاستعلام الخاص بك. على سبيل المثال:

SELECT length FROM BlobStorage[*].dimensions

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

SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]

إشعار

يشير كل من BlobStorage وBlobStorage[*] إلى الكائن بأكمله. ومع ذلك، إذا كان لديك مسار في عبارة FROM، فستحتاج إلى استخدام BlobStorage[*].path

Sys.Split

هذا شكل خاص من عبارة SELECT، والذي يتوفر فقط للبيانات المنسقة بواسطة CSV.

SELECT sys.split(split_size) FROM BlobStorage

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

استخدم المعلمة split_size لتحديد عدد وحدات البايت التي تريد أن تحتوي عليها كل دفعة. على سبيل المثال، إذا كنت تريد معالجة 10 ميغابايت فقط من البيانات في كل مرة، فستبدو العبارة كما يلي: SELECT sys.split(10485760)FROM BlobStorage لأن 10 ميغابايت تساوي 10,485,760 بايت. ستحتوي كل دفعة على العديد من السجلات التي يمكن احتواؤها في تلك ال 10 ميغابايت.

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

إشعار

يجب أن يكون split_size 10 ميغابايت على الأقل (10485760).

(راجع أيضًا )