(c1, c2, c3). يمكنك أيضًا استخدام تعبير مع مُطابِق الأعمدة مثل * و/أو مُعدِّلات مثل APPLY وEXCEPT وREPLACE.
على سبيل المثال، لننظر إلى الجدول التالي:
b، يمكنك القيام بذلك باستخدام الكلمة المفتاحية EXCEPT. وبالاستناد إلى الصياغة أعلاه، ستحتاج إلى التأكد من إدراج عدد من القيم (VALUES (v11, v13)) يساوي عدد الأعمدة التي تحددها ((c1, c3)) :
a وc من القيم المُمرَّرة، بينما مُلِئ العمود b بالقيمة الافتراضية. كما يمكن أيضًا استخدام الكلمة المفتاحية DEFAULT لإدراج قيم افتراضية:
- القيم المحسوبة من تعبيرات
DEFAULTالمحددة في تعريف الجدول. - الأصفار والسلاسل النصية الفارغة إذا لم تكن تعبيرات
DEFAULTمعرّفة.
INSERT ... VALUES:
إذا أردت تحديد
SETTINGS لاستعلام INSERT، فعليك فعل ذلك قبل عبارة FORMAT لأن كل ما يأتي بعد FORMAT format_name يُعامل على أنه بيانات. على سبيل المثال:القيود
التحقق من صحة أنواع البيانات
enable_time_time64_type وallow_suspicious_low_cardinality_types وallow_suspicious_fixed_string_types وغيرها) فقط عند إنشاء الجدول (CREATE TABLE) وتعديل المخطط (ALTER TABLE)، وليس أثناء INSERT.
وهذا يعني أنه إذا كان هناك جدول أُنشئ مسبقًا ويحتوي على نوع بيانات غير مسموح به، فلا يزال بالإمكان إدراج البيانات فيه حتى إذا كان الإعداد المقابل معطّلًا على الخادم. وهذا سلوك مقصود — فبعد إنشاء الجدول، يجب ألا تُمنع عمليات الإدراج بسبب إعدادات تتحكم في إنشاء الأنواع.
على سبيل المثال:
ونتيجة لذلك، يمكن لعميل يعمل بإصدار أحدث (حيث يكون أحد الإعدادات مفعّلًا افتراضيًا) أن يُدرج بيانات ذات أنواع بيانات غير مسموح بها في خادم يعمل بإصدار أقدم (حيث يكون هذا الإعداد معطّلًا)، ما دام الجدول الهدف يحتوي بالفعل على أنواع الأعمدة المقابلة. ويُطبَّق هذا التحقق على مستوى DDL، وليس على مستوى DML.
إدراج نتائج SELECT
SELECT. ومع ذلك، قد تختلف أسماؤها بين تعبير SELECT والجدول المُستخدَم في INSERT. وإذا لزم الأمر، يُجرى تحويل النوع.
لا يسمح أيٌّ من تنسيقات البيانات، باستثناء تنسيق Values، باستخدام تعبيرات كقيم مثل now() و1 + 2 وما إلى ذلك. ويتيح تنسيق Values استخدامًا محدودًا للتعبيرات، لكن لا يُنصح بذلك، لأن تنفيذها في هذه الحالة يعتمد على كود غير فعّال.
الاستعلامات الأخرى التي تعدّل أجزاء البيانات غير مدعومة: UPDATE وDELETE وREPLACE وMERGE وUPSERT وINSERT UPDATE.
ومع ذلك، يمكنك حذف البيانات القديمة باستخدام ALTER TABLE ... DROP PARTITION.
يجب تحديد عبارة FORMAT في نهاية الاستعلام إذا كانت عبارة SELECT تتضمن دالة الجدول input().
لإدراج قيمة افتراضية بدلًا من NULL في عمود ذي نوع بيانات غير قابل لـ NULL، فعِّل الإعداد insert_null_as_default.
يدعم INSERT أيضًا CTE (تعبير الجدول الشائع). على سبيل المثال، العبارتان التاليتان متكافئتان:
إدراج البيانات من ملف
file_name وtype هما قيمتان حرفيتان نصّيتان. يجب تحديد format لملف الإدخال في عبارة FORMAT.
الملفات المضغوطة مدعومة. يُكتشف نوع الضغط من امتداد اسم الملف، أو يمكن تحديده صراحةً في عبارة COMPRESSION. الأنواع المدعومة هي: 'none', 'gzip', 'deflate', 'br', 'xz', 'zstd', 'lz4', 'bz2'.
تتوفر هذه الإمكانية في عميل سطر الأوامر وclickhouse-local.
أمثلة
ملف واحد باستخدام FROM INFILE
Query
Response
ملفات متعددة مع FROM INFILE باستخدام أنماط glob
FROM INFILE 'input_*.csv.
الإدراج باستخدام دالة جدول
Query
Response
الإدراج في ClickHouse Cloud
INSERT، تُكتَب البيانات إلى التخزين الأساسي. ومع ذلك، قد يستغرق وصول هذه التحديثات إلى النُسخ المتماثلة بعض الوقت. لذلك، إذا استخدمت اتصالًا مختلفًا ينفّذ استعلام SELECT على إحدى هذه النُسخ المتماثلة الأخرى، فقد لا تظهر البيانات المحدَّثة بعد.
يمكن استخدام select_sequential_consistency لإجبار النسخة المتماثلة على تلقّي أحدث التحديثات. في ما يلي مثال على استعلام SELECT يستخدم هذا الإعداد:
select_sequential_consistency يزيد العبء على ClickHouse Keeper (الذي يستخدمه ClickHouse Cloud داخليًا)، وقد يؤدي إلى تباطؤ الأداء تبعًا لمقدار الحمل على الخدمة. لا نوصي بتمكين هذا الإعداد إلا عند الضرورة. والنهج الموصى به هو تنفيذ عمليات القراءة والكتابة ضمن الجلسة نفسها، أو استخدام برنامج تشغيل عميل يعتمد البروتوكول الأصلي (وبذلك يدعم الاتصالات المثبّتة).
الإدراج في إعداد يعتمد النسخ المتماثل
INSERT. ويختلف هذا عن ClickHouse Cloud، حيث تُكتب البيانات فورًا إلى التخزين المشترك، وتتابع النسخ المتماثلة تغييرات البيانات الوصفية.
لاحظ أنه في الإعدادات التي تعتمد النسخ المتماثل، قد تستغرق عمليات INSERTs أحيانًا وقتًا ملحوظًا (في حدود ثانية واحدة)، لأنها تتطلب تنفيذ commit في ClickHouse Keeper لتحقيق التوافق الموزّع. كما أن استخدام S3 للتخزين يضيف زمن استجابة إضافيًا.
اعتبارات الأداء
INSERT بفرز بيانات الإدخال حسب المفتاح الأساسي وتقسيمها إلى تقسيمات وفقًا لمفتاح التقسيم. إذا أدخلت البيانات في عدة تقسيمات دفعةً واحدة، فقد يؤدي ذلك إلى انخفاض ملحوظ في أداء استعلام INSERT. لتجنب ذلك:
- أضِف البيانات على دفعات كبيرة نسبيًا، مثل 100,000 صف في كل مرة.
- اجمع البيانات حسب مفتاح التقسيم قبل تحميلها إلى ClickHouse.
- أُضيفت البيانات في الوقت الفعلي.
- حمّلت بيانات تكون عادةً مرتبة حسب الوقت.
الإدراجات غير المتزامنة
async_insert.
يؤدي استخدام async_insert أو محرك الجداول Buffer إلى إضافة تخزين مؤقت.
عمليات الإدراج الكبيرة أو طويلة التشغيل
max_insert_block_size صف.
انظر أيضًا