Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

صِل Apify بـ ClickHouse

تتم صيانته من قِبل المجتمع

تُعدّ Apify منصة لاستخراج بيانات الويب والأتمتة. يمكنك إنشاء برامج سحابية بلا خوادم تُسمّى Actors، ثم تشغيلها وتوسيع نطاقها. تتولى Actors استخراج البيانات من مواقع الويب، والزحف على الويب، ومعالجة البيانات، أو أتمتة سير العمل. وينتج عن كل تشغيل لـ Actor مخرجات منظَّمة تُخزَّن في Datasets (مجموعات من كائنات JSON).

حمّل البيانات المستخرَجة أو المُعالجة إلى ClickHouse لاستخدامها في التحليلات أو المراقبة أو مسارات الإثراء.

المفاهيم الأساسية

مفهوم Apify ماهيته
Actor برنامج سحابي بدون خوادم يعمل على منصة Apify. تتوفر آلاف وحدات Actor الجاهزة في Apify Store.
Dataset ناتج تشغيل Actor. وهي مجموعة من كائنات JSON منظَّمة على هيئة جدول، ويمكن استرجاعها بتنسيقات JSON أو CSV أو XML أو غيرها عبر واجهة برمجة تطبيقات Apify.
Webhook استدعاء HTTP قائم على الأحداث يُفعَّل عند نجاح تشغيل Actor أو فشله أو عند وقوع أحداث أخرى في دورة حياته. استخدم webhooks لأتمتة مسار نقل البيانات من Apify إلى ClickHouse.

دليل الإعداد

اجمع تفاصيل الاتصال بـ ClickHouse

للاتصال بـ ClickHouse باستخدام HTTP(S)، تحتاج إلى المعلومات التالية:

المعلمات الوصف
HOST and PORT عادةً ما يكون المنفذ 8443 عند استخدام TLS، أو 8123 عند عدم استخدام TLS.
DATABASE NAME افتراضيًا، توجد قاعدة بيانات باسم default. استخدم اسم قاعدة البيانات التي تريد الاتصال بها.
USERNAME and PASSWORD افتراضيًا، يكون اسم المستخدم default. استخدم اسم المستخدم المناسب لحالة الاستخدام لديك.

تتوفر تفاصيل خدمة ClickHouse Cloud الخاصة بك في ClickHouse Cloud console. حدِّد خدمة ثم انقر على Connect:

زر Connect لخدمة ClickHouse Cloud

اختر HTTPS. ستظهر تفاصيل الاتصال في مثال لأمر curl.

تفاصيل اتصال HTTPS لخدمة ClickHouse Cloud

إذا كنت تستخدم ClickHouse مُدارًا ذاتيًا، فسيُحدِّد مسؤول ClickHouse لديك تفاصيل الاتصال.

المتطلبات الأساسية لـ Apify

ستحتاج أيضًا إلى:

ثبّت التبعيات

ثبّت عميل JavaScript من Apify وعميل JavaScript من ClickHouse:

npm install apify-client @clickhouse/client

أنشئ جدولًا مستهدفًا في ClickHouse

أنشئ جدولًا لتخزين البيانات المستخرجة. يعتمد المخطط على الـ Actor الذي تستخدمه. يستخدم هذا المثال MergeTree مع Actor لاستخراج بيانات المنتجات:

CREATE TABLE apify_products
(
    url        String,
    title      String,
    price      Float64,
    currency   String,
    scraped_at DateTime DEFAULT now()
)
ENGINE = MergeTree()
ORDER BY (scraped_at, url);

اجلب Dataset لـ Apify وحمّلها إلى ClickHouse

يجلب البرنامج النصي التالي نتائج تشغيل Actor في Apify ويدرجها في ClickHouse:

import { ApifyClient } from 'apify-client';
import { createClient } from '@clickhouse/client';

// تهيئة العملاء
const apify = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });
const clickhouse = createClient({
    url: 'https://YOUR_CLICKHOUSE_HOST:8443',
    username: 'default',
    password: 'YOUR_CLICKHOUSE_PASSWORD',
    database: 'default',
});

// جلب عناصر Dataset من آخر تشغيل لـ Actor
const run = await apify.actor('YOUR_ACTOR_ID').call();
const { items } = await apify.dataset(run.defaultDatasetId).listItems();

console.log(`Fetched ${items.length} items from Apify dataset.`);

// الإدراج في ClickHouse
await clickhouse.insert({
    table: 'apify_products',
    values: items,
    format: 'JSONEachRow',
});

console.log(`Inserted ${items.length} rows into ClickHouse.`);
await clickhouse.close();

أتمتة العملية باستخدام webhooks

بدلًا من تشغيل البرنامج النصي يدويًا، أتمت مسار المعالجة بحيث تُحمَّل البيانات إلى ClickHouse في كل مرة ينتهي فيها Actor:

  1. في Apify Console، انتقل إلى Actor الخاص بك وافتح علامة التبويب Integrations.
  2. أضف webhook جديدًا بالإعدادات التالية:
    • نوع الحدث: ACTOR.RUN.SUCCEEDED
    • الإجراء: طلب HTTP POST إلى نقطة نهاية أداة التحميل لديك، أو تشغيل Actor آخر يتولى الإدراج في ClickHouse.
  3. تتضمن حمولة webhook القيمة defaultDatasetId، والتي يمكنك استخدامها لجلب نتائج التشغيل.

راجع توثيق webhooks في Apify للاطلاع على تفاصيل الحمولة وخيارات الإعداد.

ويمكنك أيضًا استخدام Apify Schedules لتشغيل Actors وفق جدول زمني شبيه بـ cron، مع استخدام webhooks لخطوة التحميل.

أفضل الممارسات

جلب البيانات من Apify

استخدم مكتبة العميل لـ Apify (apify-client لـ JavaScript أو بايثون) بدلًا من استدعاءات HTTP المباشرة. فهي تتولى تقسيم النتائج إلى صفحات، وإعادة المحاولة، والمصادقة نيابةً عنك. وبالنسبة إلى مجموعات البيانات الكبيرة، صفِّح النتائج باستخدام المعلَمتين limit وoffset في نقطة النهاية List dataset items.

تحميل البيانات إلى ClickHouse

استخدم التنسيق JSONEachRow عند الإدراج في ClickHouse. فهو يتوافق مباشرةً مع مخرجات JSON من Apify من دون الحاجة إلى أي تحويل.

احرص على أن يطابق مخطط جدول ClickHouse لديك حقول المخرجات الخاصة بـ Actor. تحقّق من مخطط المخرجات الخاص بـ Actor في صفحته على Apify Store أو في علامة التبويب Dataset بعد التشغيل.

الأداء

لعمليات الإدراج عالية الإنتاجية من عميل JavaScript، اتبع نصائح لتحسين الأداء. اجمع الصفوف في دفعات إدراج أكبر بدلًا من إدراج صف واحد في كل مرة، وفكّر في استخدام عمليات الإدراج غير المتزامنة عندما لا يكون التجميع من جهة العميل عمليًا.

الأمان

تستخدم الأمثلة في هذه الصفحة المستخدم default وقاعدة البيانات الافتراضية لتبسيط الأمور. في بيئة production، أنشئ مستخدمًا مخصصًا يتمتع بالحد الأدنى من الامتيازات اللازمة للإدراج في الجدول المستهدف، وخزّن بيانات الاعتماد بأمان (على سبيل المثال، في متغيرات البيئة أو في مدير الأسرار بدلًا من تضمينها في الشيفرة المصدرية). راجع Cloud access management للحصول على إرشادات.

Navigation