Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

تهيئة الوضع غير المرتب للإدخال المستمر

بشكل افتراضي، يفترض GCS ClickPipe أن الملفات تُضاف إلى الحاوية وفق الترتيب المعجمي. ويمكن تهيئة GCS ClickPipe لإدخال الملفات التي لا تتبع ترتيبًا ضمنيًا من خلال إعداد اشتراك Google Cloud Pub/Sub متصل بالحاوية. يتيح ذلك لـ ClickPipes الاستماع إلى إشعارات OBJECT_FINALIZE وإدخال أي ملفات جديدة بغض النظر عن اصطلاح تسمية الملفات.

كيف يعمل

في هذا الوضع، يُجري GCS ClickPipe تحميلًا أوليًا لكل الملفات الموجودة في المسار المحدد، ثم يستمع إلى إشعارات الكائنات عبر اشتراك Pub/Sub التي تطابق هذا المسار. سيتم تجاهل أي رسالة تخص ملفًا سبق اكتشافه، أو ملفًا لا يطابق المسار، أو حدثًا من نوع مختلف.

لإدخال الملفات التي تصل عبر الاشتراك فقط، فعّل تخطي التحميل الأولي. عند تفعيله، يتخطى ClickPipes الفحص الأولي للملفات الموجودة في المسار المحدد ويعالج فقط الملفات التي تصل عبر اشتراك Pub/Sub.

قد تحدث أنواع مختلفة من الإخفاقات أثناء إدخال البيانات، ما قد يؤدي إلى عمليات insert جزئية أو إلى بيانات مكررة. يتميز Object Storage ClickPipes بالقدرة على التعامل مع إخفاقات insert ويوفر دلالات exactly-once باستخدام جداول مرحلية مؤقتة. تُدرج البيانات أولًا في جدول مرحلي؛ وإذا حدث خطأ ما، يُفرَّغ الجدول المرحلي وتُعاد محاولة insert من حالة نظيفة. ولا تُنقل partitions إلى الجدول الهدف إلا بعد اكتمال عملية insert بنجاح.

أنشئ topic في Google Cloud Pub/Sub

1. في Google Cloud Console، انتقل إلى Pub/Sub > Topics > Create topic. أنشئ topic جديدًا مع اشتراك افتراضي، ودوّن اسم الـ Topic.

2. اضبط إشعارًا لحاوية GCS ينشر أحداث OBJECT_FINALIZE إلى topic في Pub/Sub الذي أنشأته أعلاه.

2.1. لا يمكن تنفيذ هذه الخطوة من خلال Google Cloud Console، لذلك يجب استخدام عميل gcloud أو واجهتك البرمجية المفضلة لـ Google Cloud. على سبيل المثال، باستخدام gcloud:

# Create a Pub/Sub notification for new objects in the bucket
gcloud storage buckets notifications create "gs://${YOUR_BUCKET_NAME}" \
  --topic="projects/${YOUR_PROJECT_ID}/topics/${YOUR_TOPIC_NAME}" \
  --event-types="OBJECT_FINALIZE" \
  --payload-format="json"

# List the Pub/Sub notifications in the bucket
gcloud storage buckets notifications describe

اضبط حساب خدمة

1. اضبط حساب خدمة مع الأذونات المطلوبة للسماح لـ ClickPipes بسرد الكائنات وجلبها من الحاوية المحددة، وكذلك باستهلاك الإشعارات من اشتراك Pub/Sub ومراقبتها.

1.1. يمكن تنفيذ هذه الخطوة في Google Cloud Console، أو باستخدام عميل gcloud، أو عبر واجهتك البرمجية المفضلة لـ Google Cloud. على سبيل المثال، باستخدام gcloud:

# 1. Grant read access to the GCS bucket
gcloud storage buckets add-iam-policy-binding "gs://${YOUR_BUCKET_NAME}" \
  --member="serviceAccount:${YOUR_SERVICE_ACCOUNT}@${YOUR_PROJECT_ID}.iam.gserviceaccount.com" \
  --role="roles/storage.objectViewer"

# 2. Grant read access to the Pub/Sub subscription
gcloud pubsub subscriptions add-iam-policy-binding "${YOUR_SUBSCRIPTION_NAME}" \
  --member="serviceAccount:${YOUR_SERVICE_ACCOUNT}@${YOUR_PROJECT_ID}.iam.gserviceaccount.com" \
  --role="roles/pubsub.subscriber"

# 3. Grant permission to get the Pub/Sub subscription metadata
gcloud pubsub subscriptions add-iam-policy-binding "${YOUR_SUBSCRIPTION_NAME}" \
  --member="serviceAccount:${YOUR_SERVICE_ACCOUNT}@${YOUR_PROJECT_ID}.iam.gserviceaccount.com" \
  --role="roles/pubsub.viewer"

أنشئ ClickPipe باستخدام الوضع غير المرتب

1. في ClickHouse Cloud console، انتقل إلى Data Sources > Create ClickPipe واختر Google Cloud Storage. أدخل التفاصيل اللازمة للاتصال بحاوية GCS الخاصة بك. ضمن Authentication method، اختر حساب خدمة وقدّم مفتاح حساب الخدمة بصيغة .json.

2. فعّل الإدخال المستمر، ثم اختر Any order بوصفه وضع الإدخال، وقدّم اسم اشتراك Pub/Sub للاشتراك المتصل بحاويتك. لمعالجة الملفات من الاشتراك فقط وتخطي الفحص الأولي للملفات الموجودة في المسار المحدد، فعّل تخطي التحميل الأولي. يجب أن يُستخدم الاشتراك حصريًا بواسطة ClickPipe هذا — راجع أنشئ topic في Google Cloud Pub/Sub. يجب أن يستخدم اسم الاشتراك التنسيق التالي:

projects/${YOUR_PROJECT_ID}/subscriptions/${YOUR_SUBSCRIPTION_NAME}

3. انقر على Incoming data. حدّد Sorting key للجدول الهدف. أجرِ أي تعديلات لازمة على schema المعيّن، ثم اضبط role لمستخدم قاعدة البيانات الخاص بـ ClickPipes.

4. راجع configuration وانقر على Create ClickPipe. ما لم يكن Skip initial load مفعّلًا، سيُجري ClickPipes فحصًا أوليًا لحاويتك لتحميل جميع الملفات الموجودة التي تطابق المسار المحدد، ثم سيبدأ في معالجة الملفات عند تسليم أحداث OBJECT_FINALIZE المطابقة من الاشتراك.

Navigation