المقدمة
يُعد Amazon Redshift حلاً شائعًا لمستودعات البيانات السحابية، وهو جزء من عروض Amazon Web Services. يقدّم هذا الدليل أساليب مختلفة لترحيل البيانات من مثيل Redshift إلى ClickHouse. وسنغطي ثلاثة خيارات:

من منظور مثيل ClickHouse، يمكنك إما:
-
PUSH إرسال البيانات إلى ClickHouse باستخدام أداة أو خدمة ETL/ELT من جهة خارجية
-
PULL سحب البيانات من Redshift بالاستفادة من ClickHouse JDBC Bridge
-
PIVOT استخدام S3 object storage وفق آلية "التفريغ ثم التحميل"
إرسال البيانات من Redshift إلى ClickHouse
في سيناريو الإرسال، تتمثل الفكرة في الاستفادة من أداة أو خدمة من جهة خارجية (سواء كانت شيفرة مخصصة أو أداة ETL/ELT) لإرسال بياناتك إلى مثيل ClickHouse لديك. على سبيل المثال، يمكنك استخدام أداة مثل Airbyte لنقل البيانات بين مثيل Redshift لديك (كمصدر) وClickHouse كوجهة (راجع دليل التكامل الخاص بنا لـ Airbyte)

المزايا
- يمكنه الاستفادة من فهرس الموصلات الحالي في أدوات ETL/ELT.
- إمكانات مدمجة للحفاظ على مزامنة البيانات (منطق الإلحاق/الاستبدال/التحديث التزايدي).
- يتيح سيناريوهات تحويل البيانات (على سبيل المثال، راجع دليل التكامل الخاص بنا لـ dbt).
العيوب
- تحتاج إلى إعداد بنية تحتية لعمليات ETL/ELT وصيانتها.
- يضيف عنصرًا من طرف ثالث إلى البنية المعمارية، ما قد يصبح عنق زجاجة محتملًا يحدّ من قابلية التوسع.
سحب البيانات من Redshift إلى ClickHouse
في سيناريو السحب، تعتمد الفكرة على استخدام ClickHouse JDBC Bridge للاتصال مباشرةً بعنقود Redshift من مثيل ClickHouse وتنفيذ استعلامات INSERT INTO ... SELECT:

المزايا
- ينطبق بشكل عام على جميع الأدوات المتوافقة مع JDBC
- حل أنيق يتيح الاستعلام عن عدة مصادر بيانات خارجية من داخل ClickHouse
السلبيات
- يتطلب مثيلًا من ClickHouse JDBC Bridge، مما قد يصبح عنق زجاجة محتملًا من ناحية قابلية التوسع
البرنامج التعليمي
لاستخدام هذا الخيار، تحتاج إلى إعداد ClickHouse JDBC Bridge. وClickHouse JDBC Bridge هو تطبيق Java مستقل يتولى اتصال JDBC ويعمل كوكيل بين مثيل ClickHouse ومصادر البيانات. في هذا البرنامج التعليمي، استخدمنا مثيل Redshift مُجهزًا مسبقًا مع قاعدة بيانات تجريبية.
نشر ClickHouse JDBC Bridge
قم بنشر ClickHouse JDBC Bridge. لمزيد من التفاصيل، راجع دليل المستخدم الخاص بنا حول JDBC لمصادر البيانات الخارجية
تكوين مصدر بيانات Redshift الخاص بك
كوّن مصدر بيانات Redshift لاستخدامه مع ClickHouse JDBC Bridge. على سبيل المثال: /etc/clickhouse-jdbc-bridge/config/datasources/redshift.json
{
"redshift-server": {
"aliases": [
"redshift"
],
"driverUrls": [
"https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/2.1.0.4/redshift-jdbc42-2.1.0.4.jar"
],
"driverClassName": "com.amazon.redshift.jdbc.Driver",
"jdbcUrl": "jdbc:redshift://redshift-cluster-1.ckubnplpz1uv.us-east-1.redshift.amazonaws.com:5439/dev",
"username": "awsuser",
"password": "<password>",
"maximumPoolSize": 5
}
}الاستعلام عن مثيل Redshift الخاص بك من ClickHouse
بمجرد نشر ClickHouse JDBC Bridge وتشغيله، يمكنك البدء في الاستعلام عن مثيل Redshift الخاص بك من ClickHouse
SELECT *
FROM jdbc('redshift', 'select username, firstname, lastname from users limit 5')Query id: 1b7de211-c0f6-4117-86a2-276484f9f4c0
┌─username─┬─firstname─┬─lastname─┐
│ PGL08LJI │ Vladimir │ Humphrey │
│ XDZ38RDD │ Barry │ Roy │
│ AEB55QTM │ Reagan │ Hodge │
│ OWY35QYB │ Tamekah │ Juarez │
│ MSD36KVR │ Mufutau │ Watkins │
└──────────┴───────────┴──────────┘
5 rows in set. Elapsed: 0.438 sec.SELECT *
FROM jdbc('redshift', 'select count(*) from sales')Query id: 2d0f957c-8f4e-43b2-a66a-cc48cc96237b
┌──count─┐
│ 172456 │
└────────┘
1 rows in set. Elapsed: 0.304 sec.استيراد البيانات من Redshift إلى ClickHouse
فيما يلي، نعرض كيفية استيراد البيانات باستخدام عبارة INSERT INTO ... SELECT
# إنشاء TABLE بثلاثة columns
CREATE TABLE users_imported
(
`username` String,
`firstname` String,
`lastname` String
)
ENGINE = MergeTree
ORDER BY firstnameQuery id: c7c4c44b-cdb2-49cf-b319-4e569976ab05
Ok.
0 rows in set. Elapsed: 0.233 sec.INSERT INTO users_imported (*) SELECT *
FROM jdbc('redshift', 'select username, firstname, lastname from users')Query id: 9d3a688d-b45a-40f4-a7c7-97d93d7149f1
Ok.
0 rows in set. Elapsed: 4.498 sec. Processed 49.99 thousand rows, 2.49 MB (11.11 thousand rows/s., 554.27 KB/s.)ترحيل البيانات بأسلوب Pivot من Redshift إلى ClickHouse باستخدام S3
في هذا السيناريو، نُصدِّر البيانات إلى S3 بتنسيق Pivot وسيط، ثم في خطوة ثانية نحمّل البيانات من S3 إلى ClickHouse.

المزايا
- يتمتع كلٌّ من Redshift وClickHouse بميزات قوية للتكامل مع S3.
- يستفيد من الميزات الحالية، مثل الأمر
UNLOADفي Redshift ودالة الجدول S3 / محرك الجدول في ClickHouse. - يتوسع بسلاسة بفضل القراءات المتوازية وإمكانات الإنتاجية العالية من/إلى S3 في ClickHouse.
- يمكنه الاستفادة من تنسيقات متقدمة ومضغوطة مثل Apache Parquet.
السلبيات
- خطوتان في العملية (تفريغ البيانات من Redshift ثم تحميلها إلى ClickHouse).
البرنامج التعليمي
صدّر البيانات إلى حاوية S3 باستخدام UNLOAD
باستخدام ميزة UNLOAD في Redshift، صدّر البيانات إلى حاوية S3 خاصة موجودة مسبقًا:

سينتج عن ذلك ملفات أجزاء تحتوي على البيانات الخام في S3

أنشئ الجدول في ClickHouse
أنشئ الجدول في ClickHouse:
CREATE TABLE users
(
username String,
firstname String,
lastname String
)
ENGINE = MergeTree
ORDER BY usernameبدلاً من ذلك، يمكن لـ ClickHouse محاولة استنتاج بنية الجدول باستخدام CREATE TABLE ... EMPTY AS SELECT:
CREATE TABLE users
ENGINE = MergeTree ORDER BY username
EMPTY AS
SELECT * FROM s3('https://your-bucket.s3.amazonaws.com/unload/users/*', '<aws_access_key>', '<aws_secret_access_key>', 'CSV')يعمل هذا بشكل جيد خصوصًا عندما تكون البيانات بتنسيق يتضمن معلومات عن أنواع البيانات، مثل Parquet.
حمّل ملفات S3 إلى ClickHouse
حمّل ملفات S3 إلى ClickHouse باستخدام عبارة INSERT INTO ... SELECT:
INSERT INTO users SELECT *
FROM s3('https://your-bucket.s3.amazonaws.com/unload/users/*', '<aws_access_key>', '<aws_secret_access_key>', 'CSV')Query id: 2e7e219a-6124-461c-8d75-e4f5002c8557
Ok.
0 rows in set. Elapsed: 0.545 sec. Processed 49.99 thousand rows, 2.34 MB (91.72 thousand rows/s., 4.30 MB/s.)