الانتقال إلى المحتوى الرئيسي
هذا الدليل متوافق مع ClickHouse Cloud ومع ClickHouse المُستضاف ذاتيًا بالإصدار v23.5+. يوضح هذا الدليل كيفية ترحيل البيانات من BigQuery إلى ClickHouse. نبدأ بتصدير جدول إلى خدمة تخزين الكائنات من Google ‏(GCS)، ثم نستورد تلك البيانات إلى ClickHouse Cloud. يجب تكرار هذه الخطوات لكل جدول تريد تصديره من BigQuery إلى ClickHouse.

كم سيستغرق تصدير البيانات إلى ClickHouse؟

تعتمد مدة تصدير البيانات من BigQuery إلى ClickHouse على حجم مجموعة البيانات لديك. وللمقارنة، يستغرق تصدير مجموعة بيانات Ethereum العامة بحجم 4TB من BigQuery إلى ClickHouse باستخدام هذا الدليل حوالي ساعة.
الجدولعدد الصفوفالملفات المُصدَّرةحجم البياناتالتصدير من BigQueryزمن الـ Slotالاستيراد إلى ClickHouse
الكتل16,569,4897314.53GB23 secs37 min15.4 secs
المعاملات1,864,514,4145169957GB1 min 38 sec1 day 8hrs18 mins 5 secs
التتبعات6,325,819,30617,9852.896TB5 min 46 sec5 days 19 hr34 mins 55 secs
العقود57,225,83735045.35GB16 sec1 hr 51 min39.4 secs
الإجمالي8.26 billion23,5773.982TB8 min 3 sec> 6 days 5 hrs53 mins 45 secs
1

تصدير بيانات الجدول إلى GCS

في هذه الخطوة، نستخدم مساحة عمل BigQuery SQL لتنفيذ أوامر SQL. في المثال أدناه، نُصدّر جدولًا في BigQuery باسم mytable إلى حاوية GCS باستخدام عبارة EXPORT DATA.
DECLARE export_path STRING;
DECLARE n INT64;
DECLARE i INT64;
SET i = 0;

-- We recommend setting n to correspond to x billion rows. So 5 billion rows, n = 5
SET n = 100;

WHILE i < n DO
  SET export_path = CONCAT('gs://mybucket/mytable/', i,'-*.parquet');
  EXPORT DATA
    OPTIONS (
      uri = export_path,
      format = 'PARQUET',
      overwrite = true
    )
  AS (
    SELECT * FROM mytable WHERE export_id = i
  );
  SET i = i + 1;
END WHILE;
في الاستعلام أعلاه، نُصدِّر جدول BigQuery الخاص بنا إلى تنسيق بيانات Parquet. ولدينا أيضًا الحرف * في المعلمة uri. وهذا يضمن تقسيم الناتج إلى عدة ملفات، مع لاحقة رقمية متزايدة، إذا تجاوز التصدير 1GB من البيانات.لهذا النهج عدد من المزايا:
  • تتيح Google تصدير ما يصل إلى 50TB يوميًا إلى GCS مجانًا. ولا يدفع المستخدمون سوى مقابل تخزين GCS.
  • تُنتج عمليات التصدير ملفات متعددة تلقائيًا، مع تقييد كل ملف بحد أقصى قدره 1GB من بيانات الجدول. وهذا مفيد لـ ClickHouse لأنه يتيح تنفيذ عمليات الاستيراد بالتوازي.
  • يُعد Parquet، بوصفه تنسيقًا موجَّهًا بالأعمدة، تنسيقًا أفضل لتبادل البيانات لأنه مضغوط بطبيعته، كما أنه أسرع بالنسبة إلى BigQuery عند التصدير وClickHouse عند تنفيذ الاستعلامات
2

استيراد البيانات إلى ClickHouse من GCS

بمجرد اكتمال التصدير، يمكننا استيراد هذه البيانات إلى جدول في ClickHouse. يمكنك استخدام وحدة تحكم ClickHouse SQL أو clickhouse-client لتنفيذ الأوامر أدناه.يجب أولاً إنشاء الجدول في ClickHouse:
-- If your BigQuery table contains a column of type STRUCT, you must enable this setting
-- to map that column to a ClickHouse column of type Nested
SET input_format_parquet_import_nested = 1;

CREATE TABLE default.mytable
(
        `timestamp` DateTime64(6),
        `some_text` String
)
ENGINE = MergeTree
ORDER BY (timestamp);
بعد إنشاء الجدول، فعِّل الإعداد parallel_distributed_insert_select إذا كان لديك عدة نُسخ متماثلة من ClickHouse في الـcluster لتسريع عملية التصدير. وإذا كانت لديك عقدة ClickHouse واحدة فقط، فيمكنك تخطي هذه الخطوة:
SET parallel_distributed_insert_select = 1;
أخيرًا، يمكننا إدراج البيانات من GCS في جدول ClickHouse باستخدام أمر INSERT INTO SELECT، الذي يُدرج البيانات في جدول استنادًا إلى نتائج استعلام SELECT.لاسترجاع البيانات من أجل INSERT، يمكننا استخدام دالة s3Cluster لجلب البيانات من حاوية GCS، لأن GCS متوافق مع Amazon S3. إذا كانت لديك عقدة ClickHouse واحدة فقط، فيمكنك استخدام دالة الجدول S3 بدلًا من الدالة s3Cluster.
INSERT INTO mytable
SELECT
    timestamp,
    ifNull(some_text, '') AS some_text
FROM s3Cluster(
    'default',
    'https://storage.googleapis.com/mybucket/mytable/*.parquet.gz',
    '<ACCESS_ID>',
    '<SECRET>'
);
يمثل كلٌّ من ACCESS_ID وSECRET المستخدمَين في الاستعلام أعلاه مفتاح HMAC المرتبط بحاوية GCS الخاصة بك.
استخدم ifNull عند تصدير الأعمدة من النوع Nullableفي الاستعلام أعلاه، نستخدم الدالة ifNull مع العمود some_text لإدراج البيانات في جدول ClickHouse مع قيمة افتراضية. يمكنك أيضًا جعل أعمدتك في ClickHouse من النوع Nullable، لكن لا يُنصح بذلك لأنه قد يؤثر سلبًا في الأداء.بدلاً من ذلك، يمكنك ضبط SET input_format_null_as_default=1، وعندها ستُستبدل أي قيم مفقودة أو NULL بالقيم الافتراضية للأعمدة المقابلة، إذا كانت تلك القيم الافتراضية محددة.
3

اختبار نجاح تصدير البيانات

لاختبار ما إذا كانت بياناتك قد أُدرجت بشكل صحيح، ما عليك سوى تنفيذ استعلام SELECT على جدولك الجديد:
SELECT * FROM mytable LIMIT 10;
لتصدير المزيد من جداول BigQuery، ما عليك سوى تكرار الخطوات أعلاه لكل جدول إضافي.

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

إلى جانب هذا الدليل، نوصي أيضًا بقراءة تدوينة المدونة التي توضّح كيفية استخدام ClickHouse لتسريع BigQuery وكيفية التعامل مع عمليات الاستيراد المتزايدة. إذا كنت تواجه مشكلات في نقل البيانات من BigQuery إلى ClickHouse، فلا تتردد في التواصل معنا عبر support@clickhouse.com.
آخر تعديل في ٢٩ يونيو ٢٠٢٦