Експорт ClickHouse
Події кліків зберігаються в ClickHouse. Робочі області тарифу Business та вище отримують DSN тільки для читання, який можна використовувати в будь-якому SQL-клієнті; всі інші можуть налаштувати експорт Parquet до S3 та підключити його як зовнішню таблицю (external table) у BigQuery, Snowflake або Redshift.
На жодному тарифі немає семплювання. Ви робите запити до тих самих рядків даних, на основі яких будується панель керування.
1. Прямий DSN (Business+)
Створіть DSN через панель керування або API:
curl -X POST \
https://api.elido.app/v1/workspaces/1/clickhouse-dsn \
-H "Authorization: Bearer $ELIDO_TOKEN" \
-d '{ "label": "BI read-only" }'Ви отримаєте DSN та пароль (відображаються один раз):
clickhouse://ws_8a2f:6c7d…@ch-eu-central-1.elido.app:9440/eventsЦей DSN призначений тільки для читання, обмежений кліками вашої робочої області за допомогою безпеки на рівні рядків (row-level security) та має ліміт 50 одночасних запитів на робочу область. Підключайтеся за допомогою будь-якого сумісного клієнта:
clickhouse-client \
--secure \
--host ch-eu-central-1.elido.app --port 9440 \
--user ws_8a2f --password '…' \
--database eventsDBeaver, DataGrip, Metabase, Grafana та ClickHouse JDBC драйвер працюють одразу «з коробки».
2. Схема
Основна таблиця, яка вам потрібна - clicks:
| Стовпець | Тип | Примітки |
|---|---|---|
click_id | String | відповідає X-Elido-Click-Id, що повертається під час редиректу |
link_id | String | зовнішній ключ до рядків посилань у вашій панелі керування |
workspace_id | UInt64 | фільтр на рівні рядків прив’язує це до вашої робочої області |
created_at | DateTime64(3) | UTC, точність до мілісекунд |
country | LowCardinality(String) | ISO-3166-1 alpha-2 |
device | LowCardinality(String) | mobile / tablet / desktop |
os | LowCardinality(String) | - |
browser | LowCardinality(String) | - |
referrer_host | String | витягнуто з Referer, може бути порожнім |
utm_source / medium / campaign / content / term | String | UTM-мітки, визначені в момент кліку |
ip_truncated | String | останній октет занулений перед збереженням (GDPR) |
user_agent_hash | String | SHA-256 від UA, збережено перші 16 символів префікса |
Рядки конверсій зберігаються в conversions:
| Стовпець | Тип | Примітки |
|---|---|---|
event_id | String | ваш ключ ідемпотентності |
click_id | String | ключ для об’єднання (join) з таблицею clicks |
event_name | LowCardinality(String) | purchase, refund, власні |
value, currency | Decimal64(2), String | - |
forwarded_meta / _ga4 / _mixpanel | Bool | прапорець доставки для кожного призначення |
3. Приклади запитів
Топ країн за обсягом кліків за останні 7 днів:
SELECT country, count() AS clicks
FROM clicks
WHERE created_at >= now() - INTERVAL 7 DAY
GROUP BY country
ORDER BY clicks DESC
LIMIT 10;Воронка Клік → Конверсія для конкретної кампанії:
SELECT
c.utm_campaign AS campaign,
count(distinct c.click_id) AS clicks,
count(distinct cv.click_id) AS conversions,
sum(cv.value) AS revenue,
count(distinct cv.click_id) /
count(distinct c.click_id) AS cvr
FROM clicks c
LEFT JOIN conversions cv USING (click_id)
WHERE c.utm_campaign IN ('spring_2026_dach', 'spring_2026_uk')
AND c.created_at >= '2026-04-01'
GROUP BY campaign;4. Запланований експорт в S3 / Parquet
Доступно на кожному платному тарифі. Експорт записує файли Parquet за вказаним вами префіксом, які подальші сховища даних можуть імпортувати як зовнішні таблиці.
curl -X POST \
https://api.elido.app/v1/workspaces/1/exports \
-H "Authorization: Bearer $ELIDO_TOKEN" \
-d '{
"destination": {
"type": "s3",
"bucket": "acme-bi-warehouse",
"prefix": "elido/clicks/",
"role_arn": "arn:aws:iam::1234:role/elido-export"
},
"schedule": "hourly",
"table": "clicks",
"partition": "toYYYYMMDD(created_at)"
}'Роль для експорту, яку ви надаєте, повинна мати права s3:PutObject та
s3:GetBucketLocation для цього префікса. Файли розділені (partitioned) за днями
(created_at=20260508/…), щоб зовнішні таблиці могли ефективно відсікати зайві дані (pruning).
5. Зовнішня таблиця BigQuery
Після того як дані Parquet почнуть надходити в S3 (або аналог у GCS -
встановіть destination.type на gcs), спрямуйте BigQuery на них:
CREATE EXTERNAL TABLE `acme_bi.elido_clicks`
WITH PARTITION COLUMNS
OPTIONS (
format = 'PARQUET',
uris = ['gs://acme-bi-warehouse/elido/clicks/*'],
hive_partition_uri_prefix = 'gs://acme-bi-warehouse/elido/clicks',
require_hive_partition_filter = true
);Snowflake та Redshift використовують свій власний синтаксис зовнішніх таблиць для того самого префікса S3.
6. Особливості
- Затримка (Latency) - прямий DSN бачить рядки протягом ~5 секунд після кліку. Заплановані експорти мають затримку відповідно до інтервалу розкладу (щогодини = відставання до 60 хв).
- Зберігання (Retention) - кліки зберігаються за замовчуванням 90 днів на тарифі Pro та 24 місяці на Business; експортовані файли Parquet залишаються у вас назавжди після запису.
- Прив’язка до регіону - DSN обмежені регіоном. Робоча область, прив’язана
до
ap-southeast-1, отримуєch-ap-southeast-1.elido.app; хост відповідає вибраному регіону (див. Прив’язка до регіону у посібнику з доказів SOC 2). - Еволюція схеми - тільки додавання. Нові стовпці додаються зі значеннями за замовчуванням; старі стовпці ніколи не перейменовуються. Ваші зовнішні таблиці не зламаються під час релізу.
Дивіться також
- Відстеження конверсій - як заповнюється таблиця
conversions - Докази SOC 2 / HIPAA - як виглядає таблиця журналу аудиту по сусідству
- Довідка API - повна схема для кінцевих точок конфігурації експорту