Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

إدراج بيانات SQL وتفريغها في ClickHouse

يمكن دمج ClickHouse بسهولة في البنى التحتية لقواعد بيانات OLTP بطرق عديدة. ومن بين هذه الطرق نقل البيانات بين قواعد البيانات الأخرى وClickHouse باستخدام تفريغات SQL.

إنشاء تفريغات SQL

يمكن إنشاء تفريغات SQL للبيانات بتنسيق SQL باستخدام SQLInsert. سيكتب ClickHouse البيانات بصيغة INSERT INTO <table name> VALUES(... وسيستخدم خيار الإعداد output_format_sql_insert_table_name كاسمٍ للجدول:

SET output_format_sql_insert_table_name = 'some_table';
SELECT * FROM some_data
INTO OUTFILE 'dump.sql'
FORMAT SQLInsert

يمكن الاستغناء عن أسماء الأعمدة بتعطيل الخيار output_format_sql_insert_include_column_names:

SET output_format_sql_insert_include_column_names = 0

الآن يمكننا إدخال ملف dump.sql إلى قاعدة بيانات OLTP أخرى:

mysql some_db < dump.sql

نفترض أن جدول some_table موجود في قاعدة بيانات MySQL ‏some_db.

قد تفرض بعض نظم إدارة قواعد البيانات حدودًا على عدد القيم التي يمكن معالجتها ضمن دفعة واحدة. افتراضيًا، ينشئ ClickHouse دفعات من 65 ألف قيمة، ولكن يمكن تغيير ذلك باستخدام الخيار output_format_sql_insert_max_batch_size:

SET output_format_sql_insert_max_batch_size = 1000;

تصدير مجموعة من القيم

يوفّر ClickHouse تنسيق Values، وهو مشابه لـ SQLInsert، لكنه يحذف الجزء INSERT INTO table VALUES ويُرجع القيم فقط:

SELECT * FROM some_data LIMIT 3 FORMAT Values
('Bangor_City_Forest','2015-07-01',34),('Alireza_Afzal','2017-02-01',24),('Akhaura-Laksam-Chittagong_Line','2015-09-01',30)

إدراج البيانات من تفريغات SQL

لقراءة تفريغات SQL، يُستخدم MySQLDump:

SELECT *
FROM file('dump.sql', MySQLDump)
LIMIT 5
┌─path───────────────────────────┬──────month─┬─hits─┐
│ Bangor_City_Forest             │ 2015-07-01 │   34 │
│ Alireza_Afzal                  │ 2017-02-01 │   24 │
│ Akhaura-Laksam-Chittagong_Line │ 2015-09-01 │   30 │
│ 1973_National_500              │ 2017-10-01 │   80 │
│ Attachment                     │ 2017-09-01 │ 1356 │
└────────────────────────────────┴────────────┴──────┘

افتراضيًا، يتخطّى ClickHouse الأعمدة غير المعروفة (ويتحكّم في ذلك الخيار input_format_skip_unknown_fields)، ويعالج البيانات لأول جدول يُعثر عليه في ملف تفريغ (إذا جرى تفريغ عدة جداول في ملف واحد). وسيتم تخطّي عبارات DDL. لتحميل البيانات من ملف تفريغ MySQL إلى جدول (ملف mysql.sql):

INSERT INTO some_data
FROM INFILE 'mysql.sql' FORMAT MySQLDump

يمكننا أيضًا إنشاء جدول تلقائيًا من ملف تفريغ MySQL:

CREATE TABLE table_from_mysql
ENGINE = MergeTree
ORDER BY tuple() AS
SELECT *
FROM file('mysql.sql', MySQLDump)

أنشأنا هنا جدولًا باسم table_from_mysql بالاستناد إلى بنية استنتجها ClickHouse تلقائيًا. ويحدّد ClickHouse الأنواع إما استنادًا إلى البيانات أو باستخدام DDL عند توفره:

DESCRIBE TABLE table_from_mysql;
┌─name──┬─type─────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ path  │ Nullable(String) │              │                    │         │                  │                │
│ month │ Nullable(Date32) │              │                    │         │                  │                │
│ hits  │ Nullable(UInt32) │              │                    │         │                  │                │
└───────┴──────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘

تنسيقات أخرى

يدعم ClickHouse العديد من التنسيقات، النصية والثنائية، لتلبية سيناريوهات ومنصات متنوعة. استكشف المزيد من التنسيقات وطرق العمل معها في المقالات التالية:

واطّلع أيضًا على clickhouse-local — وهي أداة محمولة كاملة الميزات للعمل مع الملفات المحلية/البعيدة دون الحاجة إلى ClickHouse server.

Navigation