كيف يختلف المتغير عن سلاسل JSON؟
توضح هذه المقالة تغييرات السلوك والاختلافات في بناء الجملة والدلالات عند العمل مع نوع البيانات المتغير. تفترض هذه المقالة أنك على دراية بالعمل مع بيانات سلسلة JSON على Azure Databricks. بالنسبة للمستخدمين الجدد في Azure Databricks، يجب استخدام متغير عبر سلاسل JSON كلما تخزين البيانات شبه المنظمة التي تتطلب مرونة لتغيير المخطط أو غير معروف. راجع البيانات شبه المنظمة للنموذج.
في Databricks Runtime 15.3 وما فوق، يمكنك استخدام نوع البيانات المتغير لترميز البيانات شبه المنظمة والاستعلام عنها. توصي Databricks بمتغير كبديل لتخزين البيانات شبه المنظمة باستخدام سلاسل JSON. يسمح أداء القراءة والكتابة المحسن للمتغير باستبدال أنواع Spark المعقدة الأصلية مثل البنيات والصفائف في بعض حالات الاستخدام.
كيف يمكنك الاستعلام عن البيانات المتغيرة؟
تستخدم البيانات المتغيرة نفس عوامل التشغيل للاستعلام عن الحقول والحقول الفرعية وعناصر الصفيف.
للاستعلام عن حقل، استخدم :
. على سبيل المثال، column_name:field_name
للاستعلام عن حقل فرعي، استخدم .
. على سبيل المثال، column_name:field_name.subfield_name
للاستعلام عن عنصر صفيف، استخدم [n]
مكان n
قيمة فهرس العدد الصحيح للعنصر. على سبيل المثال، للاستعلام عن القيمة الأولى في صفيف، column_name:array_name[0]
.
قد تكسر الاختلافات التالية الاستعلامات الموجودة عند الترقية من سلاسل JSON إلى متغير:
- تتم مطابقة جميع عناصر المسار المتغيرة بطريقة حساسة لحالة الأحرف. سلاسل JSON غير حساسة لحالة الأحرف. وهذا يعني أنه بالنسبة للمتغير،
column_name:FIELD_NAME
وابحثcolumn_name:field_name
عن حقول مختلفة في البيانات المخزنة. [*]
بناء الجملة غير معتمد لتحديد أو فك حزم كافة العناصر في صفيف.- ترميز
NULL
المتغير القيم بشكل مختلف عن سلاسل JSON. راجع قواعد فارغة متغيرة.
تحويل سلاسل JSON من وإلى متغير
في Databricks Runtime 15.3 وما فوق، تحتوي الدالة to_json
على وظائف إضافية لإرسال VARIANT
الأنواع إلى سلاسل JSON. يتم تجاهل الخيارات عند التحويل VARIANT
إلى سلسلة JSON. انظر to_json.
تحول parse_json
الدالة سلسلة JSON للكتابة VARIANT
. بينما parse_json(json_string_column)
هو العكس المنطقي ل to_json(variant_column)
، تصف قواعد التحويل التالية سبب عدم عكسها بالضبط:
- المسافة البيضاء غير محفوظة تماما.
- ترتيب المفاتيح عشوائي.
- قد يتم اقتطاع الأصفار اللاحقة بالأرقام.
parse_json
ترجع الدالة خطأ إذا كانت سلسلة JSON مشوهة أو تجاوزت حد حجم المتغير. استخدم الدالة try_parse_json
لإرجاع NULL
بدلا من ذلك عند حدوث خطأ في التحليل.
ما هي وظائف SQL للعمل مع المتغيرات؟
توفر وظائف Apache Spark SQL المتوفرة في Databricks Runtime 15.3 وما فوق أساليب للتفاعل مع البيانات المتغيرة. يتضمن الجدول التالي الدالة الجديدة ودالة سلسلة JSON المقابلة وملاحظات حول الاختلافات في السلوك.
إشعار
لاستخدام هذه الدالات مع PySpark DataFrames، قم باستيرادها من pyspark.sql.functions
. variant_explode
ولا variant_explode_outer
يتم دعمها في PySpark.
الدالة Variant | دالة سلسلة JSON | ملاحظات |
---|---|---|
variant_get | تحويل get_json_object | يأخذ تعبيرا ومسارا ونوعا. يتبع كافة القواعد لمسارات المتغيرات والصب والقيم الخالية. |
try_variant_get | try_cast get_json_object | يأخذ تعبيرا ومسارا ونوعا. يتبع كافة القواعد لمسارات المتغيرات والصب والقيم الخالية. |
is_variant_null | قيمة خالية | يتحقق ما إذا كان التعبير يخزن VARIANT ترميز .NULL استخدم is null للتحقق مما إذا كان تعبير الإدخال هو NULL . |
schema_of_variant | schema_of_json | عند تحديد المخطط ل ARRAY<elementType> ، elementType قد يتم استنتاج كما VARIANT لو كانت هناك أنواع متعارضة موجودة في البيانات. |
schema_of_variant_agg | schema_of_json_agg | عند عدم تحديد نوع أقل شيوعا، يتم اشتقاق النوع ك VARIANT . |
variant_explode | انفجر | المخرجات pos والأعمدةkey .value عند انفجار صفيف، يكون مفتاح الإخراج دائما خاليا. |
variant_explode_outer | explode_outer | المخرجات pos والأعمدةkey .value عند انفجار صفيف، يكون مفتاح الإخراج دائما خاليا. |
تتعامل المتغيرات مع التحويل و NULL
بشكل مختلف عن سلاسل JSON. راجع قواعد تحويل نوع المتغير والقواعد الخالية المتغيرة.