1–33). وتشترك الاستعلامات داخل العائلة الواحدة (a, b, c, …) في مخطط الربط نفسه، لكنها تختلف في شروط التصفية الخاصة بها.
المراجع
- ما مدى جودة محسّنات الاستعلامات حقًا؟ (Leis وآخرون، VLDB 2015)
- مستودع Join Order Benchmark
إنشاء الجداول
init_cloud.sql في مستودع ClickHouse.
يستخدم كل جدول المحرّك MergeTree، ويُرتَّب حسب عمود المفتاح الأساسي id، بما يعكس مخطط PostgreSQL الأصلي حيث يعرّف كل جدول id integer NOT NULL PRIMARY KEY. وتُعيَّن أعمدة PostgreSQL التي تقبل NULL إلى الأنواع Nullable(...).
أنشئ الجداول:
تحميل البيانات
aka_name.csv, title.csv, …).
تستخدم ملفات CSV هذه دلالات COPY الخاصة بـ PostgreSQL مع ESCAPE '\': إذ يُستخدم backslash لتجاهل تأثير حرف الاقتباس فقط داخل حقل محاط بعلامتَي اقتباس، بينما يكون backslash خارج علامات الاقتباس حرفًا عاديًا.
ويتوقع ClickHouse ملفات CSV المتوافقة مع RFC 4180 (علامات اقتباس مزدوجة، من دون استخدام backslash كحرف هروب)، لذا يجب إعادة ترميز الملفات أولًا.
ينفّذ convert_csv.py عملية إعادة الترميز هذه.
فهو يقرأ ملف CSV الأصلي من stdin ويكتب ملف CSV قياسيًا إلى stdout، مع مضاعفة علامات الاقتباس المضمّنة والحفاظ على الحقول الفارغة غير المحاطة بعلامات اقتباس (والتي يعيّنها ClickHouse إلى NULL في الأعمدة من النوع Nullable).
لبناء الجداول من ملفات CSV الأصلية:
- أنشئ الجداول (انظر أعلاه).
- نزّل مجموعة بيانات IMDb كملف
imdb.tgz، باتباع التعليمات الواردة في مستودع Join Order Benchmark. - حوّل البيانات واستوردها:
clickhouse client --database job --query "SELECT * FROM title ORDER BY id FORMAT Parquet" > title.parquet.
الأحجام التفصيلية للجداول:
| Table | الحجم (عدد الصفوف) | الحجم (بعد الضغط في ClickHouse) |
|---|---|---|
| aka_name | 901,343 | 31.86 MiB |
| aka_title | 361,472 | 14.32 MiB |
| cast_info | 36,244,344 | 296.25 MiB |
| char_name | 3,140,339 | 107.95 MiB |
| comp_cast_type | 4 | 132.00 B |
| company_name | 234,997 | 8.38 MiB |
| company_type | 4 | 162.00 B |
| complete_cast | 135,086 | 748.80 KiB |
| info_type | 113 | 1.25 KiB |
| keyword | 134,170 | 1.88 MiB |
| kind_type | 7 | 177.00 B |
| link_type | 18 | 284.00 B |
| movie_companies | 2,609,129 | 21.20 MiB |
| movie_info | 14,835,720 | 300.46 MiB |
| movie_info_idx | 1,380,035 | 8.01 MiB |
| movie_keyword | 4,523,930 | 21.06 MiB |
| movie_link | 29,997 | 178.21 KiB |
| name | 4,167,491 | 131.16 MiB |
| person_info | 2,963,664 | 154.12 MiB |
| role_type | 12 | 246.00 B |
| title | 2,528,312 | 78.04 MiB |
| الإجمالي | 74,190,187 | 1.15 GiB |
system.tables.total_bytes، وهي تستند إلى تعريفات الجداول الواردة أعلاه.)
الاستعلامات
settings.json.
راجِع ملف README للاطلاع على المشكلات المعروفة والملاحظات المتعلقة ببعض الاستعلامات.
تشير الاستعلامات إلى الجداول بأسمائها، لذا شغّلها على قاعدة البيانات job (على سبيل المثال، باستخدام clickhouse client --database job).
مثال على استعلام (1a):