Kurs
Wenn du mit Snowflake arbeitest, gehört das Einfügen von Daten in Tabellen zu den grundlegenden Operationen, die du durchführen wirst. Mit der Anweisung INSERT INTO
kannst du neue Datensätze in eine Tabelle einfügen, egal ob du manuell Werte eingibst, mehrere Zeilen einfügst oder Daten aus anderen Tabellen abrufst.
In diesem Leitfaden gehe ich mit dir durch die Syntax, verschiedene Anwendungsfälle, Best Practices und allgemeine Schritte zur Fehlerbehebung, um INSERT INTO
effektiv in Snowflake zu nutzen.
Was ist der Befehl INSERT INTO in Snowflake?
Bevor wir die Syntax besprechen, müssen wir zunächst den Zweck von INSERT INTO
in Snowflake und die verschiedenen Anwendungsfälle verstehen.
Das Hinzufügen von Daten zu einer Datenbank ist ein wichtiger Teil der Verwaltung einer Datenbank. Die Anweisung INSERT INTO
wird in Snowflake verwendet, um neue Datenzeilen in eine Tabelle einzufügen. Sie kann einzelne Zeilen, mehrere Zeilen oder Massendaten aus einer anderen Tabelle einfügen. Du kannst entweder Daten einfügen, indem du jeden Wert für eine bestimmte Zeile oder einen Satz von Zeilen manuell eingibst, oder eine SQL-Anweisung verwenden, um Daten aus anderen Datenquellen zu laden.
> INSERT INTO
ist zwar ein grundlegender Befehl, aber es ist ein guter Anfang, Snowflake und seine Architektur zu verstehen. Schau dir tdieses Tutorial zu Snowflake an, um die Grundlagen aufzufrischen!
Anwendungsfälle für INSERT INTO
Hier sind einige der häufigsten Anwendungsfälle für die INSERT INTO
Klausel.
- Manuelles Hinzufügen neuer Datensätze zu einer Tabelle.
- Masseneinfügung mehrerer Zeilen in einer einzigen Abfrage.
- Übertragen von Daten von einer Tabelle in eine andere.
- Anhängen neuer Daten an einen bestehenden Datensatz.
- Auffüllen einer Tabelle aus den Ergebnissen einer
SELECT
Abfrage.
> Das Erlernen dieser Klausel ist grauch für Snowflake-Interviews!
Syntax von INSERT INTO in Snowflake
Jetzt kommen wir zur eigentlichen Syntax. Lass uns zunächst die einfachste Verwendung von INSERT INTO
besprechen: das Hinzufügen von Daten zu einer Zeile durch manuelle Eingabe der Werte.
Die grundlegende Syntax für INSERT INTO
lautet wie folgt:
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
Du schreibst die Klausel INSERT INTO
aus, gefolgt von der table_name
, in die wir die Daten einfügen. Um die Reihenfolge der Daten genau festzulegen, können wir die Namen der Spalten, die in Klammern folgen, als (column1, column2, column3)
angeben. Der letzte Teil ist das Schreiben der VALUES (value1, value2, value3)
, die in die jeweiligen Spalten eingefügt werden.
Einfügen von Daten ohne Angabe von Spaltennamen
Wenn du die Spaltennamen weglässt, geht Snowflake davon aus, dass die Werte in der gleichen Reihenfolge wie im Schema der Tabelle angegeben werden. Das heißt, der erste Wert wird für die erste Spalte in der Tabelle angenommen usw.
INSERT INTO table_name
VALUES (value1, value2, value3);
Bei diesem Ansatz musst du sicherstellen, dass die Werte in der gleichen Reihenfolge wie die Spalten stehen, sonst kann es zu Problemen mit den Datentypen oder der Datenkonsistenz kommen.
Erweiterte Verwendung von INSERT INTO in Snowflake
Einige der fortgeschritteneren Verwendungen von INSERT INTO
sind das Einfügen einer einzelnen Zeile aus einer anderen Tabelle, das Einfügen mehrerer Zeilen oder das Einfügen von Daten mit Bedingungen. Dies ist eine nützliche Methode, um Daten zu einer Tabelle hinzuzufügen oder Daten in einer separaten Tabelle zu archivieren.
Verwendung von INSERT INTO mit mehreren Zeilen
Anstatt eine Zeile nach der anderen einzufügen, kannst du mehrere Zeilen in einer einzigen Anweisung einfügen:
INSERT INTO employees (id, name, department)
VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'Finance'),
(3, 'Charlie', 'IT');
Dieser Ansatz reduziert den Overhead bei der Abfrage und verbessert die Leistung. Beachte, dass jede Zeile vollständig von einer Klammer umgeben ist und von einem Komma gefolgt wird. Wenn du das nicht tust, kann das zu Fehlern führen.
Einfügen von Daten aus einer anderen Tabelle
Um Daten von einer Tabelle in eine andere zu kopieren, verwendest du INSERT INTO
mit einer SELECT
Anweisung:
INSERT INTO target_table (column1, column2)
SELECT
column1,
column2
FROM source_table ;
Dies ist nützlich, um Daten zu archivieren, Daten vor dem Einfügen umzuwandeln oder gefilterte Datensätze anzuhängen. Wenn die Quelldaten die gleiche Spaltenreihenfolge wie das Ziel haben, kannst du die Spalten neben dem target_table
nicht benennen.
Bedingte Einsätze
Du kannst Daten basierend auf einer Bedingung in deine SELECT
Anweisung einfügen, sodass du nicht eine ganze Tabelle kopierst.
INSERT INTO high_salary_employees (id, name, salary)
SELECT
id,
name,
salary
FROM employees
WHERE salary > 100000;
Dadurch wird sichergestellt, dass nur Arbeitnehmer, die die Bedingung erfüllen, in die neue Tabelle eingefügt werden. Auf diese Weise wird die Datenintegrität gewahrt und der Speicher- und Rechenaufwand reduziert.
Best Practices für die Verwendung von INSERT INTO in Snowflake
Hier sind einige bewährte Methoden für die Verwendung von INSERT INTO
in Snowflake. Dazu gehört die Verwendung effizienterer Anweisungen wie MERGE
und die Validierung von Daten vor dem Einfügen.
MERGE anstelle von INSERT INTO für Upserts verwenden
Wenn du neue Datensätze einfügen, aber bestehende Datensätze aktualisieren musst, ist MERGE
die bessere Wahl, weil es bestehende Daten abgleichen kann.
Es sucht nach aktuellen Zeilen, die ein bestimmtes Kriterium erfüllen (z.B. eine vorhandene Mitarbeiter-ID) und kann bestimmte Werte in der Zieltabelle anhand einer Quelltabelle aktualisieren. Wenn es keine Übereinstimmung gibt, fügt es die neuen Daten ein. Dieses Konzept ist als "Upsert" (Update und Insert) bekannt.
Im Folgenden findest du ein Beispiel für die Verwendung von MERGE
:
MERGE INTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET t.salary = s.salary
WHEN NOT MATCHED THEN
INSERT (id, name, salary) VALUES (s.id, s.name, s.salary);
> Die MERGE
Erklärung wird schnell zum Standardverfahren und ist einBestandteil der Snowflake-Zertifizierungen.
Batch-Einsätze und Leistung
Um die Leistung beim Einfügen großer Datensätze zu verbessern, solltest du dich auf die Durchführung von Batch-Inserts konzentrieren. Das reduziert den Overhead, weil nicht bei jeder Last neue Verbindungen aufgebaut werden müssen, und verbessert die Gesamtleistung. Hier sind einige Tipps zum Einfügen von Stapeln:
- Verwende Masseneinfügungen, anstatt Zeile für Zeile einzufügen.
- Verwende
COPY INTO
, wenn du große Daten aus externen Quellen lädst. Das ist nützlich, wenn du eine Verbindung zu einem System wie S3 herstellst. - Vermeide es, Daten innerhalb von Schleifen in Skripten einzufügen; die Stapelverarbeitung ist effizienter. Beende also die Schleife, speichere die Daten als eine einzige Datenquelle und lade dann diese gesamte Datenquelle auf einmal.
Datenüberprüfung vor dem Einfügen
Bevor du Daten einfügst, musst du sie validieren. Wenn deine Daten nicht validiert sind, kann das zu vielen Problemen oder gar zum Scheitern führen. Überlege dir, wie die Daten nachgelagert verwendet werden können und wie deine eingefügten Daten aussehen sollen. Hier sind einige wichtige Dinge, auf die du achten solltest:
- Die Datentypen stimmen mit den Spaltendefinitionen überein.
- Erforderliche Felder sind nicht null.
- Keine doppelten Primärschlüssel oder Verstöße gegen eindeutige Beschränkungen.
Fehlerbehandlung bei INSERT INTO in Snowflake
Wie bereits erwähnt, kann es beim Einfügen von Daten gelegentlich zu Fehlern kommen. Hier sind einige Tipps, wie du mit häufigen Fehlern umgehen kannst.
Umgang mit doppelten Schlüsseln
Snowflake selbst erzwingt nicht unbedingt eindeutige Beschränkungen, d.h. es ist möglich, doppelte Daten einzufügen.
Wenn du dir Sorgen um doppelte Schlüssel machst, ist es vielleicht besser, sie mit MERGE
oder ON CONFLICT
(falls unterstützt) zu behandeln. Schließlich kannst du mit WHERE
auch eine Bedingung zu deiner Einfügung hinzufügen, um alles auszuschließen, was in der Zieltabelle vorhanden ist.
INSERT INTO employees (id, name)
SELECT id, name FROM new_employees
WHERE id NOT IN (SELECT id FROM employees);
Umgang mit NULL-Werten
Stelle sicher, dass nullbare Spalten NULL-Werte zulassen oder Standardwerte bereitstellen. Snowflake setzt alle NOT NULL-Spaltenbeschränkungen durch. Wenn du also NULL-Daten in einer Spalte mit dieser Beschränkung hast, schlägt deine Einfügung fehl. Das Wichtigste dabei ist, dass du deine Daten verstehst und weißt, wo NULLs erlaubt sind und wo nicht.
Fehlersuche bei häufigen Problemen mit INSERT INTO
Andere Probleme können sich auf Datentypen oder Berechtigungsfragen beziehen. Wir werden kurz besprechen, wie du mit diesen Problemen umgehen kannst.
Unstimmigkeiten beim Datentyp
Es treten Fehler auf, wenn du einen Wert mit dem falschen Datentyp einfügst. Du kannst das manchmal umgehen, indem du deine Daten typisieren lässt, aber das kann zu NULLs führen. Um sicherzugehen, dass deine eingefügten Daten mit denen des Ziels übereinstimmen, kannst du versuchen, auf information_schema
(wo du Rechte hast) nachzusehen und dein Schema auf diese Weise zu überprüfen:
SELECT column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'employees';
Probleme mit Berechtigungen
Wenn du einen Berechtigungsfehler erhältst, überprüfe die Benutzerrollen und -berechtigungen:
SHOW GRANTS TO USER current_user;
Wenn du nicht die Erlaubnis hast, INSERT
zu benutzen, frage deinen Vorgesetzten, deine IT-Abteilung oder den Eigentümer des Datensatzes. Wenn du in der Lage bist, dir selbst Rechte zu erteilen, dann verwende den folgenden Code:
GRANT INSERT ON TABLE employees TO user_name;
Fazit
Der Befehl INSERT INTO in Snowflake ist ein leistungsfähiges Werkzeug, um Tabellen effizient mit Daten zu füllen. Ganz gleich, ob du einzelne Zeilen einfügst, Massendaten oder Daten aus einer anderen Tabelle kopierst, die Kenntnis der Syntax und der Best Practices gewährleistet Datenintegrität und Leistung. Du kannst eine robuste und effiziente Snowflake-Datenbank pflegen, indem du Fehler behandelst, Daten validierst und Einfügungen optimierst.
Um mehr über Snowflake zu erfahren, empfehle ich dir die folgenden Kurse:
FAQs
Was ist der Unterschied zwischen INSERT INTO und COPY INTO in Snowflake?
INSERT INTO
wird zum Einfügen bestimmter Datenzeilen verwendet, während COPY INTO
für das Massenladen großer Datensätze aus externen Quellen wie AWS S3 oder Azure Blob Storage optimiert ist.
Unterstützt INSERT INTO Transaktionen in Snowflake?
Ja, Snowflake unterstützt Transaktionen, so dass du BEGIN
, COMMIT
und ROLLBACK
verwenden kannst, um die Datenintegrität beim Einfügen von Daten zu gewährleisten.
Was sind die besten Praktiken für die Leistung beim Einfügen großer Datenmengen?
Verwende Batch-Inserts, anstatt Zeile für Zeile einzufügen, nutze COPY INTO
für Bulk-Loads und vermeide unnötige Indizes, die die Einfügeleistung verlangsamen können.
Kann ich in Snowflake INTO in eine sichere Ansicht einfügen?
Nein. Ansichten - einschließlich sicherer Ansichten - sind virtuelle Tabellen, in die nicht direkt geschrieben werden kann. Du musst in die zugrundeliegende Basistabelle einfügen oder eine transiente Staging-Tabelle verwenden und dann die Ansicht neu erstellen oder aktualisieren.
Wie kann ich JSON-Daten in eine VARIANT-Spalte einfügen?
Schließe das JSON in einfache Anführungszeichen ein und wandle es in VARIANT
um , z.B. INSERT INTO t (payload) VALUES (PARSE_JSON('{\"key\":\"value\"}'));
. Snowflake bewahrt das halbstrukturierte Format automatisch für spätere Abfragen auf.
Wie kann ich eine versehentliche INSERT INTO-Eingabe am schnellsten rückgängig machen?
Nutze die Zeitreise, um die Tabelle an einem Punkt vor dem Einfügen wiederherzustellen: CREATE OR REPLACE TABLE my_table AS SELECT * FROM my_table AT (TIMESTAMP => '2025-06-17 09:00:00');
. Dadurch werden manuelle DELETE-Anweisungen vermieden und das Clustering bleibt erhalten.
Erstellt INSERT INTO automatisch Mikropartitionen?
Ja. Jede DML-Operation (einschließlich Einfügungen) löst die Micro-Partitioning-Engine von Snowflake aus, die die Daten für das Pruning und die Komprimierung organisiert. Du musst die Partitionen nicht mehr manuell verwalten.
Wie wirkt sich das Clustering auf die INSERT-Leistung aus?
Clustering-Schlüssel erhöhen die Abfragegeschwindigkeit, verursachen aber zusätzlichen Aufwand beim Schreiben. Häufige Einfügungen in eine stark geclusterte Tabelle können langsamer sein, also wähle die Clustering-Schlüssel sorgfältig aus und führe das Clustering nach Möglichkeit außerhalb der Stoßzeiten durch.
Kann ich INSERT INTO mit Snowpipe verwenden?
Indirekt. Snowpipe nimmt Dateien in eine Staging-Tabelle auf; nach der Umwandlung kannst du dann INSERT INTO
analytische Tabellen aufrufen. Für kontinuierliches Laden kombinierst du Snowpipe mit Streams & Tasks anstelle von manuellen Einsätzen.
Wie viele Daten kann ich in einer einzigen Anweisung einfügen?
Snowflake unterstützt sehr große INSERT INTO … SELECT
Operationen - in der Praxis mehrere Terabyte -, weil es die Arbeit in Mikro-Batches aufteilt. Der wichtigste Begrenzer sind die Einstellungen für die Lagergröße und die Zeitüberschreitung.
Ich bin Datenwissenschaftler mit Erfahrung in räumlicher Analyse, maschinellem Lernen und Datenpipelines. Ich habe mit GCP, Hadoop, Hive, Snowflake, Airflow und anderen Data Science/Engineering-Prozessen gearbeitet.