| إدخال | إخراج | اسم مستعار |
|---|---|---|
| ✔ | ✗ |
الوصف
FeatureCollection من GeoJSON وينتج صفًا واحدًا لكل معلم. ويحتوي كل صف على المخطط الثابت التالي:
| العمود | النوع | الوصف |
|---|---|---|
id | String | العضو id الخاص بالمعلم (سلسلة JSON أو رقم)، ويُخزَّن كنص؛ وتكون قيمته سلسلة فارغة إذا كان id غير موجود أو كانت قيمته null. |
geometry | Geometry | هندسة المعلم، وتُخزَّن كنوع Geometry من Variant. |
properties | Nullable(JSON) | الكائن properties الخاص بالمعلم، ويُخزَّن في عمود JSON شبه مُهيكل. وتُحفَظ القيمة الصريحة "properties": null على أنها NULL. |
Geometry في ClickHouse (وهو Variant). وأنواع هندسة GeoJSON المدعومة هي Point وLineString وMultiLineString وPolygon وMultiPolygon. أما نوعا هندسة GeoJSON الآخران، GeometryCollection وMultiPoint، فلا يمكن تمثيلهما بالنوع Geometry؛ وتؤدي قراءة أحدهما في العمود geometry إلى ظهور استثناء افتراضيًا، ويمكن تغيير هذا السلوك بحيث يُدرَج NULL بدلًا من ذلك — راجع التعامل مع أنواع الهندسة غير المدعومة أدناه. افتراضيًا، لا تكون قيمة العمود geometry هي NULL إلا عندما تكون هندسة المعلم قيمة JSON صريحة من null؛ ومع input_format_geojson_unsupported_geometry_handling = 'null' تصبح أيضًا NULL عند وجود نوع هندسة غير مدعوم.
يُتحقَّق من صحة بنية المستند: يجب أن تكون قيمة type في المستوى الأعلى هي FeatureCollection، ويجب أن تكون قيمة type لكل عنصر ضمن features هي Feature. كما يجب أن تستوفي الإحداثيات قيود البنية الهندسية في GeoJSON — إذ يجب أن يحتوي LineString (وكل خط في MultiLineString) على موضعين على الأقل، ويجب أن تكون الحلقة في Polygon (وكل حلقة في MultiPolygon) مغلقة وأن تحتوي على أربعة مواضع على الأقل. وتُرفَض المستندات غير السليمة بدلًا من تحميلها بصمت.
تُتجاهَل المفاتيح الأخرى في الكائن FeatureCollection (مثل name أو crs) والمفاتيح الأخرى داخل كل كائن Feature (مثل bbox).
ترتيب المفاتيح مرن: يمكن أن تظهر type في المستوى الأعلى قبل المصفوفة features أو بعدها، وداخل الكائن الهندسي يمكن أن تظهر coordinates قبل type أو بعدها.
يعيد استنتاج المخطط المخطط الثابت أعلاه، لذا يعمل DESCRIBE وSELECT ... FROM format(...) من دون الحاجة إلى تعريف جدول.
مثال للاستخدام
london.geojson، الذي يحتوي على مزيج من أنواع الهندسة:
Query
Response
.geojson تلقائيًا، لذا يمكن الاستغناء عن وسيطة الصيغة:
Query
variantType للتحقق من النوع الفعلي لكل كائن من نوع Geometry:
Query
Response
Query
Response
Geometry إلى إرجاع القيمة عندما يحتوي الصف على ذلك النوع، وإلا فتُرجَع القيمة الافتراضية لذلك النوع — (0,0) لـ Point و[] للأنواع المستندة إلى المصفوفات — لذا استخدم variantType(geometry) لمعرفة النوع المعيَّن.
يمكننا أيضًا إدخال بيانات GeoJSON إلى جدول:
Query
Query
Response
Query
Response
التعامل مع أنواع هندسة غير المدعومة
GeometryCollection وMultiPoint — لا يمكن تمثيلها بالنوع Geometry في ClickHouse. يمكنك التحكم في ما يحدث عندما يلزم تخزين هندسة من هذا النوع في العمود geometry باستخدام الإعداد input_format_geojson_unsupported_geometry_handling. القيم الممكنة هي:
'throw'— طرح استثناء (الافتراضي)'null'— إدراج قيمةNULLفي العمودgeometryومتابعة التحليل
geometry. وعندما لا يكون geometry عمود إخراج مطلوبًا (على سبيل المثال SELECT id FROM ...)، تظل الهندسة غير المدعومة خاضعة للتحقق من صحة البنية، لكنها لا تؤدي إلى تطبيق هذا السلوك — فلا يُطرح استثناء ولا تُدرج قيمة NULL، لأنه لا تتم مادية أي قيمة هندسة.