spark_catalog، وتُعرَّف الجداول بالشكل {catalog name}.{database}.{table}. ومع
ميزة الكتالوج الجديدة، أصبح من الممكن الآن إضافة عدة كتالوجات والعمل بها ضمن تطبيق Spark واحد.
المفاضلة بين Catalog API وTableProvider API
Catalog API مقابل TableProvider API
المتطلبات
- Java 8 أو 17 (يتطلب Spark 4.0 Java 17 أو أحدث)
- Scala 2.12 أو 2.13 (يدعم Spark 4.0 Scala 2.13 فقط)
- Apache Spark 3.3 أو 3.4 أو 3.5 أو 4.0
مصفوفة التوافق
التثبيت والإعداد
pom.xml
في Maven أو build.sbt في SBT).
وبدلاً من ذلك، يمكنك وضع ملفات JAR المطلوبة في المجلد $SPARK_HOME/jars/، أو تمريرها مباشرةً إلى Spark
باستخدام الخيار --jars في الأمر spark-submit.
ويضمن كلا النهجين توفّر موصل ClickHouse في بيئة Spark لديك.
الاستيراد كتبعية
- Maven
- Gradle
- SBT
- Spark SQL/Shell CLI
نزّل المكتبة
سجّل الكتالوج (مطلوب)
يمكن ضبط هذه الإعدادات بإحدى الطرق التالية:
- تعديل/إنشاء
spark-defaults.conf. - تمرير الإعدادات إلى الأمر
spark-submit(أو إلى أوامر CLI spark-shell/spark-sql). - إضافة الإعدادات عند تهيئة السياق.
استخدام واجهة برمجة تطبيقات TableProvider (الوصول المستند إلى التنسيق)
كتالوج، يدعم موصل ClickHouse Spark نمط وصول مستندًا إلى التنسيق عبر واجهة برمجة تطبيقات TableProvider.
مثال على القراءة بأسلوب مستند إلى التنسيق
- بايثون
- Scala
- Java
مثال على الكتابة المستندة إلى التنسيق
- بايثون
- Scala
- Java
ميزات TableProvider API
الإنشاء التلقائي للجدول
- المحرّك: تكون القيمة الافتراضية
MergeTree()إذا لم يتم تحديده. يمكنك تحديد محرّك مختلف باستخدام الخيارengine(مثلReplacingMergeTree(),SummingMergeTree(), وغيرها) - ORDER BY: مطلوب - يجب تحديد الخيار
order_byصراحةً عند إنشاء جدول جديد. ويتحقق الموصل من أن جميع الأعمدة المحددة موجودة في البنية. - دعم المفاتيح القابلة لـ NULL: يضيف تلقائيًا
settings.allow_nullable_key=1إذا كانت عبارة ORDER BY تحتوي على أعمدة قابلة لـ NULL
- بايثون
- Scala
- Java
خيارات اتصال TableProvider
خيارات الاتصال
خيارات إنشاء الجدول
- الخيار
order_byمطلوب عند إنشاء جدول جديد. يجب أن تكون جميع الأعمدة المحددة موجودة في المخطط. ** يُضبط تلقائيًا على1إذا كان ORDER BY يحتوي على أعمدة تقبل NULL ولم يُحدَّد هذا الإعداد صراحةً.
أوضاع الكتابة
append: إضافة البيانات إلى جدول موجودoverwrite: استبدال جميع البيانات في الجدول (مع تفريغ الجدول)
- بايثون
- Scala
- Java
تهيئة خيارات ClickHouse
allow_nullable_key وindex_granularity، بالإضافة إلى إعدادات أخرى على مستوى الجدول أو على مستوى الاستعلام. وهي تختلف عن خيارات الموصل (مثل host وdatabase وtable) التي تتحكم في كيفية اتصال الموصل بـ ClickHouse.
استخدام واجهة TableProvider API
settings.<key>:
- بايثون
- Scala
- Java
استخدام Catalog API
spark.sql.catalog.<catalog_name>.option.<key> في إعدادات Spark:
إعدادات ClickHouse Cloud
قراءة البيانات
- Java
- Scala
- بايثون
- Spark SQL
كتابة البيانات
- Java
- Scala
- بايثون
- Spark SQL
عمليات DDL
عند استخدام Spark SQL، لا يمكن تنفيذ سوى statement واحدة في كل مرة.
العمل مع VariantType
يتوفر دعم VariantType في Spark 4.0+، ويتطلب ClickHouse 25.3+ مع تمكين نوعَي JSON/Variant التجريبيين.
VariantType في Spark للعمل مع البيانات شبه المهيكلة. ويرتبط VariantType بالنوعين JSON وVariant في ClickHouse، ما يتيح لك تخزين البيانات ذات المخطط المرن والاستعلام عنها بكفاءة.
يركّز هذا القسم تحديدًا على ربط VariantType واستخدامه. للحصول على نظرة عامة كاملة على جميع أنواع البيانات المدعومة، راجع قسم أنواع البيانات المدعومة.
تعيين أنواع ClickHouse
قراءة بيانات VariantType
JSON وVariant تلقائيًا إلى VariantType في Spark:
- Scala
- بايثون
- Java
كتابة بيانات من النوع VariantType
- Scala
- بايثون
- Java
إنشاء جداول من نوع VariantType باستخدام Spark SQL
إعداد أنواع Variant
نوع JSON (الافتراضي)
variant_types، فسيستخدم العمود نوع JSON الافتراضي في ClickHouse، والذي لا يقبل إلا كائنات JSON:
نوع Variant مع أنواع متعددة
variant_types:
أنواع Variant المدعومة
Variant():
- الأنواع الأساسية:
StringوInt8وInt16وInt32وInt64وUInt8وUInt16وUInt32وUInt64وFloat32وFloat64وBool - المصفوفات:
Array(T)، حيث يكون T أي نوع مدعوم، بما في ذلك المصفوفات المتداخلة - JSON:
JSONلتخزين كائنات JSON
إعداد تنسيق القراءة
VariantType. يمكنك تجاوز هذا السلوك وقراءتها كسلاسل نصية:
- Scala
- بايثون
- Java
دعم صيغ الكتابة
اضبط صيغة الكتابة:
أفضل الممارسات
- استخدم نوع JSON للبيانات التي تحتوي على JSON فقط: إذا كنت تخزّن كائنات JSON فقط، فاستخدم نوع JSON الافتراضي (من دون الخاصية
variant_types) - حدّد الأنواع صراحةً: عند استخدام
Variant()، اذكر صراحةً جميع الأنواع التي تنوي تخزينها - فعّل الميزات التجريبية: تأكد من تفعيل
allow_experimental_json_type = 1في ClickHouse - استخدم تنسيق JSON لعمليات الكتابة: يُوصى باستخدام تنسيق JSON لبيانات VariantType لتحقيق توافق أفضل
- ضع أنماط الاستعلام في الاعتبار: تدعم أنواع JSON/Variant استعلامات مسار JSON في ClickHouse لتصفية أكثر كفاءة
- تلميحات الأعمدة لتحسين الأداء: عند استخدام حقول JSON في ClickHouse، يؤدي إضافة تلميحات الأعمدة إلى تحسين أداء الاستعلامات. لا تتوفر حاليًا إمكانية إضافة تلميحات الأعمدة عبر Spark. راجع GitHub issue #497 لمتابعة هذه الميزة.
مثال: سير عمل متكامل
- Scala
- بايثون
- Java
الإعدادات
استخدام الإعدادات: هذه خيارات إعداد على مستوى Spark وتنطبق على كلٍّ من واجهة برمجة تطبيقات Catalog وTableProvider API. ويمكن ضبطها بإحدى الطريقتين التاليتين:
-
إعداد Spark العام (ينطبق على جميع العمليات):
-
تجاوز على مستوى العملية (في TableProvider API فقط — يمكنه تجاوز الإعدادات العامة):
spark-defaults.conf أو عند إنشاء جلسة Spark.