Zum Inhalt springen

Daten mit SQL und Ausdrücken transformieren

ca. 30 Minuten · ein Filter, ein Join, eine berechnete Spalte

Der Großteil der Arbeit in einem Workflow besteht aus einem kleinen, immer wiederkehrenden Vorgang: Sie nehmen eine Tabelle, formen sie um und schreiben das Ergebnis in eine neue Tabelle. Dieses Tutorial vermittelt genau diesen Vorgang – Zeilen auswählen und filtern, eine zweite Tabelle verknüpfen und eine berechnete Spalte hinzufügen – mit den beiden Werkzeugen, die Sie ständig brauchen: SQL und Spaltenausdrücken. Wenn Sie das Muster einmal verstanden haben, gilt es für nahezu jeden Transformationsschritt, den Sie je erstellen werden.

Es geht hier um die Form der Arbeit und darum, wo Sie Dinge nachschlagen – nicht darum, Funktionen auswendig zu lernen. PlaidCloud bietet über tausend SQL-Funktionen; Sie verlinken in die Referenz, statt sie nachzubilden.

Ein einzelner Tabellenschritt, der eine Rohtabelle orders liest, nur abgeschlossene Bestellungen behält, jede Bestellung mit einer Tabelle customers verknüpft, um die Region zu erhalten, und eine berechnete Spalte net_amount hinzufügt – das Ergebnis wird in eine neue Tabelle orders_clean geschrieben.

orders ─┐
├─► select · filter · join · calculated column ─► orders_clean
customers ─┘

Jede Quelltabelle bleibt unverändert. Ein Transformationsschritt liest aus einer oder mehreren Quellen und schreibt in ein Ziel – die Originale bleiben exakt so, wie sie waren. Dadurch lässt sich ein Workflow gefahrlos erneut ausführen und prüfen.

Vor den Schritten die eine Unterscheidung, die Sie im Kopf behalten sollten:

Werkzeug Was es ist Wo Sie es schreiben
SQL Die Abfrage, die ganze Tabellen auswählt, filtert und verknüpft Im SQL-Editor des Schritts
Ausdruck Eine einzelne Formel, die den Wert einer Spalte zeilenweise erzeugt In der Ausdruckszelle des Spaltenmappers

Mit SQL entscheiden Sie, welche Zeilen und welche Tabellen verwendet werden. Mit einem Ausdruck entscheiden Sie, was eine einzelne Spalte enthält. Viele Schritte erlauben beides: einen SQL-Schritt, der die Menge formt, und Ausdruckszellen, die die Spalten berechnen.

  • Ein PlaidCloud-Workspace und ein Projekt, in dem Sie arbeiten (starten Sie eine kostenlose Testversion, falls Sie noch keines haben).
  • Zwei Tabellen im Projekt – dieses Tutorial setzt orders (mit order_id, customer_id, status, amount, tax) und customers (mit customer_id, region) voraus. Falls Sie diese nicht haben, importiert das Tutorial Daten laden, transformieren und veröffentlichen zunächst Tabellen aus CSV.
  • Ein Workflow, der im Workflow-Explorer geöffnet ist – öffnen Sie die Registerkarte Workflows eines Projekts und doppelklicken Sie auf den Workflow. Siehe Workflow erstellen, falls Sie noch keinen haben.

Beginnen Sie eng: Holen Sie nur die Spalten und Zeilen, die Sie wirklich brauchen.

  1. Fügen Sie einen Tabellen-Transformationsschritt hinzu und öffnen Sie dessen SQL-Editor.

  2. Legen Sie als Quelle des Schritts Ihre Tabelle orders fest.

  3. Schreiben Sie eine Abfrage, die nur die benötigten Spalten behält und die übrigen Zeilen verwirft:

    SELECT
    order_id,
    customer_id,
    amount,
    tax
    FROM orders
    WHERE status = 'completed'
    AND amount > 0

Die WHERE-Klausel ist der Filter – alles, was keine abgeschlossene Bestellung mit einem Betrag ungleich null ist, erreicht das Ziel nie. Wenn Sie nur vier Spalten statt SELECT * auswählen, bleibt die nachgelagerte Tabelle schlank und ihr Zweck klar erkennbar.

Schreiben Sie SQL so, dass man es lesen kann. Eine Klausel pro Zeile, eine Spalte pro Zeile, ausgerichtetes CASE / WHEN – niemals ein dichter Einzeiler. Die Schaltfläche Formatieren des Editors (oder Umschalt+Alt+F, unter macOS Umschalt+Option+F) formatiert die Abfrage an Ort und Stelle neu, ohne ihre Wirkung zu ändern. Siehe Code in Editoren formatieren.

Ein Join bringt Spalten aus einer zweiten Tabelle neben die der ersten, abgeglichen über einen gemeinsamen Schlüssel. Hier möchten Sie die region jeder Bestellung, die in customers steht.

  1. Fügen Sie customers als zweite Quelle zum Schritt hinzu.

  2. Erweitern Sie die Abfrage, sodass sie über den gemeinsamen Schlüssel verknüpft und die benötigte Spalte holt:

    SELECT
    o.order_id,
    o.customer_id,
    o.amount,
    o.tax,
    c.region
    FROM orders AS o
    INNER JOIN customers AS c
    ON o.customer_id = c.customer_id
    WHERE o.status = 'completed'
    AND o.amount > 0

INNER JOIN behält nur Bestellungen mit einem passenden Kunden. Wenn Sie lieber jede Bestellung behalten möchten, auch wenn kein Kunde passt – mit leerer region –, verwenden Sie stattdessen LEFT JOIN. Ein nicht passender oder falscher Join-Schlüssel ist die häufigste Ursache dafür, dass ein Join zu viele oder zu wenige Zeilen liefert. Prüfen Sie daher die Zeilenanzahl in der Vorschau (nächster Schritt), bevor Sie fortfahren.

Tabellennamen in der Abfrage. Verweisen Sie auf jede Quelle mit dem Namen, den der Schritt ihr gibt. In den standardmäßigen Lakehouse-Warehouses kann eine physische Tabellen-ID Bindestriche enthalten – setzen Sie sie dann in Backticks (zum Beispiel `analyzetable_9f3c...`), damit die Engine sie als einen einzigen Bezeichner liest.

Schritt 3: Eine berechnete Spalte mit einem Ausdruck hinzufügen

Abschnitt betitelt „Schritt 3: Eine berechnete Spalte mit einem Ausdruck hinzufügen“

Berechnen Sie nun einen Wert, der in keiner der beiden Quellen vorhanden ist. Eine berechnete Spalte (Ausdrucksspalte) wertet eine Formel pro Zeile aus und schreibt das Ergebnis in eine neue Spalte. Fügen Sie net_amount hinzu – den Betrag nach Steuern.

  1. Fügen Sie im Spaltenmapper des Schritts eine neue Zielspalte mit dem Namen net_amount hinzu.

  2. Schreiben Sie in ihre Ausdruckszelle die Formel:

    amount - tax
  3. Für Bedingtes bieten Ausdrücke die übliche Logik. Ein Beispiel ist ein Versandkennzeichen:

    (
    "free"
    if amount >= 100
    else "standard"
    )

Eine Ausdruckszelle ist eine einzelne Formel, kein Skript. Sie wird als ein einziger Ausdruck ausgewertet. Ein mehrzeiliger Ausdruck muss daher seine eigenen äußeren Klammern mitbringen (wie oben) – andernfalls schlägt er zur Laufzeit fehl. Beschränken Sie jede Zelle auf den Wert einer Spalte; nutzen Sie den SQL-Schritt für alles, was mehrere Zeilen oder Tabellen umfasst.

Ob eine bestimmte Funktion existiert und wie sich ihre Argumente genau verhalten, hängt davon ab, auf welcher Lakehouse-Generation Ihr Projekt läuft – die beiden basieren auf unterschiedlichen Upstream-Engines. Raten Sie keinen Funktionsnamen, sondern schlagen Sie ihn nach:

Lakehouse Funktionsbibliothek
v1 Databend-SQL-Funktionen
v2 StarRocks-4.1-SQL-Funktionen

Die Ausdrucksreferenz ist der Einstiegspunkt – Zeichenfolgenoperationen, Datumsberechnungen, bedingte Logik, Typumwandlung und Aggregationen –, jeweils mit verlinkter Upstream-Syntax für jede Generation. Betrachten Sie sie als Nachschlagewerk, zu dem Sie zurückkehren, nicht als Text, den man von vorn bis hinten liest.

Formatieren funktioniert auch bei Ausdruckszellen und wendet die übliche Python-Abstandsregelung und Zeilenumbrüche an – praktisch für lange Bedingungen.

Sie müssen nicht den ganzen Workflow ausführen, um zu sehen, ob der Schritt das Gewünschte getan hat. Die Datenvorschau-Leiste zeigt die Ausgabe eines Schritts – die ersten 100 Zeilen mit typisierten Spalten – direkt im Workflow-Explorer.

  1. Führen Sie nur diesen Schritt aus, damit er seine Ausgabetabelle erzeugt. (Solange er noch nie gelaufen ist, meldet die Vorschau „No data yet — run the step to generate this table.“)
  2. Öffnen Sie die Vorschau: Wählen Sie den Schritt aus und klicken Sie auf Ausgabedaten in der Vorschau anzeigen (auch im Kontextmenü des Schritts verfügbar).
  3. Prüfen Sie die Form: Die ausgewählten Spalten sind vorhanden, region ist über den Join gekommen, net_amount wurde korrekt berechnet, und die Zeilenanzahl spiegelt den Filter wider.

Solange die Leiste geöffnet ist, richtet jeder andere ausgewählte Schritt die Vorschau auf dessen Ausgabe um – gehen Sie eine Kette von Schritten durch und beobachten Sie, wie sich die Daten in jeder Phase verändern. Für alles jenseits der ersten 100 Zeilen oder zum Aufteilen und Filtern klicken Sie auf Im Tabellen-Explorer öffnen. Alle Details finden Sie unter Schrittdaten in der Vorschau anzeigen.

Jeder dieser Vorgänge folgt demselben Grundmuster:

Eine oder mehrere Quelltabellen lesen, umformen und eine neue Zieltabelle schreiben. SQL bestimmt Zeilen und Tabellen; Ausdrücke bestimmen den Wert jeder Spalte; die Vorschau bestätigt das Ergebnis, bevor Sie sich auf eine vollständige Ausführung festlegen. Verketten Sie einige davon, und Sie haben eine Pipeline – das Ziel jedes Schritts wird zur Quelle des nächsten.

Schreiben Sie Zwischenergebnisse in Tabellen, wenn ein späterer Schritt oder ein Dashboard die Daten materialisiert benötigt, und in Ansichten, wenn Sie lieber beim Lesen berechnen und Speicher sparen möchten – eine Ansicht enthält keine eigenen Daten und aktualisiert sich automatisch, wenn sich ihre Quellen ändern.

Wenn eine Transformation SQL und Ausdrücke ganz übersteigt – individuelles Python, ein externes Paket, eigene Logik –, greifen Sie zu einer User Defined Transform-Schritt. Das ist die Ausnahme, nicht der Alltag; SQL und Ausdrücke decken den überwiegenden Teil der Formungsarbeit ab.