الانتقال إلى المحتوى الرئيسي
أعدّت مكتبة نيويورك العامة مجموعة البيانات هذه. وهي تضم بيانات تاريخية عن قوائم طعام الفنادق والمطاعم والمقاهي، بما في ذلك الأطباق وأسعارها. المصدر: http://menus.nypl.org/data البيانات متاحة ضمن الملك العام. البيانات مأخوذة من أرشيف المكتبة، وقد تكون غير مكتملة ويصعب استخدامها في التحليل الإحصائي. ومع ذلك، فهي شهية جدًا أيضًا. الحجم لا يتجاوز 1.3 مليون سجل عن الأطباق في قوائم الطعام — وهو حجم بيانات صغير جدًا بالنسبة إلى ClickHouse، لكنه يظل مثالًا جيدًا.

نزّل مجموعة البيانات

نفّذ الأمر:
استبدل الرابط بالرابط المُحدَّث من http://menus.nypl.org/data إذا لزم الأمر. يبلغ حجم التنزيل نحو 35 ميغابايت.

فك ضغط مجموعة البيانات

يبلغ الحجم غير المضغوط نحو 150 ميغابايت. البيانات مُطبَّعة وتتكوّن من أربعة جداول:
  • Menu — معلومات عن القوائم: اسم المطعم، والتاريخ الذي ظهرت فيه القائمة، وما إلى ذلك.
  • Dish — معلومات عن الأطباق: اسم الطبق إلى جانب بعض خصائصه.
  • MenuPage — معلومات عن الصفحات في القوائم، لأن كل صفحة تنتمي إلى قائمة معيّنة.
  • MenuItem — عنصر في القائمة: طبق مع سعره في صفحة قائمة معيّنة، مع روابط إلى الطبق وصفحة القائمة.

إنشاء الجداول

نستخدم نوع البيانات Decimal لتخزين الأسعار.

استيراد البيانات

لاستيراد البيانات إلى ClickHouse، شغّل:
نستخدم تنسيق CSVWithNames لأن البيانات مُمثَّلة بتنسيق CSV مع صفّ ترويسة. نعطّل format_csv_allow_single_quotes لأن حقول البيانات تستخدم علامات الاقتباس المزدوجة فقط، بينما قد تظهر علامات الاقتباس المفردة داخل القيم، ويجب ألا تؤدي إلى إرباك محلّل CSV. نعطّل input_format_null_as_default لأن بياناتنا لا تحتوي على NULL. وإلا فسيحاول ClickHouse تحليل تسلسلات \N، وقد يلتبس عليه الأمر بينها وبين \ داخل البيانات. يتيح الإعداد date_time_input_format best_effort تحليل حقول DateTime ضمن نطاق واسع من التنسيقات. على سبيل المثال، سيتعرّف على ISO-8601 من دون ثوانٍ مثل ‘2000-01-01 01:02’. ومن دون هذا الإعداد، لا يُسمح إلا بتنسيق DateTime ثابت.

إلغاء تطبيع البيانات

تُعرض البيانات في عدة جداول بصيغة صيغة مُطبَّعة. وهذا يعني أنك تحتاج إلى تنفيذ JOIN إذا كنت تريد إجراء استعلام، مثلًا، للحصول على أسماء الأطباق من عناصر القائمة. وبالنسبة إلى المهام التحليلية المعتادة، يكون التعامل مع البيانات المضمومة مسبقًا عبر JOIN أكثر كفاءة بكثير لتجنّب تنفيذ JOIN في كل مرة. ويُطلق على هذا النوع اسم البيانات “إلغاء تطبيع”. سننشئ جدولًا باسم menu_item_denorm يحتوي على جميع البيانات المضمومة معًا عبر JOIN:

تحقّق من البيانات

Query
Response

نفّذ بعض الاستعلامات

متوسط أسعار الأطباق تاريخيًا

Query
Response
خُذه بتحفّظ.

أسعار البرغر

Query
Response

فودكا

Query
Response
للحصول على vodka، علينا كتابة ILIKE '%vodka%'، وهذا بالتأكيد يبعث برسالة واضحة.

الكافيار

لنطبع أسعار الكافيار، ولنطبع أيضًا اسم أي طبق يحتوي على الكافيار.
Query
Response
على الأقل لديهم كافيار مع الفودكا. رائع جدًا.

ساحة التجربة عبر الإنترنت

تُرفع البيانات إلى ClickHouse Playground، مثال.
آخر تعديل في ٢ يوليو ٢٠٢٦