Dokumentation

Vom ersten Event zum ersten Dashboard.

Sie brauchen kein Data-Engineering-Projekt, um loszulegen.Legen Sie eine Organisation an, definieren Sie einen Event-Bucket, senden Sie ein paar Daten und bauen Sie Ihre erste Abfrage.

01

Konto anlegen

Legen Sie ein Konto und Ihre Organisation an.

Das erste Mitglied der Organisation wird Administrator und kann den Rest des Teams einladen.

Einstellungen → Organisation enthält Firmenname, Rechnungs-E-Mail und Anschrift. Unter Einstellungen → Marke legen Sie Logo und Farben fest, die Ihre Kunden auf geteilten und eingebetteten Dashboards sehen.

Das Registrierungsformular von Event Horizon DataDer Reiter Organisation in den Einstellungen, mit Firmenname, E-Mail und Anschrift

02

Daten definieren

Legen Sie einen Event-Bucket aus einem Beispiel-Event an oder definieren Sie seine Felder selbst.

Legen Sie Zeitstempel, Dimensionen und Kennzahlen fest.

Event Horizon nutzt diese Struktur, um die Daten abfragbar zu machen.

Ein Event-Bucket legt zugleich fest, was Sie senden und wie Sie es auswerten. Fügen Sie ein Beispielereignis ein, und die Spalten werden Ihnen vorgeschlagen, mit Typ, Einordnung und Begründung; Sie bestätigen oder korrigieren. Bis dahin wird nichts angelegt. Sie können sie auch von Hand deklarieren und für jede wählen, was sie ist:

Der Buckets-Bereich mit den Event-Buckets eines Arbeitsbereichs
timestamp_keyWann das Ereignis stattfand. Pflichtfeld, und die Grundlage jedes Zeitfilters.
dimensionWonach Sie gruppieren und filtern: Land, Kampagne, Abo-Tarif. Der Wert wird so gespeichert, wie er zum Zeitpunkt des Ereignisses war, also liest sich 2020 weiterhin so, wie das Unternehmen 2020 hieß.
metricWas Sie summieren oder mitteln: Umsatz, Dauer, Menge.

Geben Sie die Zeitzone an, aus der Ihre Daten stammen. Gespeichert wird stets in UTC, und eine nicht angegebene Zone gilt als UTC. Eine falsch gelesene Stunde lässt sich nachträglich nicht korrigieren.

Zeitstempel können ein ISO-8601-Text sein oder eine reine Epoch-Zahl in Sekunden oder Millisekunden. Die Einheit ergibt sich aus der Größenordnung, `1787232000` und `1787232000000` sind derselbe Zeitpunkt. Eine Zahl, die als Zeichenkette ankommt, wird genauso gelesen.

03

Quelle verbinden

Senden Sie Daten per Webhook, Änderungsstrom einer Datenbank, API-Workflow oder über eine andere unterstützte Aufnahmemethode.

Starten Sie den Workflow. Den Weg der Datenaufnahme übernimmt Event Horizon.

Der kürzeste Weg ist ein Webhook, und ein neuer Workflow öffnet bereits mit einem, der an einen Loader angeschlossen ist. Kommen Ihre Daten von woanders, tauscht die Leiste über der Arbeitsfläche ihn gegen eine andere gängige Form: eine Datenbank, der wir bei jeder Änderung folgen, oder eine API, die wir planmäßig aufrufen. Speichern Sie, und die Adresse wird für Sie erzeugt und ist nicht editierbar, da sie sich aus Ihrer Organisation und diesem Knoten ableitet und daher weder kollidieren noch gefälscht werden kann.

Die Workflow-Liste, in der Ingestion-Pipelines gebaut werden

Wählen Sie im Knoten-Inspektor Geheimnis verwalten → Erzeugen. Der Schlüssel wird einmalig angezeigt und nur als Hash gespeichert, und selbst wir können ihn nicht wiederherstellen. Geht er verloren, erzeugen Sie einen neuen. Senden Sie dann an die Adresse im URL-Feld des Knotens:

curl -X POST "https://ingest.eventhorizondata.com/webhooks/<org>/<node>" \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"evt-1","value":42}'

Beachten Sie den Host ingest. Die Ingestion hat einen eigenen Eingang, getrennt von der Anwendung; eine Anfrage an die Anwendungsdomain wird abgewiesen.

Starten Sie den Workflow. Ein Webhook-Knoten nimmt nur Datenverkehr an, solange sein Workflow läuft.

Senden Sie eine `event_id` im Body oder einen `Idempotency-Key`-Header, und eine Wiederholung derselben Kennung innerhalb von fünf Minuten wird verworfen statt doppelt gespeichert. Ohne beides gilt jede Anfrage als neu, denn wir raten lieber nicht, was zwei Ihrer Ereignisse zu einem macht.

Ein 401 bedeutet eines von zwei Dingen: Der Authorization-Header fehlt, oder der Schlüssel passt nicht. Ein Knoten, dessen Schlüssel nie erzeugt wurde, weist grundsätzlich alles ab.

04

Daten ansehen

Öffnen Sie den Bereich Erkunden und wählen Sie:

Was ist passiert?
Kennzahl.
Wem oder wo?
Dimension.
Wann?
Zeitraum.

Dann bauen Sie die Abfrage visuell. Ganz ohne SQL.

Der Query-Explorer braucht kein SQL: Wählen Sie einen Event-Bucket, eine Kennzahl, etwas zum Gruppieren und einen Zeitraum. Sie können die Frage auch mit Worten schreiben und auf Ask drücken: Der Entwurf kommt ausgefüllt zurück, mit einer Notiz dazu, was er abgedeckt und was er ausgelassen hat. Nichts läuft, bevor Sie es angesehen haben. Dashboards entstehen genauso und lassen sich per Link teilen oder mit Ihrer Marke in Ihr eigenes Produkt einbetten.

Der Query-Explorer, mit dem Ask-Feld über einer visuell gebauten Abfrage

05

Dashboard bauen

Machen Sie die Fragen, die Ihnen wichtig sind, zu Dashboard-Widgets. Filtern Sie die Ergebnisse und gehen Sie ins Detail.

Teilen Sie das Dashboard oder betten Sie es in Ihr eigenes Produkt ein.

06

Zugriff steuern

Laden Sie Ihr Team ein. Vergeben Sie Rollen. Nutzen Sie Zeilenbereiche, wenn jemand nur einen Teil der Daten sehen soll.

Einstellungen → Team lädt Personen ein, Rollen legt fest, was sie dürfen, und Zeilenbereiche beschränken jemanden auf einen Teil der Daten, etwa einen Kunden, der nur seine eigene Region sehen soll.

Der Reiter Team in den Einstellungen mit den Mitgliedern und ihren Rollen

07

SQL nutzen, wenn Sie es brauchen

Reicht die visuelle Oberfläche nicht, nutzen Sie die SQL-Oberfläche. Abfragen werden vor der Ausführung validiert, auf Ihren Mandanten beschränkt und auf ihre Kosten geprüft.

Speichern Sie nützliche Abfragen als Dashboard-Widgets. Verbinden Sie Python, R oder Jupyter, wenn Ihre Arbeit ein Notebook braucht.

Die meisten Fragen brauchen nie SQL, aber wenn Sie es möchten, hat Explore einen SQL-Tab. Sie schreiben gewöhnliches SQL gegen Ihre Event-Buckets, als wäre jeder eine Tabelle, ohne zu sehen, wie das Warehouse sie darunter speichert. Ihre Abfrage wird auf unserer Seite validiert und neu aufgebaut, an Ihre Organisation gebunden, sodass sie nur Ihre eigenen Daten lesen kann.

Jede Abfrage wird vor der Ausführung kalkuliert, so wie der Dry-Run von BigQuery: eine, die mehr lesen würde, als Ihr Tarif erlaubt, wird von vornherein abgelehnt, mit angezeigter Schätzung, damit eine schwere Abfrage schnell scheitert, statt Kosten zu verursachen. Speichern Sie eine Abfrage, die Ihnen gefällt, und ziehen Sie sie als Widget auf ein Dashboard.

Die Explore-Seite mit geöffnetem SQL-Tab: Ihre Buckets als Tabellen aufgelistet, ein SQL-Editor sowie die Aktionen Ausführen, Kosten schätzen und Speichern.

Um aus einem Notebook abzufragen, erzeugen Sie unter Einstellungen → API-Tokens ein Token und senden SQL an den Daten-Endpunkt aus Python, R oder Jupyter. Der Tenant stammt aus dem Token, sodass ein Token nur die Daten der eigenen Organisation erreichen kann:

curl -X POST "https://eventhorizondata.com/api/v1/data/sql" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"sql":"SELECT toStartOfDay(time) AS day, sum(value) AS total FROM orders GROUP BY day ORDER BY day"}'

Das Token gehört in den Authorization-Header und kann jederzeit widerrufen werden; ein widerrufenes Token funktioniert sofort nicht mehr. Die Antwort ist standardmäßig JSON, oder CSV mit `?format=csv` bzw. einem `Accept: text/csv`-Header. `GET /api/v1/data/schema` listet die Buckets auf, die Sie abfragen können.

Ereignisse kontinuierlich senden

Der Webhook oben ist der schnellste Einstieg. Für einen Datenstrom, der nicht aufhört, führen zwei weitere Wege zum selben Typ von Ingestion-Knoten, auf demselben Ingestion-Host, hinter einem Schlüssel, den Sie einmal erzeugen und den wir nur als Hash speichern.

Aus Ihrem eigenen Code installieren Sie das SDK. Es läuft in Node und im Browser, bündelt Datensätze und wiederholt Versuche für Sie:

npm install @event-horizon-data/probe

import { Probe } from '@event-horizon-data/probe';

const probe = new Probe({
  endpoint: 'https://ingest.eventhorizondata.com/ingest/probe/<org>/<node>',
  key: 'ehp_<key>',
});

probe.send({ user_id: '123', action: 'click', value: 42 });
await probe.flush();

Aus Logdateien oder syslog richten Sie den Collection-Agent auf einen Pfad, und er sendet jede Zeile, bereits typisiert. Führen Sie ihn mit npx aus oder laden Sie eine einzige eigenständige Binärdatei herunter, die kein installiertes Node benötigt:

npx @event-horizon-data/agent \
  --endpoint https://ingest.eventhorizondata.com/ingest/probe/<org>/<node> \
  --key ehp_<key> \
  --tail /var/log/app.log

Beide senden ein Ereignis auf dieselbe Weise wie der Webhook, sodass die Idempotenz-Regeln oben weiter gelten: eine wiederholte Kennung innerhalb von fünf Minuten wird verworfen. Der Agent übersteht außerdem einen Neustart, ohne eine Zeile zu verlieren oder doppelt zu senden. Beide sind quelloffen, MIT, auf npm.

Tarife und Abrechnung

Abgerechnet wird nach Ereignissen. Ein Ereignis ist ein Datensatz, der in einen Bucket geladen wird: eine Bestellung, eine Zahlung, ein Sensorwert, eine Webhook-Zustellung. Es wird einmal gezählt, bei seiner Ankunft, und ein wiederholter Stapel wird nicht erneut gezählt. Die Größe gehört nicht zur Zählung, und das Zurücklesen der Daten auch nicht: Speicher und das Lesebudget jeder Abfrage sind eigene Limits Ihres Tarifs.

Jeder Tarif (Starter, Studio, Agency, Scale) legt diese Grenzen fest, und die Preisseite zeigt dieselben Zahlen, die das Produkt durchsetzt. Sie beginnen mit einer 14-tägigen Testphase und wählen einen Tarif unter Einstellungen, in Tarif und Nutzung.

Dieser Bildschirm zeigt auch, was Sie verbraucht haben. Bei 80% eines Limits werden Sie gewarnt; bei 100% wird neue Ingestion eingereiht statt verworfen, bis Sie upgraden oder der Monat zurückgesetzt wird, sodass nichts verloren geht. Das Lesen Ihrer Daten bleibt durchgehend offen, damit die Zahlen und der Upgrade-Button stets erreichbar sind.

Senden Sie Ihr erstes Event.

Legen Sie ein Konto an und kommen Sie in Minuten von Rohdaten zu einem Dashboard.