Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

العمل مع بيانات Avro وArrow وORC في ClickHouse

أصدرت Apache عدة تنسيقات بيانات تُستخدم على نطاق واسع في بيئات التحليلات، من بينها Avro وArrow وOrc. ويدعم ClickHouse استيراد البيانات وتصديرها باستخدام أيٍّ من هذه التنسيقات.

الاستيراد والتصدير بتنسيق Avro

يدعم ClickHouse قراءة ملفات بيانات Apache Avro وكتابتها، وهي تُستخدم على نطاق واسع في أنظمة Hadoop.

للاستيراد من ملف Avro، ينبغي استخدام تنسيق Avro في تعليمة INSERT:

INSERT INTO sometable
FROM INFILE 'data.avro'
FORMAT Avro

باستخدام الدالة file()، يمكننا أيضًا معاينة ملفات Avro قبل استيراد البيانات فعليًا:

SELECT path, hits
FROM file('data.avro', Avro)
ORDER BY hits DESC
LIMIT 5;
┌─path────────────┬──hits─┐
│ Amy_Poehler     │ 62732 │
│ Adam_Goldberg   │ 42338 │
│ Aaron_Spelling  │ 25128 │
│ Absence_seizure │ 18152 │
│ Ammon_Bundy     │ 11890 │
└─────────────────┴───────┘

للتصدير إلى ملف Avro:

SELECT * FROM sometable
INTO OUTFILE 'export.avro'
FORMAT Avro;

أنواع بيانات Avro وClickHouse

راجِع مطابقة أنواع البيانات عند استيراد ملفات Avro أو تصديرها. استخدم التحويل الصريح للأنواع عند تحميل البيانات من ملفات Avro:

SELECT
    date,
    toDate(date)
FROM file('data.avro', Avro)
LIMIT 3;
┌──date─┬─toDate(date)─┐
│ 16556 │   2015-05-01 │
│ 16556 │   2015-05-01 │
│ 16556 │   2015-05-01 │
└───────┴──────────────┘

رسائل Avro في Kafka

عندما تكون رسائل Kafka بتنسيق Avro، يمكن لـ ClickHouse قراءة مثل هذه التدفقات باستخدام تنسيق AvroConfluent ومحرك Kafka:

CREATE TABLE some_topic_stream
(
    field1 UInt32,
    field2 String
)
ENGINE = Kafka() SETTINGS
kafka_broker_list = 'localhost',
kafka_topic_list = 'some_topic',
kafka_group_name = 'some_group',
kafka_format = 'AvroConfluent';

العمل مع تنسيق Arrow

تنسيق عمودي آخر هو Apache Arrow، ويدعمه ClickHouse أيضًا في الاستيراد والتصدير. ولاستيراد البيانات من ملف Arrow، نستخدم تنسيق Arrow:

INSERT INTO sometable
FROM INFILE 'data.arrow'
FORMAT Arrow

يتم التصدير إلى ملف Arrow بالطريقة نفسها:

SELECT * FROM sometable
INTO OUTFILE 'export.arrow'
FORMAT Arrow

راجع أيضًا مطابقة أنواع البيانات لمعرفة ما إذا كان ينبغي تحويل أي منها يدويًا.

بث بيانات Arrow

يمكن استخدام تنسيق ArrowStream للعمل مع Arrow streaming (المستخدم في المعالجة داخل الذاكرة). ويمكن لـ ClickHouse قراءة تدفقات Arrow وكتابتها.

ولتوضيح كيفية بث ClickHouse لبيانات Arrow، فلنمررها إلى برنامج بايثون النصي التالي (إذ يقرأ تدفق الإدخال بتنسيق Arrow streaming ويُخرج النتيجة على شكل جدول Pandas):

import sys, pyarrow as pa

with pa.ipc.open_stream(sys.stdin.buffer) as reader:
  print(reader.read_pandas())

يمكننا الآن تمرير البيانات من ClickHouse عبر توجيه مخرجاته إلى البرنامج النصي:

clickhouse-client -q "SELECT path, hits FROM some_data LIMIT 3 FORMAT ArrowStream" | python3 arrow.py
                           path  hits
0       b'Akiba_Hebrew_Academy'   241
1           b'Aegithina_tiphia'    34
2  b'1971-72_Utah_Stars_season'     1

يمكن لـ ClickHouse أيضًا قراءة تدفقات Arrow باستخدام تنسيق ArrowStream ذاته:

arrow-stream | clickhouse-client -q "INSERT INTO sometable FORMAT ArrowStream"

استخدمنا arrow-stream بوصفه مصدرًا محتملًا لبيانات Arrow المتدفقة.

استيراد وتصدير بيانات ORC

يُعد تنسيق Apache ORC تنسيقَ تخزينٍ عموديًا يُستخدم عادةً مع Hadoop. يدعم ClickHouse استيراد بيانات ORC وتصديرها باستخدام تنسيق ORC:

SELECT *
FROM sometable
INTO OUTFILE 'data.orc'
FORMAT ORC;

INSERT INTO sometable
FROM INFILE 'data.orc'
FORMAT ORC;

راجع أيضًا مطابقة أنواع البيانات وإعدادات إضافية لضبط التصدير والاستيراد.

لمزيد من القراءة

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

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

Navigation