تفاصيل الإعداد
إدارة المستخدمين والأدوار
default؛ وبدلاً من ذلك، أنشئ مستخدمًا مخصّصًا لاستخدامه مع وجهة Fivetran هذه فقط. ستؤدي الأوامر التالية، عند تنفيذها باستخدام المستخدم default، إلى إنشاء مستخدم جديد باسم fivetran_user ومنحه الامتيازات المطلوبة.
fivetran_user.
على سبيل المثال، بتنفيذ تعليمة SQL التالية، نقيّد الوصول إلى قاعدة البيانات default:
الإعداد المتقدم
ملف الإعداد هذا اختياري بالكامل. وإذا لم يتم رفع أي ملف، فستستخدم الوجهة إعدادات افتراضية مناسبة تعمل جيدًا مع معظم حالات الاستخدام.
جميع الحقول اختيارية. إذا لم يتم تحديد حقل، فستُستخدم القيمة الافتراضية.
إذا كانت قيمة ما خارج النطاق المسموح، فستُبلغ الوجهة عن خطأ أثناء المزامنة.
تُتجاهل الحقول غير المعروفة بصمت (مع تسجيل تحذير) ولا تتسبب في أخطاء، مما يتيح التوافق المستقبلي عند إضافة إعدادات جديدة.
مثال:
مطابقة تحويل الأنواع
- تُخزَّن BINARY وXML وLOCALTIME وJSON بصفتها String لأن نوع
Stringفي ClickHouse يمكنه تمثيل مجموعة اعتباطية من البايتات. وتضيف الوجهة تعليقًا إلى العمود للإشارة إلى نوع البيانات الأصلي. ولا يُستخدم نوع البيانات JSON في ClickHouse لأنه وُسِم بأنه متقادم ولم يُوصَ به مطلقًا للاستخدام في بيئات الإنتاج. ** ملاحظة: التذكرة الخاصة بتتبّع دعم النوع LOCALTIME: clickhouse-fivetran-destination #15.
نطاقات قيم التاريخ والوقت
- الحد الأعلى لـ INSTANT هو 2262-04-11 23:47:16 لأن DateTime64(9) يخزّن النانوثواني منذ epoch بصيغة int64، وتوافق 2^63 - 1 نانوثانية هذا التاريخ. يدعم ClickHouse نفسه DateTime64 بدقة <= 9 حتى 2299-12-31 23:59:59.
- الحد الأعلى لـ LOCALDATETIME مقيَّد أيضًا عند 2262-04-11 23:47:16 بسبب خلل معروف في مشغّل ClickHouse للغة Go، حيث يُستدعى
time.Time.UnixNano()لجميع درجات دقة DateTime64 قبل تغيير المقياس، مما يسبب overflow في int64 للتواريخ التي تتجاوز 2262 حتى عند الدقة 0.
جداول الوجهة
SharedReplacingMergeTree)، ويُحدَّد الإصدار بواسطة العمود _fivetran_synced.
يُنشأ كل عمود، باستثناء المفاتيح الأساسية (مفاتيح الترتيب) وأعمدة البيانات الوصفية الخاصة بـ Fivetran،
بنوع Nullable(T)، حيث إن T هو
نوع في ClickHouse Cloud استنادًا إلى تعيين أنواع البيانات.
تختلف بنية الجدول بحسب
وضع المزامنة
المُعدّ للموصل: الحذف المنطقي (الافتراضي) أو وضع السجل التاريخي (SCD Type 2).
وضع الحذف المنطقي
مفتاح أساسي واحد في جدول المصدر
users على عمود مفتاح أساسي id (INT) وعمود عادي name (STRING).
سيُعرَّف جدول الوجهة على النحو التالي:
id كمفتاح فرز للجدول.
مفاتيح أساسية متعددة في جدول المصدر
items يضم أعمدة المفتاح الأساسي id (INT) وname (STRING)، بالإضافة إلى
عمود عادي إضافي هو description (STRING). سيُعرَّف جدول الوجهة على النحو التالي:
id وname كمفتاحَي فرز للجدول.
عدم وجود مفاتيح أساسية في الجدول المصدر
_fivetran_id.
لنفترض وجود جدول events لا يضم في المصدر سوى العمودين event (STRING) وtimestamp (LOCALDATETIME).
في هذه الحالة، يكون جدول الوجهة كما يلي:
_fivetran_id فريد، ولعدم وجود خيارات أخرى للمفتاح الأساسي، يُستخدم كمفتاح فرز للجدول.
وضع السجل التاريخي (SCD Type 2)
يُدرج العمود
_fivetran_start دائمًا في عبارة ORDER BY باعتباره العنصر الأخير في مفتاح الفرز المركب.
وهذا يتيح وجود عدة إصدارات من السجل نفسه (بأوقات بدء مختلفة) معًا داخل الجدول.
عند تحديث سجل:
- تُضبط قيمة
_fivetran_endفي الإصدار السابق على قيمة_fivetran_startفي الإصدار الجديد ناقص نانوثانية واحدة، وتُضبط قيمة_fivetran_activeعلىfalse. - يُدرج الإصدار الجديد مع ضبط
_fivetran_activeعلىtrueوضبط_fivetran_endعلى2262-04-11 23:47:16.000000000(وهي القيمة القصوى لـDateTime64(9)).
مفتاح أساسي واحد في الجدول المصدر
users على العمود id (INT) كمفتاح أساسي، والأعمدة العادية name (STRING) وstatus (STRING).
وسيُعرَّف الجدول الوجهة في وضع السجل التاريخي على النحو التالي:
id و _fivetran_start مفتاح الفرز المركّب.
بعد بضع عمليات المزامنة، قد يحتوي الجدول على البيانات التالية:
يحتوي السجل
id=1 على إصدارين: الإصدار الأصلي (name 1، غير نشط) والإصدار المحدَّث (name 11، نشط).
أما السجل id=2، فلديه إصدار واحد فقط، وهو النشط حاليًا.
وجود عدة مفاتيح أساسية في الجدول المصدر
ORDER BY مع _fivetran_start باعتباره العنصر الأخير.
على سبيل المثال، لنفترض وجود جدول مصدر باسم items يحتوي على عمودَي مفتاح أساسي هما id (INT) وname (STRING)، بالإضافة إلى
عمود عادي آخر هو description (STRING). ويُعرَّف جدول الوجهة في وضع السجل التاريخي على النحو التالي:
id وname و_fivetran_start مفتاح الفرز المركب.
لا توجد مفاتيح أساسية في جدول المصدر
_fivetran_id،
وسيُضاف _fivetran_start إلى مفتاح الفرز.
لنفترض وجود جدول events لا يحتوي في المصدر إلا على العمودين event (STRING) وtimestamp (LOCALDATETIME).
ويكون جدول الوجهة في وضع السجل التاريخي كما يلي:
_fivetran_id و_fivetran_start يشكّلان مفتاح الفرز المركب.
اختيار أحدث إصدار من البيانات من دون تكرارات
SharedReplacingMergeTree إلغاء تكرار البيانات في الخلفية
فقط أثناء عمليات الدمج وفي وقت غير معلوم.
ومع ذلك، يمكن اختيار أحدث إصدار من البيانات من دون تكرارات عند الحاجة باستخدام الكلمة المفتاحية FINAL:
إعادة المحاولة عند فشل الشبكة
SharedReplacingMergeTree يتعامل مع أي نُسخ مكررة محتملة.