> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-revert-104359-revert-104251-parquet-single.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

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

> دليل خطوة بخطوة لتهيئة الوضع غير المرتب للإدخال المستمر في GCS ClickPipes.

بشكل افتراضي، يفترض GCS ClickPipe أن الملفات تُضاف إلى الحاوية وفق [الترتيب المعجمي](/ar/integrations/clickpipes/object-storage/google-cloud-storage/overview#continuous-ingestion-lexicographical-order). ويمكن تهيئة GCS ClickPipe لإدخال الملفات التي لا تتبع ترتيبًا ضمنيًا من خلال إعداد اشتراك [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) متصل بالحاوية. يتيح ذلك لـ ClickPipes الاستماع إلى إشعارات `OBJECT_FINALIZE` وإدخال أي ملفات جديدة بغض النظر عن اصطلاح تسمية الملفات.

<Note>
  الوضع غير المرتب **غير** مدعوم للحاويات العامة. ويتطلب ذلك مصادقة باستخدام **حساب خدمة** واشتراك [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) متصل بالحاوية.
</Note>

<div id="how-it-works">
  ## كيف يعمل
</div>

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

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

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

<Steps>
  <Step title="أنشئ topic في Google Cloud Pub/Sub" id="create-pubsub-topic">
    **1.** في Google Cloud Console، انتقل إلى **Pub/Sub > Topics > Create topic**. أنشئ topic جديدًا مع اشتراك افتراضي، ودوّن **اسم الـ Topic**.

    <Warning>
      **اشتراك واحد لكل ClickPipe**

      يحتاج كل ClickPipe إلى اشتراك Pub/Sub مخصصًا له وحده. ضمن الاشتراك الواحد، يسلّم Pub/Sub كل رسالة إلى مشترك واحد فقط: فإذا كان هناك ClickPipeان أو أكثر (أو أي تطبيق آخر) يستهلكون الاشتراك نفسه، فلن يتلقى كل إشعار سوى واحد منهم فقط، وستتخطى الـ pipes الملفات بصمت إذا لم تتلقَّ الإشعار مطلقًا. ينطبق هذا حتى إذا كانت ClickPipes تستخدم أنماط مسارات مختلفة — فالـ pipe التي تتلقى إشعارًا بملف لا يطابق النمط تتجاهله، ولن يراه أي pipe آخر أبدًا. لإدخال البيانات من الحاوية نفسها باستخدام عدة ClickPipes، أنشئ اشتراكًا منفصلًا على الـ topic لكل ClickPipe.
    </Warning>

    **2.** اضبط إشعارًا لحاوية GCS ينشر [أحداث `OBJECT_FINALIZE`](https://docs.cloud.google.com/storage/docs/pubsub-notifications) إلى topic في Pub/Sub الذي أنشأته أعلاه.

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

    ```bash theme={null}
    # 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
    ```
  </Step>

  <Step title="اضبط حساب خدمة" id="configure-service-account">
    **1.** اضبط [حساب خدمة](http://docs.cloud.google.com/iam/docs/keys-create-delete) مع [الأذونات المطلوبة](/ar/integrations/clickpipes/object-storage/google-cloud-storage/overview#permissions) للسماح لـ ClickPipes بسرد الكائنات وجلبها من الحاوية المحددة، وكذلك باستهلاك الإشعارات من اشتراك Pub/Sub ومراقبتها.

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

    ```bash theme={null}
    # 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"
    ```
  </Step>

  <Step title="أنشئ ClickPipe باستخدام الوضع غير المرتب" id="create-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](#create-pubsub-topic). يجب أن يستخدم اسم الاشتراك التنسيق التالي:

    ```text theme={null}
    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` المطابقة من الاشتراك.
  </Step>
</Steps>
