تحليل الاستعلام
- محلِّل SQL كامل (محلِّل تنازلي تكراري).
- محلِّل تنسيق البيانات (محلِّل تدفّق سريع).
INSERT، إذ يستخدم هذا الاستعلام كلا المحلِّلين.
لنستعرض الاستعلام أدناه:
INSERT كلا المحلّلين.
يُحلَّل الجزء INSERT INTO t VALUES بواسطة المحلّل الكامل،
وتُحلَّل البيانات (1, 'Hello, world'), (2, 'abc'), (3, 'def') بواسطة محلّل تنسيق البيانات، أو محلّل التدفق السريع.
تشغيل المحلّل الكامل
تشغيل المحلّل الكامل
يمكنك أيضًا تشغيل المحلّل الكامل للبيانات
باستخدام الإعداد
input_format_values_interpret_expressions.عندما تكون قيمة الإعداد المذكور أعلاه 1،
يحاول ClickHouse أولًا تحليل القيم باستخدام محلّل التدفق السريع.
وإذا أخفق ذلك، يحاول ClickHouse استخدام المحلّل الكامل للبيانات، مع التعامل معها كتعبير SQL expression.INSERT الكبيرة، وهي الطريقة الموصى بها لإدراج بياناتك في ClickHouse.
عند استخدام تنسيق Values في استعلام INSERT،
قد يبدو أن البيانات تُحلَّل بالطريقة نفسها كما في التعبيرات ضمن استعلام SELECT، لكن الأمر ليس كذلك.
فتنسيق Values أكثر محدوديةً بكثير.
يغطي ما تبقّى من هذا القسم المحلّل الكامل.
لمزيد من المعلومات حول محلّلات التنسيقات، راجع قسم التنسيقات.
المسافات
- يمكن أن يوجد أي عدد من محارف المسافات بين التركيبات النحوية (بما في ذلك في بداية الاستعلام ونهايته).
- تشمل محارف المسافات: المسافة، وعلامة الجدولة، وتغذية السطر، وCR، وتغذية الصفحة.
التعليقات
- تبدأ التعليقات بنمط SQL بـ
--أو#!أو#وتستمر حتى نهاية السطر. ويمكن حذف المسافة بعد--و#!. - التعليقات بنمط C:
//(أو أكثر من حرفي/) متبوعًا بنص حتى نهاية السطر. ولا يُشترط وجود مسافات بعد/.- يمكن أن تمتد من
/*إلى*/في التعليقات متعددة الأسطر. ولا تُشترط المسافات هنا أيضًا. - يمكن أن تكون التعليقات بنمط C متداخلة.
الكلمات المفتاحية
- معيار SQL. على سبيل المثال،
SELECTوselectوSeLeCtكلها صيغ صحيحة. - طريقة التنفيذ في بعض أنظمة إدارة قواعد البيانات الشائعة (MySQL أو Postgres). على سبيل المثال،
DateTimeهو نفسهdatetime.
يمكنك التحقق مما إذا كان اسم نوع البيانات حساسًا لحالة الأحرف في جدول system.data_type_families.
backticks.
على سبيل المثال، يكون الاستعلام التالي صالحًا إذا كان الجدول table_name يحتوي على عمود اسمه "FROM":
المعرّفات
- أسماء العناقيد، وقواعد البيانات، والجداول، والتقسيمات، والأعمدة.
- الدوال.
- أنواع البيانات.
- الأسماء المستعارة للتعبيرات.
^[a-zA-Z_][0-9a-zA-Z_]*$، ولا يجوز أن تطابق الكلمات المفتاحية.
راجع الجدول أدناه للاطلاع على أمثلة للمعرّفات الصالحة وغير الصالحة:
| المعرّفات الصالحة | المعرّفات غير الصالحة |
|---|---|
xyz, _internal, Id_with_underscores_123_ | 1x, tom@gmail.com, äußerst_schön |
"id"، `id`.
تنطبق قواعد محارف الهروب نفسها في المعرّفات المقتبسة أيضًا على القيم النصية الحرفية. راجع String لمزيد من التفاصيل.
القيم الحرفية
String
- استخدام علامة اقتباس مفردة سابقة، إذ لا يمكن تهريب محرف علامة الاقتباس المفردة
'(وهذا المحرف فقط) إلا على هيئة''، أو - استخدام الشرطة المائلة العكسية السابقة مع تسلسلات الهروب المدعومة التالية والمُدرجة في الجدول أدناه.
تفقد الشرطة المائلة العكسية معناها الخاص، أي تُفسَّر حرفيًا، إذا جاءت قبل محارف غير تلك المُدرجة أدناه.
| التهريب المدعوم | الوصف |
|---|---|
\xHH | تحديد محرف من 8 بت متبوع بأي عدد من الأرقام الست عشرية (H). |
\N | محجوز، ولا يفعل شيئًا (مثلًا SELECT 'a\Nb' تُرجع ab) |
\a | تنبيه |
\b | رجوع للخلف |
\e | محرف الهروب |
\f | فاصل صفحة |
\n | تغذية سطر |
\r | إرجاع العربة |
\t | علامة تبويب أفقية |
\v | علامة تبويب عمودية |
\0 | محرف NULL |
\\ | الشرطة المائلة العكسية |
\' (أو '') | علامة اقتباس مفردة |
\" | علامة اقتباس مزدوجة |
` | علامة الاقتباس الخلفية |
\/ | الشرطة المائلة الأمامية |
\= | علامة يساوي |
| محارف تحكم ASCII (c <= 31). |
في القيم الحرفية النصية، يجب تهريب
' و \ على الأقل باستخدام رموز الهروب \' (أو: '') و \\.القيم الحرفية العددية
- إذا كانت القيمة الحرفية مسبوقة بعلامة الطرح
-، فيُتخطى الرمز وتُطبَّق الإشارة السالبة على النتيجة بعد التحليل. - تُحلَّل القيمة الحرفية العددية أولًا كعدد صحيح غير موقَّع بعرض 64 بت، باستخدام الدالة strtoull.
- إذا كانت القيمة مسبوقة بـ
0bأو0x/0X، فيُحلَّل العدد كثنائي أو سداسي عشري، على التوالي. - إذا كانت القيمة سالبة وكان مقدارها المطلق أكبر من 263، فسيُعاد خطأ.
- إذا كانت القيمة مسبوقة بـ
- إذا لم ينجح ذلك، تُحلَّل القيمة بعد ذلك كعدد بفاصلة عائمة باستخدام الدالة strtod.
- بخلاف ذلك، يُعاد خطأ.
- يُحلَّل
1على أنهUInt8 - يُحلَّل
256على أنهUInt16.
مهميجب تحويل قيم الأعداد الصحيحة الأعرض من 64 بت (يؤدي ذلك إلى تجاوز الخوارزمية المذكورة أعلاه وتحليل العدد الصحيح باستخدام إجراء يدعم دقةً اعتباطية.وبخلاف ذلك، سيُحلَّل القيمة الحرفية كعدد بفاصلة عائمة، وبالتالي سيكون عرضةً لفقدان الدقة بسبب الاقتطاع.
UInt128, Int128, UInt256, Int256) إلى نوع أكبر لكي تُحلَّل بشكل صحيح:_ داخل القيم الحرفية العددية، ويمكن استخدامها لتحسين سهولة القراءة.
القيم الحرفية العددية التالية مدعومة:
| القيمة الحرفية العددية | أمثلة |
|---|---|
| الأعداد الصحيحة | 1, 10_000_000, 18446744073709551615, 01 |
| الأعداد العشرية | 0.1 |
| الترميز الأسي | 1e100, -1e-100 |
| أعداد الفاصلة العائمة | 123.456, inf, nan |
| سداسي عشري | 0xc0fe |
| سلسلة سداسية عشرية متوافقة مع معيار SQL | x'c0fe' |
| ثنائي | 0b1101 |
| سلسلة ثنائية متوافقة مع معيار SQL | b'1101' |
القيم الحرفية الثمانية غير مدعومة لتجنب الأخطاء غير المقصودة في التفسير.
المركّبات
[]: [1, 2, 3]. وتُنشأ الـ Tuples باستخدام (): (1, 'Hello, world!', 2).
من الناحية التقنية، لا تُعد هذه قيَمًا حرفية، بل هي تعبيرات تستخدم عامل إنشاء المصفوفة وعامل إنشاء الـ Tuple، على الترتيب.
يجب أن تتكوّن المصفوفة من عنصر واحد على الأقل، ويجب أن يتكوّن الـ Tuple من عنصرين على الأقل.
توجد حالة منفصلة عند ظهور الـ Tuples في بند
IN ضمن استعلام SELECT.
يمكن أن تتضمن نتائج الاستعلام Tuples، لكن لا يمكن حفظ الـ Tuples في قاعدة بيانات (باستثناء الجداول التي تستخدم محرك Memory).NULL
NULL للإشارة إلى أن قيمةً ما مفقودة.
ولتخزين NULL في حقل بجدول، يجب أن يكون هذا الحقل من النوع Nullable.
يجب الانتباه إلى ما يلي بشأن
NULL:- قد يختلف تمثيل
NULLبحسب تنسيق البيانات (إدخالًا أو إخراجًا). لمزيد من المعلومات، راجع تنسيقات البيانات. - إن معالجة
NULLلها بعض التفاصيل الدقيقة. فعلى سبيل المثال، إذا كانت إحدى وسيطات عملية المقارنة على الأقل هيNULL، فستكون نتيجة هذه العملية أيضًاNULL. وينطبق الأمر نفسه على الضرب والجمع وغير ذلك من العمليات. نوصي بقراءة التوثيق الخاص بكل عملية. - في الاستعلامات، يمكنك التحقق من
NULLباستخدام المعاملينIS NULLوIS NOT NULL، وكذلك الدالتين المرتبطتينisNullوisNotNull.
Heredoc
$.
على سبيل المثال:
- تُعالَج أي قيمة بين محدِّدَي Heredoc “كما هي”.
تعريف معلمات الاستعلام واستخدامها
SET param_<name>=<value>— باستخدام أمرSETداخل استعلام.--param_<name>='<value>'— كوسيطة لـclickhouse-clientفي سطر الأوامر.param_<name>=<value>— كمعلمة في سلسلة استعلام URL لواجهة HTTP.
{<name>: <datatype>}، حيث إن <name> هو اسم معلمة الاستعلام و<datatype> هو نوع البيانات الذي تُحوَّل إليه.
مثال باستخدام أمر SET
مثال باستخدام أمر SET
على سبيل المثال، يعرّف SQL التالي معلمات بأسماء
a وb وc وd، ولكل منها نوع بيانات مختلف:مثال باستخدام clickhouse-client
مثال باستخدام clickhouse-client
إذا كنت تستخدم إذا كانت معلمة الاستعلام تمثّل اسم database أو table أو function أو أي Identifier آخر، فاستخدم
clickhouse-client، فتُحدَّد المعلمات بصيغة --param_name=value. على سبيل المثال، تحمل المعلمة التالية الاسم message وتُسترجع كـ String:Identifier كنوع لها. على سبيل المثال، يعيد الاستعلام التالي rows من table اسمها uk_price_paid:مثال باستخدام واجهة HTTP
مثال باستخدام واجهة HTTP
يمكن تمرير معلمات الاستعلام كمعلمات في سلسلة استعلام URL مع البادئة
param_. على سبيل المثال:مثال باستخدام واجهة الويب
مثال باستخدام واجهة الويب
تكتشف واجهة الويب المضمّنة (
play.html) تلقائيًا العناصر النائبة للمعلمات بصيغة {name:Type} في الاستعلام، وتعرض حقول إدخال معنونة لكل معلمة. تُضمَّن قيم المعلمات في HTTP request، كما تُحفَظ أيضًا في URL الصفحة لأغراض وضع الإشارات المرجعية والمشاركة.ليست معلمات الاستعلام بدائل نصية عامة يمكن استخدامها في مواضع عشوائية ضمن استعلامات SQL كيفما اتفق.
فهي مُصمَّمة أساسًا للعمل داخل عبارات
SELECT بدلًا من المعرّفات أو القيم الحرفية.الدوال
()، وقد تكون هذه القائمة فارغة.
وعلى خلاف SQL القياسي، تكون الأقواس مطلوبة حتى عندما تكون قائمة الوسائط فارغة.
على سبيل المثال:
بنية الدوال التجميعية من دون معلمات هي نفسها بنية الدوال العادية.
المعاملات
أنواع البيانات ومحركات الجداول في قاعدة البيانات
CREATE بالطريقة نفسها التي تُكتب بها المعرّفات أو الدوال.
وبعبارة أخرى، قد تحتوي على قائمة وسائط بين أقواس، وقد لا تحتوي.
لمزيد من المعلومات، راجع الأقسام التالية:
التعبيرات
- دالة
- مُعرّف
- قيمة حرفية
- تطبيق معامل
- تعبير بين قوسين
- استعلام فرعي
- علامة النجمة
الأسماء المستعارة للتعبيرات
| جزء من الصياغة | الوصف | مثال | ملاحظات |
|---|---|---|---|
AS | الكلمة المفتاحية لتعريف الأسماء المستعارة. يمكنك تعريف الاسم المستعار لاسم جدول أو اسم عمود في عبارة SELECT من دون استخدام الكلمة المفتاحية AS. | SELECT table_name_alias.column_name FROM table_name table_name_alias. | في الدالة CAST، يكون للكلمة المفتاحية AS معنى آخر. راجع وصف الدالة. |
expr | أي تعبير يدعمه ClickHouse. | SELECT column_name * 2 AS double FROM some_table | |
alias | اسم لـ expr. يجب أن تتوافق الأسماء المستعارة مع صياغة المعرّفات. | SELECT "table t".column_name FROM table_name AS "table t". |
ملاحظات حول الاستخدام
- تسري الأسماء المستعارة على مستوى الاستعلام أو الاستعلام الفرعي بالكامل، ويمكنك تعريف اسم مستعار لأي تعبير في أي جزء من الاستعلام. على سبيل المثال:
- الأسماء المستعارة لا تكون مرئية داخل الاستعلامات الفرعية ولا فيما بينها. على سبيل المثال، عند تنفيذ الاستعلام التالي، يُرجع ClickHouse الاستثناء
Unknown identifier: num:
- إذا تم تعريف اسم مستعار لأعمدة النتيجة في عبارة
SELECTداخل استعلام فرعي، فستكون هذه الأعمدة مرئية في الاستعلام الخارجي. على سبيل المثال:
- انتبه إلى الأسماء المستعارة التي تطابق أسماء الأعمدة أو الجداول. لننظر إلى المثال التالي:
t بالعمود b.
ثم عند تحديد البيانات، عرّفنا الاسم المستعار sum(b) AS b.
ونظرًا لأن الأسماء المستعارة عامة النطاق،
استبدل ClickHouse الرمز b في التعبير argMax(a, b) بالتعبير sum(b).
وقد أدى هذا الاستبدال إلى حدوث الاستثناء.
يمكنك تغيير هذا السلوك الافتراضي بتعيين prefer_column_name_to_alias إلى
1.النجمة
SELECT، يمكن أن تحل النجمة محل التعبير.
لمزيد من المعلومات، راجع القسم SELECT.