يُعد Amazon Redshift حلاً شائعًا لمستودعات البيانات السحابية، وهو جزء من عروض Amazon Web Services. يقدّم هذا الدليل أساليب مختلفة لترحيل البيانات من مثيل Redshift إلى ClickHouse. وسنغطي ثلاثة خيارات:
من منظور مثيل ClickHouse، يمكنك إما:
-
PUSH إرسال البيانات إلى ClickHouse باستخدام أداة أو خدمة ETL/ELT من جهة خارجية
-
PULL سحب البيانات من Redshift بالاستفادة من ClickHouse JDBC Bridge
-
PIVOT استخدام تخزين الكائنات S3 وفق آلية “التفريغ ثم التحميل”
استخدمنا Redshift كمصدر بيانات في هذا البرنامج التعليمي. ومع ذلك، فإن أساليب الترحيل المعروضة هنا لا تقتصر على Redshift، ويمكن استنباط خطوات مماثلة لأي مصدر بيانات متوافق.
إرسال البيانات من 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، مما قد يصبح عنق زجاجة محتملًا من ناحية قابلية التوسع
على الرغم من أن Redshift يستند إلى PostgreSQL، فلا يمكن استخدام دالة الجدول PostgreSQL أو محرك الجدول في ClickHouse، لأن ClickHouse يتطلب PostgreSQL بالإصدار 9 أو أحدث، بينما تستند واجهة برمجة تطبيقات Redshift إلى إصدار أقدم (8.x).
لاستخدام هذا الخيار، تحتاج إلى إعداد ClickHouse JDBC Bridge. وClickHouse JDBC Bridge هو تطبيق Java مستقل يتولى اتصال JDBC ويعمل كوكيل بين مثيل ClickHouse ومصادر البيانات. في هذا البرنامج التعليمي، استخدمنا مثيل Redshift مُجهزًا مسبقًا مع قاعدة بيانات تجريبية.
نشر ClickHouse JDBC Bridge
قم بنشر ClickHouse JDBC Bridge. لمزيد من التفاصيل، راجع دليل المستخدم الخاص بنا حول JDBC لمصادر البيانات الخارجيةإذا كنت تستخدم ClickHouse Cloud، فستحتاج إلى تشغيل ClickHouse JDBC Bridge في بيئة منفصلة والاتصال بـ ClickHouse Cloud باستخدام الدالة remoteSecure تكوين مصدر بيانات 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 الخاص بك من ClickHouseSELECT *
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 firstname
Query 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.)
يستخدم هذا المثال CSV كتنسيق وسيط. ومع ذلك، نوصي في أحمال العمل الإنتاجية باستخدام Apache Parquet باعتباره الخيار الأفضل لعمليات الترحيل الكبيرة، لأنه يدعم الضغط ويمكن أن يوفّر بعض تكاليف التخزين مع تقليل أزمنة النقل. (افتراضيًا، تُضغط كل مجموعة صفوف باستخدام SNAPPY). كما يستفيد ClickHouse من البنية العمودية في Parquet لتسريع إدخال البيانات.