Membangun ulang dashboard di atas ClickHouse: tujuh dataset yang melatih uniqHLL12, quantileTDigest, sampling, window function, dan dictGet, lalu 18 chart di empat dashboard.
Panduan ini menuntun Anda melalui setup manual lengkap untuk seluruh dataset, chart, dan dashboard ClickHouse di Superset. Ikuti panduan ini untuk memahami apa yang dilakukan setiap visualisasi dan bagaimana visualisasi itu dibangun.
Ingin melompat ke depan? Jalankan skrip impor agar semuanya dibuat secara otomatis:
Skrip membuat koneksi, lalu mengimpor semua 7 dataset, 18 chart, dan 4 dashboard sekaligus. Gunakan panduan ini sebagai referensi atau untuk membangun ulang bagian tertentu.
Penting — kredensial placeholder di superset/dashboards/dashboard_export_*.zip.
ZIP dashboard yang di-commit memiliki databases/*.yaml yang disunting menjadi placeholder:
Impor otomatis (add_clickhouse_connection.sh) — bekerja apa adanya. Skrip menulis ulang sqlalchemy_uri di dalam ZIP menggunakan ${CLICKHOUSE_HOST} / ${CLICKHOUSE_USER} / ${CLICKHOUSE_PASSWORD} dari .env Anda sebelum mengirimkannya ke endpoint impor, sehingga host placeholder tidak pernah sampai ke Superset.
Impor manual melalui UI Superset — database yang diimpor akan dibuat dengan your-instance.clickhouse.cloud dan tidak akan terhubung. Setelah impor, buka Settings → Database Connections → Edit pada entri tersebut dan ganti sqlalchemy_uri dengan URI ClickHouse Cloud Anda yang sebenarnya (mis. clickhousedb://default:<PASSWORD>@<your-host>.clickhouse.cloud:8443/analytics?secure=true).
Mengekspor ulang dashboard Anda sendiri — Superset menanamkan host ClickHouse Anda yang sebenarnya ke dalam hasil ekspor. Sebelum meng-commit, sunting host tersebut kembali menjadi your-instance.clickhouse.cloud agar identifier layanan Anda tidak bocor ke riwayat git.
Prasyarat: Lapisan analytics sudah terisi (dbt run dilakukan pada Langkah 7.3) dan dictionary sudah ada (scripts/04_create_dictionary.sql dilakukan pada Langkah 7.4).
Dipakai oleh: Capabilities Showcase — mendemonstrasikan penghitungan perkiraan uniqHLL12() dibandingkan uniq() yang eksak.
Buka Datasets → + Dataset.
Klik Switch to SQL Lab (atau pilih tab Virtual).
Setel Database = NYC Taxi — ClickHouse Cloud.
Tempelkan SQL:
SELECT toDate(pickup_at) AS day, uniq(trip_id) AS exact_unique_trips, uniqHLL12(trip_id) AS approx_unique_trips, round( abs(uniq(trip_id) - uniqHLL12(trip_id)) / uniq(trip_id) * 100, 2 ) AS pct_errorFROM analytics.fact_trips FINALWHERE pickup_at >= today() - INTERVAL 30 DAYGROUP BY dayORDER BY day
Beri nama CH Approx Unique Trips (uniqHLL12) lalu klik Save.
Dipakai oleh: Capabilities Showcase — mendemonstrasikan window function (AVG(...) OVER (...)) untuk revenue bergulir menurut borough.
Buka Datasets → + Dataset → Virtual.
Setel Database = NYC Taxi — ClickHouse Cloud.
Tempelkan SQL:
SELECT week, pickup_borough, trips, revenue, round(avg(revenue) OVER ( PARTITION BY pickup_borough ORDER BY week ROWS BETWEEN 3 PRECEDING AND CURRENT ROW ), 2) AS rolling_4wk_avg_revenueFROM ( SELECT toStartOfWeek(pickup_at) AS week, pickup_borough, count() AS trips, round(sum(fare_amount_usd), 2) AS revenue FROM analytics.fact_trips FINAL GROUP BY week, pickup_borough)ORDER BY week DESC, revenue DESCLIMIT 100
Dipakai oleh: Capabilities Showcase — mendemonstrasikan quantileTDigest() sebagai fungsi persentil native ClickHouse.
Buka Datasets → + Dataset → Virtual.
Setel Database = NYC Taxi — ClickHouse Cloud.
Tempelkan SQL:
SELECT vendor_name, quantileTDigest(0.5)(fare_amount_usd) AS p50_fare, quantileTDigest(0.95)(fare_amount_usd) AS p95_fare, quantileTDigest(0.99)(fare_amount_usd) AS p99_fare, count() AS trip_countFROM analytics.fact_trips FINALGROUP BY vendor_nameORDER BY vendor_name
Beri nama CH Fare Percentiles (quantileTDigest) lalu klik Save.
Dipakai oleh: Capabilities Showcase — mendemonstrasikan dictGet() untuk pengayaan dimensi tanpa JOIN.
Membutuhkan: dictionary analytics.taxi_zones_dict dari Langkah 7.4 (scripts/04_create_dictionary.sql).
Buka Datasets → + Dataset → Virtual.
Setel Database = NYC Taxi — ClickHouse Cloud.
Tempelkan SQL:
SELECT dictGet('analytics.taxi_zones_dict', 'borough', toUInt16(pickup_location_id)) AS borough, dictGet('analytics.taxi_zones_dict', 'zone', toUInt16(pickup_location_id)) AS zone, count() AS trips, round(avg(fare_amount_usd), 2) AS avg_fareFROM default.trips_rawWHERE pickup_at >= today() - INTERVAL 7 DAYGROUP BY borough, zoneORDER BY trips DESC
Beri nama CH Zone Dict Lookup lalu klik Save.
Dataset ini membaca dari default.trips_raw (tabel raw) alih-alih analytics.fact_trips untuk menunjukkan dictionary bekerja di lapisan sumber tanpa pra-pemrosesan apa pun.
Setelah menyelesaikan Bagian 3, buka http://localhost:8088. Di bawah Dashboards, Anda seharusnya melihat 7 total — 3 dashboard Snowflake (dari setup Bagian 1) dan 4 dengan awalan CH —.
Dataset virtual tidak mengembalikan baris apa pun
Jendela 30 hari / 7 hari pada beberapa query memerlukan data terbaru. Jika data migrasi Anda semuanya historis, ganti filter waktu dengan tanggal tetap:
-- Replace: WHERE pickup_at >= today() - INTERVAL 30 DAY-- With: WHERE pickup_at >= '2023-01-01'
Error 403 dari skrip impor
Cookie sesi Superset Anda telah kedaluwarsa. Keluar lalu masuk kembali, kemudian jalankan ulang.