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

> يتيح لك ClickPipes توصيل ClickHouse بـ DynamoDB.

# CDC من DynamoDB إلى ClickHouse

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            غير مدعوم في ClickHouse Cloud
        </div>;
};

تشرح هذه الصفحة كيفية إعداد CDC من DynamoDB إلى ClickHouse باستخدام ClickPipes. ويتكوّن هذا التكامل من عنصرين:

1. اللقطة الأولية عبر S3 ClickPipes
2. التحديثات في الوقت الفعلي عبر Kinesis ClickPipes

سيتم استيعاب البيانات في `ReplacingMergeTree`. ويُستخدم table engine هذا عادةً في سيناريوهات CDC للسماح بتطبيق عمليات التحديث. ويمكنك الاطّلاع على مزيد من التفاصيل حول هذا النمط في مقالات المدوّنة التالية:

* [التقاط بيانات التغيير (CDC) باستخدام PostgreSQL وClickHouse - الجزء 1](https://clickhouse.com/blog/clickhouse-postgresql-change-data-capture-cdc-part-1?loc=docs-rockest-migrations)
* [التقاط بيانات التغيير (CDC) باستخدام PostgreSQL وClickHouse - الجزء 2](https://clickhouse.com/blog/clickhouse-postgresql-change-data-capture-cdc-part-2?loc=docs-rockest-migrations)

<div id="1-set-up-kinesis-stream">
  ## 1. إعداد دفق Kinesis
</div>

أولاً، ستحتاج إلى تمكين دفق Kinesis على جدول DynamoDB لالتقاط التغييرات في الوقت الفعلي. نريد تنفيذ ذلك قبل إنشاء اللقطة لتجنّب فقدان أي بيانات.
يمكنك العثور على دليل AWS [هنا](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html).

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/kkh98eOd_iRyUp1R/images/integrations/data-ingestion/dbms/dynamodb/dynamodb-kinesis-stream.png?fit=max&auto=format&n=kkh98eOd_iRyUp1R&q=85&s=64a66c75d48c11dd898f3d25d532aa52" size="lg" alt="دفق Kinesis في DynamoDB" border width="1238" height="215" data-path="images/integrations/data-ingestion/dbms/dynamodb/dynamodb-kinesis-stream.png" />

<div id="2-create-the-snapshot">
  ## 2. إنشاء اللقطة
</div>

بعد ذلك، سننشئ لقطة من جدول DynamoDB. ويمكن تحقيق ذلك عبر تصدير من AWS إلى S3. يمكنك الاطلاع على دليل AWS [هنا](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/S3DataExport.HowItWorks.html).
**ستحتاج إلى إجراء "Full export" بتنسيق DynamoDB JSON.**

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/kkh98eOd_iRyUp1R/images/integrations/data-ingestion/dbms/dynamodb/dynamodb-s3-export.png?fit=max&auto=format&n=kkh98eOd_iRyUp1R&q=85&s=8a0c1d01d2c12b65e99566ab60c66ab9" size="md" alt="تصدير DynamoDB إلى S3" border width="686" height="929" data-path="images/integrations/data-ingestion/dbms/dynamodb/dynamodb-s3-export.png" />

<div id="3-load-the-snapshot-into-clickhouse">
  ## 3. تحميل اللقطة إلى ClickHouse
</div>

<div id="create-necessary-tables">
  ### أنشئ الجداول اللازمة
</div>

ستبدو بيانات اللقطة من DynamoDB على النحو التالي:

```json theme={null}
{
  "age": {
    "N": "26"
  },
  "first_name": {
    "S": "sally"
  },
  "id": {
    "S": "0A556908-F72B-4BE6-9048-9E60715358D4"
  }
}
```

لاحظ أن البيانات بتنسيق متداخل. سنحتاج إلى تسطيح هذه البيانات قبل تحميلها إلى ClickHouse. ويمكن إجراء ذلك باستخدام الدالة `JSONExtract` في ClickHouse داخل عرض مادي.

سنحتاج إلى إنشاء ثلاثة جداول:

1. جدول لتخزين البيانات الخام من DynamoDB
2. جدول لتخزين البيانات النهائية بعد تسطيحها (جدول الوجهة)
3. عرض مادي لتسطيح البيانات

بالنسبة إلى بيانات DynamoDB الواردة في المثال أعلاه، ستبدو جداول ClickHouse على النحو التالي:

```sql theme={null}
/* Snapshot table */
CREATE TABLE IF NOT EXISTS "default"."snapshot"
(
    `item` String
)
ORDER BY tuple();

/* Table for final flattened data */
CREATE MATERIALIZED VIEW IF NOT EXISTS "default"."snapshot_mv" TO "default"."destination" AS
SELECT
    JSONExtractString(item, 'id', 'S') AS id,
    JSONExtractInt(item, 'age', 'N') AS age,
    JSONExtractString(item, 'first_name', 'S') AS first_name
FROM "default"."snapshot";

/* Table for final flattened data */
CREATE TABLE IF NOT EXISTS "default"."destination" (
    "id" String,
    "first_name" String,
    "age" Int8,
    "version" Int64
)
ENGINE ReplacingMergeTree("version")
ORDER BY id;
```

توجد بعض المتطلبات لجدول الوجهة:

* يجب أن يكون هذا الجدول من نوع `ReplacingMergeTree`
* يجب أن يحتوي الجدول على عمود `version`
  * في الخطوات اللاحقة، سنربط الحقل `ApproximateCreationDateTime` من Kinesis Stream بالعمود `version`.
* ينبغي أن يستخدم الجدول مفتاح التقسيم بوصفه مفتاح الترتيب (المحدَّد بواسطة `ORDER BY`)
  * ستُزال تكرارات الصفوف ذات مفتاح الترتيب نفسه استنادًا إلى العمود `version`.

<div id="create-the-snapshot-clickpipe">
  ### أنشئ ClickPipe للّقطة
</div>

يمكنك الآن إنشاء ClickPipe لتحميل بيانات اللقطة من S3 إلى ClickHouse. اتبع دليل S3 ClickPipe [هنا](/ar/integrations/clickpipes/object-storage/amazon-s3/overview)، ولكن استخدم الإعدادات التالية:

* **مسار الاستيعاب**: ستحتاج إلى تحديد مسار ملفات JSON المُصدَّرة في S3. سيبدو المسار على النحو التالي تقريبًا:

```text theme={null}
https://{bucket}.s3.amazonaws.com/{prefix}/AWSDynamoDB/{export-id}/data/*
```

* **التنسيق**: JSONEachRow
* **الجدول**: جدول اللقطة الخاص بك (مثل `default.snapshot` في المثال أعلاه)

بمجرد إنشائه، ستبدأ البيانات بالتدفق إلى جدول اللقطة وجدول الوجهة. لا تحتاج إلى انتظار اكتمال تحميل اللقطة قبل الانتقال إلى الخطوة التالية.

<div id="4-create-the-kinesis-clickpipe">
  ## 4. إنشاء Kinesis ClickPipe
</div>

يمكننا الآن إعداد Kinesis ClickPipe لالتقاط التغييرات الآنية من دفق Kinesis. اتبع دليل Kinesis ClickPipe [هنا](/ar/integrations/clickpipes/kinesis/overview)، ولكن استخدم الإعدادات التالية:

* **Stream**: دفق Kinesis المستخدم في الخطوة 1
* **Table**: جدول الوجهة (مثل `default.destination` في المثال أعلاه)
* **Flatten object**: true
* **Column mappings**:
  * `ApproximateCreationDateTime`: `version`
  * عيّن الحقول الأخرى إلى أعمدة الوجهة المناسبة كما هو موضح أدناه

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/kkh98eOd_iRyUp1R/images/integrations/data-ingestion/dbms/dynamodb/dynamodb-map-columns.png?fit=max&auto=format&n=kkh98eOd_iRyUp1R&q=85&s=1ef1b4e2c4bfaf1520346e6a3faf7baa" size="md" alt="تعيين أعمدة DynamoDB" border width="1784" height="1630" data-path="images/integrations/data-ingestion/dbms/dynamodb/dynamodb-map-columns.png" />

<div id="5-cleanup-optional">
  ## 5. التنظيف (اختياري)
</div>

بعد انتهاء ClickPipe الخاصة باللقطة، يمكنك حذف جدول اللقطة والعرض المادي.

```sql theme={null}
DROP TABLE IF EXISTS "default"."snapshot";
DROP TABLE IF EXISTS "default"."snapshot_clickpipes_error";
DROP VIEW IF EXISTS "default"."snapshot_mv";
```
