Snowflake DATEADD: Ein kompletter Leitfaden mit praktischen Beispielen
Lerne anhand von praktischen Beispielen, wie du die DATEADD-Funktion von Snowflake zur Datumsmanipulation verwendest. Beherrsche Zeitberechnungen, behandle Grenzfälle und optimiere die Leistung in deinen SQL-Abfragen.
Die Funktion Snowflake DATEADD ist eine relativ einfache, aber leistungsstarke Methode zur Durchführung von Datumsberechnungen, mit der Datenexperten ein bestimmtes Zeitintervall zu einem Datum, einer Uhrzeit oder einem Zeitstempel addieren oder subtrahieren können.
Wenn du weißt, wie du DATEADD nutzen kannst, können Datenanalysten und/oder Ingenieure nützliche Analysen durchführen, indem sie Abonnementzeiträume berechnen, Hochrechnungen für ein beliebiges zukünftiges Datum erstellen und sogar Zeitseriendatensätze für weitere Analysen erzeugen .
In diesem Lernprogramm lernst du die Syntax der Funktion kennen, wie sie in der Praxis angewendet werden kann und welches Potenzial die Funktion DATEADD in deinem Arsenal zur Datumsmanipulation in Snowflake SQL hat.
Bevor wir in die Details von DATEADD eintauchen, erstellen wir eine Beispieldatenbank mit datumsreichen Daten, um unsere Beispiele praktischer und praxisnaher zu gestalten. Die Arbeit mit realen Daten hilft dabei, die Konzepte zu festigen, während wir die Möglichkeiten der Funktion erlernen.
1. Erstellen eines Snowflake-Kontos (für neue Benutzer)
Wenn du neu bei Snowflake bist, musst du ein kostenloses Testkonto erstellen, das dir 30 Tage lang Guthaben bietet. Eine umfassende Einführung in die Plattform findest du in diesem Kurs Einführung in Snowflake, der die Grundlagen und das Basiswissen vermittelt.
2. Dein Arbeitsblatt einrichten
In Snowflake werden SQL-Abfragen in "Arbeitsblättern" ausgeführt (ähnlich wie in Notizbüchern). So erstellst du ein neues Arbeitsblatt:
Logge dich in dein Snowflake-Konto ein
Navigiere im Hauptmenü zu Arbeitsblättern
Klicke auf die Schaltfläche "+", um ein neues Arbeitsblatt zu erstellen
Nenne sie "DATEADD_Praxis"
Wenn du die Snowflake-Benutzeroberfläche noch nicht kennst, findest du in diesem Snowflake-Tutorial für Einsteiger einen hilfreichen Durchgang durch die Plattform.
3. Auswählen einer Datenbank und eines Schemas
Für diesen Lehrgang verwenden wir nur die Snowflake Learning-Datenbank und das öffentliche Schema:
-- Create database and schemaUSEDATABASE SNOWFLAKE_LEARNING_DB;USESCHEMAPUBLIC;Bereitgestellt von
4. Generierung von synthetischen Daten und Tabellen
Wir erstellen drei Tabellen mit datumsbezogenen Daten, um 'DATEADD' in verschiedenen Szenarien zu demonstrieren:
Hinweis: Verwende die Tastenkombination "Befehl + Umschalt + Eingabe"/"Strg + Umschalt + Eingabe", um die folgenden Befehle in deinem Arbeitsblatt auf einmal auszuführen:
Weitere Informationen zum Erstellen von Tabellen, einschließlich verschiedener Tabellentypen und bewährter Verfahren, findest du unter Tabellen in Snowflake erstellen.
Tipp: Du solltest alle bestehenden Abfragen aus deinem Arbeitsblatt löschen, nachdem sie erfolgreich ausgeführt wurden.
5. Tabellen mit Beispieldaten füllen
Lass uns Beispieldaten mit verschiedenen Datums- und Zeitwerten einfügen:
Jetzt haben wir eine funktionierende Beispieldatenbank mit drei Tabellen, die unterschiedliche Datums- und Zeitstempelformate enthalten. Dieser Datensatz dient als Grundlage für die Erkundung der FunktionDATEADD im weiteren Verlauf dieses Lehrgangs.
Snowflake DATEADD verstehen: Syntax und Parameter
Die Funktion DATEADD ist für die Datumsberechnungen in Snowflake unerlässlich. Sie ermöglicht es dir, bestimmte Zeitintervalle zu Datums-, Zeit- oder Zeitstempelwerten zu addieren oder zu subtrahieren. Schauen wir uns an, wie diese Funktion funktioniert, beginnend mit ihrer Syntax und ihren Parametern.
Funktionssyntax und Parameter
Die grundlegende Syntax für die FunktionDATEADD lautet:
DATEADD(date_part,value, date_or_timestamp_expression)Bereitgestellt von
Schauen wir uns die einzelnen Parameter an:
-- Basic DATEADD exampleSELECT
DATEADD(MONTH,3,'2023-01-15')AS three_months_later;Bereitgestellt von
Erläuterung: Diese Abfrage fügt 3 Monate bis zum 15. Januar 2023 hinzu. Die Parameter funktionieren wie folgt:
date_part (MONTH): Gibt die Zeiteinheit an, die addiert oder subtrahiert wird
value (3): Die Anzahl der zu addierenden (positiv) oder subtrahierenden (negativ) Einheiten
date_or_timestamp_expression ('2023-01-15'): Das zu ändernde Anfangsdatum
Snowflake unterstützt verschiedene Datumsteile, die mit DATEADD verwendet werden können:
-- Examples of different date partsSELECT
DATEADD(YEAR,1,'2023-02-28')AS add_one_year,
DATEADD(QUARTER,2,'2023-01-31')AS add_two_quarters,
DATEADD(MONTH,3,'2023-01-31')AS add_three_months,
DATEADD(WEEK,2,'2023-03-15')AS add_two_weeks,
DATEADD(DAY,10,'2023-03-21')AS add_ten_days,
DATEADD(HOUR,12,'2023-03-10 08:30:00')AS add_twelve_hours,
DATEADD(MINUTE,45,'2023-03-10 08:30:00')AS add_forty_five_minutes,
DATEADD(SECOND,30,'2023-03-10 08:30:00')AS add_thirty_seconds;Bereitgestellt von
Weitere unterstützte Datumsteile sind MILLISECOND,MICROSECOND,NANOSECOND und CENTURY.
Beachte, dass Snowflake in Schaltjahren und bei Monatsenddaten entsprechende Anpassungen vornimmt. Wenn du zum Beispiel ein Jahr zum 28. Februar 2023 hinzufügst, ergibt sich der 29. Februar 2024 (Schaltjahr).
Negative Werte für die Subtraktion verwenden
Die FunktionDATEADD kann auch Zeitintervalle subtrahieren, indem sie negative Werte verwendet:
-- Subtracting time intervals with negative valuesSELECT
DATEADD(MONTH,-3,'2023-03-15')AS three_months_ago,
DATEADD(DAY,-7,CURRENT_DATE())AS one_week_ago,
DATEADD(HOUR,-48,CURRENT_TIMESTAMP())AS two_days_ago_time;Bereitgestellt von
Erläuterung:
Der erste Ausdruck subtrahiert 3 Monate vom 15. März 2023
Der zweite Ausdruck subtrahiert 7 Tage von dem heutigen Datum
Der dritte Ausdruck subtrahiert 48 Stunden (2 Tage) vom aktuellen Zeitstempel
Ausgabe:
THREE_MONTHS_AGO ONE_WEEK_AGO TWO_DAYS_AGO_TIME
---------------- ------------ -----------------2025-02-102025-05-032025-05-0807:22:30.183-0700Bereitgestellt von
Verhalten des Rückgabetyps
Die Rückgabeart von DATEADD hängt von der Art des Eingabeausdrucks ab:
Wenn sie auf DATE angewendet wird, gibt sie eineDATE
Wenn sie auf TIMESTAMP angewendet wird, gibt sie eineTIMESTAMP
Wenn sie auf TIME angewendet wird, gibt sie eineTIME
DATEADD behält den ursprünglichen Datentyp deiner Eingabe bei. Dieses Verhalten ist wichtig zu verstehen, weil es sich darauf auswirkt, wie du das Ergebnis in nachfolgenden Operationen verwenden kannst.
Wenn du zum Beispiel Stunden zu einem DATE-Wert hinzufügst, ist das Ergebnis immer noch ein DATE (d.h. der Zeitanteil wird abgeschnitten), während beim Hinzufügen von Stunden zu einem TIMESTAMP sowohl die Datums- als auch die Zeitkomponente erhalten bleiben.
Das Verständnis dieser Kernparameter und des Verhaltens der FunktionDATEADD bildet die Grundlage für die fortgeschrittenen Anwendungsfälle, die wir in den folgenden Abschnitten untersuchen werden.
Praktische DATEADD-Beispiele und Anwendungsfälle
Nachdem wir nun die Syntax und das Verhalten von DATEADD verstanden haben, wollen wir praktische Anwendungen anhand unserer Beispieldaten untersuchen. In diesem Abschnitt zeigen wir, wie DATEADD echte Geschäftsprobleme lösen und die Möglichkeiten der Datenanalyse verbessern kann.
Berechnung der Abonnementverlängerungsdaten
Eine häufige Geschäftsanforderung ist die Bestimmung des Zeitpunkts, zu dem Abonnements auf der Grundlage ihres Abrechnungszyklus erneuert werden:
Erläuterung: Diese Abfrage berechnet das erste Verlängerungsdatum für jedes Abonnement auf der Grundlage seines Abrechnungszyklus. Wir verwenden DATEADD mit unterschiedlichen Datumsteilen (MONTH oder YEAR ) und Werten (1, 3 oder 1) je nach Abrechnungszyklus.
Ausgabe:
Beachte, wie Snowflake den Übergang vom 28. Februar zum 28. Februar (Schaltjahr) korrekt behandelt.
Lieferfenster vorhersagen
Verwenden wir DATEADD, um die geschätzten Lieferfenster für Bestellungen zu berechnen:
-- Calculate delivery windows based on order timestampsSELECT
order_id,
customer_id,
order_timestamp,
delivery_estimate,
DATEADD(HOUR,-12, delivery_estimate)AS delivery_window_start,
delivery_estimate AS delivery_window_end,
DATEDIFF('HOUR', order_timestamp, delivery_estimate)AS estimated_hours_to_delivery
FROM orders
ORDERBY order_id;Bereitgestellt von
Erläuterung: Diese Anfrage:
Erzeugt ein 12-Stunden-Lieferfenster, indem er 12 Stunden von der geschätzten Lieferzeit abzieht
Zeigt sowohl den Beginn als auch das Ende des Lieferfensters an
Berechnet die geschätzte Gesamtlieferzeit in Stunden
Ausgabe:
Erstellen einer Tabelle mit Datumsangaben
Für die Zeitreihenanalyse wird häufig eine Tabelle mit Datumsangaben benötigt. Lass uns eine mit DATEADD erstellen:
-- Generate a date dimension table for analysisWITH date_dimension AS(SELECT
DATEADD(DAY, seq4(),'2023-01-01')AS calendar_date
FROMTABLE(GENERATOR(ROWCOUNT=>365)))SELECT
calendar_date,YEAR(calendar_date)ASyear,MONTH(calendar_date)ASmonth,
MONTHNAME(calendar_date)AS month_name,DAY(calendar_date)ASday,
DAYOFWEEK(calendar_date)AS day_of_week,
DAYNAME(calendar_date)AS day_name,CASEWHEN DAYOFWEEK(calendar_date)IN(0,6)THENTRUEELSEFALSEENDAS is_weekend,
QUARTER(calendar_date)AS quarter
FROM date_dimension
WHERE calendar_date <='2023-03-31'ORDERBY calendar_date
LIMIT10;Bereitgestellt von
Erläuterung: Diese Anfrage:
Verwendet DATEADD mit einem Sequenzgenerator, um eine Reihe von Daten für 2023 zu erstellen.
Extrahiert nützliche Datumsattribute für jedes Kalenderdatum
Filtert auf Q1 2023 und zeigt der Kürze halber die ersten 10 Tage
Ausgabe:
Tabellen mit Datumsdimensionen verbessern die Analyseleistung erheblich, indem sie Datumsattribute im Voraus berechnen, anstatt sie in Abfragen wiederholt zu berechnen. Sie vereinheitlichen die Datumslogik im gesamten Unternehmen und sorgen für einheitliche Definitionen von Quartalen, Wochenenden und anderen Zeiträumen.
Dieser Ansatz reduziert Fehler und macht komplexe zeitbasierte Analysen für Geschäftsanwender leichter zugänglich. Datumsdimensionen ermöglichen auch eine effiziente Filterung und Gruppierung nach verschiedenen Zeithierarchien wie Jahr, Quartal, Monat und Tag.
Die Funktion DATEADD mit Reihenfolgebildung bietet eine einfache Methode, diese Tabellen ohne manuelle Dateneingabe aufzufüllen.
Diese Technik kann erweitert werden, um mehrjährige Kalender oder spezielle Zeitdimensionen wie Steuerkalender oder Geschäftstagsberechnungen zu erstellen. Zusätzliche Spalten können Feiertage, Wochennummern oder benutzerdefinierte Bezeichnungen für Geschäftszeiträume enthalten, die für eine genaue Berichterstattung wichtig sind.
Einmal erstellt, kann diese Dimensionstabelle mit Faktentabellen verknüpft werden, um leistungsstarke Time Intelligence-Funktionen in Dashboards und Berichten zu ermöglichen.
Analyse der geplanten Ereignisse
Verwenden wir DATEADD, um anstehende geplante Wartungsereignisse zu analysieren:
-- Find upcoming events and calculate preparation timeSELECT
event_id,
event_name,
event_timestamp,
duration_minutes,
DATEADD(DAY,-3, event_timestamp)AS preparation_start,
DATEADD(MINUTE, duration_minutes, event_timestamp)AS event_end,
DATEDIFF('MINUTE',CURRENT_TIMESTAMP(), event_timestamp)AS minutes_until_event
FROM events
WHERE event_timestamp >CURRENT_TIMESTAMP()ORDERBY event_timestamp;Bereitgestellt von
Erläuterung: Diese Anfrage:
Findet kommende Ereignisse (die in der Zukunft liegen)
Berechnet, wann die Vorbereitung beginnen sollte (3 Tage vor der Veranstaltung)
Berechnet anhand der Dauer des Ereignisses, wann es enden wird
Zeigt an, wie viele Minuten bis zum Beginn des Ereignisses verbleiben
Da alle unsere Beispieldaten aus dem Jahr 2023 stammen, würde diese Abfrage im Jahr 2025 normalerweise keine Ergebnisse liefern, aber das Konzept zeigt, wie man geplante Ereignisse analysieren kann.
Berechnung der Abrechnungszeiträume
Für abonnementbasierte Unternehmen ist es wichtig, die Abrechnungszeiträume genau zu berechnen:
-- Generate next 6 billing periods for monthly subscriptionsWITH billing_periods AS(SELECT
subscription_id,
customer_id,
plan_name,
start_date,
seq AS billing_period_number,
DATEADD(MONTH, seq, start_date)AS billing_period_start,
DATEADD(DAY,-1, DATEADD(MONTH, seq +1, start_date))AS billing_period_end
FROM subscriptions
CROSSJOIN(SELECT seq4()AS seq FROMTABLE(GENERATOR(ROWCOUNT=>6)))WHERE billing_cycle ='Monthly')SELECT
subscription_id,
customer_id,
plan_name,
billing_period_number,
billing_period_start,
billing_period_end,
DATEDIFF('DAY', billing_period_start, billing_period_end)+1AS days_in_period
FROM billing_periods
ORDERBY subscription_id, billing_period_number;Bereitgestellt von
Erläuterung: Diese Anfrage:
Erzeugt die nächsten 6 Abrechnungszeiträume für monatliche Abonnements durch einen CROSS JOIN mit einem Sequenzgenerator (seq4() )
Berechnet das Startdatum, indem es die Monate basierend auf der Periodennummer addiert, indem es DATEADD(MONTH, seq, start_date)
Berechnet das Enddatum als einen Tag vor dem Beginn der nächsten Periode mit DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date)) . Dies gewährleistet den korrekten Umgang mit unterschiedlichen Monatslängen (28/29/30/31 Tage)
Zählt die Anzahl der Tage in jedem Abrechnungszeitraum mit DATEDIFF('DAY', billing_period_start, billing_period_end) + 1 . Die +1 ist notwendig, weil DATEDIFF die Differenz zwischen den Daten zurückgibt, ohne das Enddatum.
Filtern, um nur monatliche Abonnements mit der WHERE-Klausel einzuschließen
Bestellte Ergebnisse nach subscription_id und Abrechnungszeitraum für eine logische Darstellung
Ausgabe:
Beachte, wie DATEADD mit unterschiedlichen Monatslängen umgeht und so eine genaue Berechnung des Abrechnungszeitraums sicherstellt.
Diese Beispiele zeigen, wie DATEADD eingesetzt werden kann, um gängige Geschäftsprobleme zu lösen, bei denen Daten manipuliert werden. Indem du DATEADD mit anderen SQL-Funktionen kombinierst, kannst du in Snowflake leistungsstarke Abfragen für zeitbasierte Analysen und Datenverarbeitung erstellen.
Vergleich von DATEADD mit verwandten Snowflake-Funktionen
Schauen wir uns nun an, wie dieFunktion DATEADDim Vergleich zu einigen anderen Funktionen von Snowflake abschneidet.
DATEADD vs. DATEDIFF und DATE_TRUNC
Während DATEADD ein bestimmtes Zeitintervall zu einem Datum addiert oder subtrahiert, berechnetDATEDIFF die Differenz zwischen zwei Daten in einer bestimmten Einheit. DATEDIFF gibt eine ganze Zahl zurück, die die Anzahl der vollständigen Einheiten zwischen den Daten angibt und ist damit ideal für die Berechnung von Zeiträumen wie Abonnementlängen oder Tagen seit der Bestellung .
DATE_TRUNCentfernt dagegen die Genauigkeit eines Datums-/Zeitwerts, indem kleinere Datumsanteile auf ihre Standardwerte gesetzt werden und so auf eine bestimmte Einheit abgerundet wird.
-- Comparing the three functionsSELECT
DATEADD(MONTH,3,'2023-01-15'::DATE)AS added_three_months,
DATEDIFF(DAY,'2023-01-15'::DATE,'2023-04-15'::DATE)AS days_between,
DATE_TRUNC(MONTH,'2023-01-15'::DATE)AS truncated_to_month;Bereitgestellt von
Ausgabe:
Wann ist welche Funktion zu verwenden (Entscheidungskriterien)
Verwende DATEADD, wenn du Daten um bestimmte Zeitintervalle nach vorne oder hinten verschieben musst, z. B. um zukünftige Verlängerungsdaten, Lieferfenster oder Zahlungspläne zu berechnen .
Wähle DATEDIFF, wenn du die verstrichene Zeit zwischen zwei Daten messen willst, z. B. bei der Berechnung von Alter, Dauer oder zeitbasierten Metriken für die Berichterstattung.
DATE_TRUNC ist am besten geeignet, wenn du Daten nach Zeiträumen (täglich, monatlich, vierteljährlich) gruppieren, Zeitstempel auf ein einheitliches Genauigkeitsniveau standardisieren oder zeitbasierte Hierarchien für Analysen erstellen musst.
-- Function usage by scenarioSELECT-- Scenario: Calculate next month's billing date
DATEADD(MONTH,1, start_date)AS next_billing_date,-- Scenario: Find how many days the subscription has been active
DATEDIFF(DAY, start_date,CURRENT_DATE())AS subscription_age_days,-- Scenario: Group by month for analysis
DATE_TRUNC(MONTH, start_date)AS billing_month
FROM subscriptions
LIMIT3;Bereitgestellt von
Umgang mit Grenzfällen und Fehlerbehebung
Wenn du Probleme bei der Nutzung der Funktion hast, findest du hier einige Tipps, die dir aus der Patsche helfen können.
Anpassungen am Monatsende und im Schaltjahr
Snowflake geht bei der Verwendung von DATEADD intelligent mit Monatsenddaten um. Wenn du Monate zu einem Monatsende addierst, gibt Snowflake den letzten Tag des resultierenden Monats zurück, unabhängig von der Anzahl der Tage. Dieses Verhalten bewahrt das Konzept des "Monatsendes", auch wenn die Monate unterschiedlich lang sind.
-- Month-end handling examplesSELECT
DATEADD(MONTH,1,'2023-01-31')AS jan_to_feb,-- January 31 + 1 month = February 28
DATEADD(MONTH,1,'2023-02-28')AS feb_to_mar,-- February 28 + 1 month = March 31
DATEADD(MONTH,1,'2024-01-31')AS jan_to_feb_leap,-- January 31 + 1 month in leap year = February 29
DATEADD(YEAR,1,'2023-02-28')AS normal_to_leap;-- February 28, 2023 + 1 year = February 29, 2024Bereitgestellt von
Berücksichtigung von Zeitzonen und Sommerzeit
Wenn du mit Zeitstempeldaten arbeitest, die Zeitzonen enthalten (TIMESTAMP_TZ ), berücksichtigtDATEADD automatisch die Sommerzeitumstellung. Dies stellt sicher, dass die Berechnungen über Zeitumstellungen hinweg genau bleiben, kann aber manchmal zu unerwarteten Ergebnissen führen, wenn bestimmte Intervalle um die Sommerzeitgrenzen herum hinzugefügt werden.
-- Time zone handling with DST transitionSELECT
event_timestamp,
DATEADD(HOUR,24, event_timestamp)AS add_24h,
DATEADD(DAY,1, event_timestamp)AS add_1d
FROM(SELECT CONVERT_TIMEZONE('America/Los_Angeles','2023-03-12 01:30:00')::TIMESTAMP_TZ AS event_timestamp
);-- During spring forward DST transitionBereitgestellt von
Wenn du mit Zeitstempeln rund um die Sommerzeit arbeitest, solltest du beachten, dass die Addition von 24 Stunden nicht unbedingt der Addition von einem Tag entspricht. Der Ansatz "add_1d" führt in der Regel zu intuitiveren Ergebnissen in Geschäftsanwendungen.
Häufige Fehler und ihre Lösungen
DATEADD-Fehler entstehen in der Regel durch Typüberschneidungen oder ungültige Eingaben. Hier sind häufige Probleme und Lösungen:
-- Common error: Invalid date part-- Error: "Invalid date part 'DATE'"SELECT DATEADD(DATE,1,'2023-01-15');-- Incorrect: 'DATE' is not a valid date partSELECT DATEADD(DAY,1,'2023-01-15');-- Correct: use 'DAY' instead-- Common error: Type mismatch-- Error: "Numeric value 'abc' is not recognized"SELECT DATEADD(DAY,'abc','2023-01-15');-- Incorrect: second parameter must be numericSELECT DATEADD(DAY,10,'2023-01-15');-- Correct: use numeric value-- Common error: Invalid date format-- Error: "Date 'January 15, 2023' is not recognized"SELECT DATEADD(DAY,1,'January 15, 2023');-- Incorrect: unrecognized date formatSELECT DATEADD(DAY,1,'2023-01-15');-- Correct: use YYYY-MM-DD formatBereitgestellt von
Tipps zur Leistungsoptimierung
Für die beste Leistung beim Einsatz von DATEADD in großen Betrieben:
Wende DATEADD wenn möglich in den Umwandlungs- statt in den Filterstufen an.
Berechne allgemeine Datumsberechnungen in temporären Tabellen oder CTEs vor, wenn sie mehrfach verwendet werden.
Erwäge die Verwendung von DATE_TRUNC vor DATEADD für bereichsbasierte Berechnungen, um die Indexnutzung zu verbessern.
Für Batch-Operationen wie das Erzeugen von Datumsbereichen solltest du eher Sequenzgeneratoren (wie im Beispiel der Datumsdimension) als rekursive CTEs verwenden.
-- Inefficient pattern (calculating same value repeatedly)SELECT*FROM large_table
WHERE DATEADD(MONTH,1, event_date)<CURRENT_DATE();-- More efficient approach (calculate once)WITH calc_dates AS(SELECT*, DATEADD(MONTH,1, event_date)AS next_month_date
FROM large_table
)SELECT*FROM calc_dates
WHERE next_month_date <CURRENT_DATE();Bereitgestellt von
Wenn du diese Grenzfälle und Optimierungstechniken verstehst, kannst du in Snowflake eine robustere Logik für die Datumsmanipulation schreiben, häufige Fallstricke vermeiden und die Leistung maximieren.
Fazit
Die Funktion Snowflake DATEADD ist ein unverzichtbares Werkzeug für die Datumsmanipulation, mit dem Datenexperten Zeitarithmetik für verschiedene Datumsanteile durchführen können. Es behandelt Monatsende, Schaltjahre, Zeitzonen und Sommerzeitumstellungen mit vorhersehbarem Verhalten. Wir haben gesehen, wie DATEADD für die Verwaltung von Abonnements, die Nachverfolgung von Lieferungen, die Erstellung von Datumsangaben und die Berechnung von Rechnungen eingesetzt werden kann. Zusammen mit DATEDIFF und DATE_TRUNC wird es zu einer zentralen Komponente für zeitbasierte Analysen in Snowflake.
Wofür wird die Snowflake DATEADD-Funktion verwendet?⌄
Mit der Funktion Snowflake DATEADD kannst du Datumsoperationen durchführen, indem du bestimmte Zeitintervalle (wie Tage, Monate oder Jahre) zu Datums-, Zeit- oder Zeitstempelwerten addierst oder subtrahierst. Sie wird häufig für die Berechnung zukünftiger Daten, Abonnementverlängerungen und Zeitreihenanalysen verwendet.
Wie geht DATEADD mit Monatsenddaten und Schaltjahren um?⌄
DATEADD geht intelligent mit Monatsenddaten um, indem es das Konzept des "Monatsendes" beibehält. Wenn du Monate zu einem Monatsenddatum hinzufügst, wird der letzte Tag des resultierenden Monats zurückgegeben. Bei Schaltjahren werden die Daten automatisch entsprechend angepasst (wenn du z. B. dem 28. Februar 2023 ein Jahr hinzufügst, ergibt das den 29. Februar 2024).
Welche Datumsteile werden in DATEADD unterstützt?⌄
DATEADD unterstützt verschiedene Datumsteile, darunter YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND, and CENTURY. Mit jedem Datumsteil kannst du eine bestimmte Zeiteinheit zu einem Datumswert addieren oder von ihm abziehen.
Kann DATEADD mit verschiedenen Zeitstempeltypen verwendet werden?⌄
Ja, DATEADD funktioniert mit allen Snowflake Zeitstempeltypen: TIMESTAMP_NTZ (keine Zeitzone), TIMESTAMP_TZ (mit Zeitzone) und TIMESTAMP_LTZ (lokale Zeitzone). Der Zeitstempeltyp wird beibehalten und die Zeitzonenumrechnung erfolgt automatisch.
Wie unterscheidet sich DATEADD von DATEDIFF und DATE_TRUNC?⌄
Während DATEADD Datumsangaben verändert, indem es Zeitintervalle addiert oder subtrahiert, berechnet DATEDIFF die Differenz zwischen zwei Datumsangaben in einer bestimmten Einheit, und DATE_TRUNC entfernt die Genauigkeit eines Datums-/Zeitwerts, indem es auf eine bestimmte Einheit abrundet. Sie dienen unterschiedlichen, aber sich ergänzenden Zwecken bei der Datumsmanipulation.
Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Lerne mehr über Python-Lambda-Funktionen, wozu sie gut sind und wann man sie benutzt. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
Sammle praktische Erfahrungen mit Snowflake! Lerne, Daten abzufragen, zu modellieren und zu verwalten – in diesem interaktiven Einstieg für Data Engineers, Analysten und BI-Profis.
Lerne, in Snowflake zu entwerfen, Abfragen auszuführen und Lösungen zu entwickeln - und meistere Snowflake SQL für Transformation und Modellierung, um als Data Engineer startklar für den Beruf zu sein.
Die Funktion Snowflake
DATEADDist eine relativ einfache, aber leistungsstarke Methode zur Durchführung von Datumsberechnungen, mit der Datenexperten ein bestimmtes Zeitintervall zu einem Datum, einer Uhrzeit oder einem Zeitstempel addieren oder subtrahieren können.Wenn du weißt, wie du
DATEADDnutzen kannst, können Datenanalysten und/oder Ingenieure nützliche Analysen durchführen, indem sie Abonnementzeiträume berechnen, Hochrechnungen für ein beliebiges zukünftiges Datum erstellen und sogar Zeitseriendatensätze für weitere Analysen erzeugen .In diesem Lernprogramm lernst du die Syntax der Funktion kennen, wie sie in der Praxis angewendet werden kann und welches Potenzial die Funktion
DATEADDin deinem Arsenal zur Datumsmanipulation in Snowflake SQL hat.Wenn du gerade erst mit Snowflake anfängst, solltest du dir unbedingt unseren Lernpfad Snowflake Foundations ansehen.
Einrichten einer Musterdatenbank für die Praxis
Bevor wir in die Details von
DATEADDeintauchen, erstellen wir eine Beispieldatenbank mit datumsreichen Daten, um unsere Beispiele praktischer und praxisnaher zu gestalten. Die Arbeit mit realen Daten hilft dabei, die Konzepte zu festigen, während wir die Möglichkeiten der Funktion erlernen.1. Erstellen eines Snowflake-Kontos (für neue Benutzer)
Wenn du neu bei Snowflake bist, musst du ein kostenloses Testkonto erstellen, das dir 30 Tage lang Guthaben bietet. Eine umfassende Einführung in die Plattform findest du in diesem Kurs Einführung in Snowflake, der die Grundlagen und das Basiswissen vermittelt.
2. Dein Arbeitsblatt einrichten
In Snowflake werden SQL-Abfragen in "Arbeitsblättern" ausgeführt (ähnlich wie in Notizbüchern). So erstellst du ein neues Arbeitsblatt:
Wenn du die Snowflake-Benutzeroberfläche noch nicht kennst, findest du in diesem Snowflake-Tutorial für Einsteiger einen hilfreichen Durchgang durch die Plattform.
3. Auswählen einer Datenbank und eines Schemas
Für diesen Lehrgang verwenden wir nur die Snowflake Learning-Datenbank und das öffentliche Schema:
4. Generierung von synthetischen Daten und Tabellen
Wir erstellen drei Tabellen mit datumsbezogenen Daten, um 'DATEADD' in verschiedenen Szenarien zu demonstrieren:
Hinweis: Verwende die Tastenkombination "Befehl + Umschalt + Eingabe"/"Strg + Umschalt + Eingabe", um die folgenden Befehle in deinem Arbeitsblatt auf einmal auszuführen:
Weitere Informationen zum Erstellen von Tabellen, einschließlich verschiedener Tabellentypen und bewährter Verfahren, findest du unter Tabellen in Snowflake erstellen.
Tipp: Du solltest alle bestehenden Abfragen aus deinem Arbeitsblatt löschen, nachdem sie erfolgreich ausgeführt wurden.
5. Tabellen mit Beispieldaten füllen
Lass uns Beispieldaten mit verschiedenen Datums- und Zeitwerten einfügen:
6. Validierung der Stichprobendaten
Führen wir einige grundlegende Abfragen durch, um zu überprüfen, ob unsere Daten korrekt geladen wurden:
Jetzt haben wir eine funktionierende Beispieldatenbank mit drei Tabellen, die unterschiedliche Datums- und Zeitstempelformate enthalten. Dieser Datensatz dient als Grundlage für die Erkundung der Funktion
DATEADDim weiteren Verlauf dieses Lehrgangs.Snowflake DATEADD verstehen: Syntax und Parameter
Die Funktion
DATEADDist für die Datumsberechnungen in Snowflake unerlässlich. Sie ermöglicht es dir, bestimmte Zeitintervalle zu Datums-, Zeit- oder Zeitstempelwerten zu addieren oder zu subtrahieren. Schauen wir uns an, wie diese Funktion funktioniert, beginnend mit ihrer Syntax und ihren Parametern.Funktionssyntax und Parameter
Die grundlegende Syntax für die Funktion
DATEADDlautet:Schauen wir uns die einzelnen Parameter an:
Erläuterung: Diese Abfrage fügt 3 Monate bis zum 15. Januar 2023 hinzu. Die Parameter funktionieren wie folgt:
date_part (MONTH): Gibt die Zeiteinheit an, die addiert oder subtrahiert wirdvalue (3): Die Anzahl der zu addierenden (positiv) oder subtrahierenden (negativ) Einheitendate_or_timestamp_expression('2023-01-15'): Das zu ändernde AnfangsdatumAusgabe:
Unterstützte Datumsteile
Snowflake unterstützt verschiedene Datumsteile, die mit
DATEADDverwendet werden können:Weitere unterstützte Datumsteile sind
MILLISECOND,MICROSECOND,NANOSECONDundCENTURY.Beachte, dass Snowflake in Schaltjahren und bei Monatsenddaten entsprechende Anpassungen vornimmt. Wenn du zum Beispiel ein Jahr zum 28. Februar 2023 hinzufügst, ergibt sich der 29. Februar 2024 (Schaltjahr).
Negative Werte für die Subtraktion verwenden
Die Funktion
DATEADDkann auch Zeitintervalle subtrahieren, indem sie negative Werte verwendet:Erläuterung:
Ausgabe:
Verhalten des Rückgabetyps
Die Rückgabeart von
DATEADDhängt von der Art des Eingabeausdrucks ab:DATEangewendet wird, gibt sie eineDATETIMESTAMPangewendet wird, gibt sie eineTIMESTAMPTIMEangewendet wird, gibt sie eineTIMEDATEADDbehält den ursprünglichen Datentyp deiner Eingabe bei. Dieses Verhalten ist wichtig zu verstehen, weil es sich darauf auswirkt, wie du das Ergebnis in nachfolgenden Operationen verwenden kannst.Wenn du zum Beispiel Stunden zu einem DATE-Wert hinzufügst, ist das Ergebnis immer noch ein DATE (d.h. der Zeitanteil wird abgeschnitten), während beim Hinzufügen von Stunden zu einem
TIMESTAMPsowohl die Datums- als auch die Zeitkomponente erhalten bleiben.Das Verständnis dieser Kernparameter und des Verhaltens der Funktion
DATEADDbildet die Grundlage für die fortgeschrittenen Anwendungsfälle, die wir in den folgenden Abschnitten untersuchen werden.Praktische DATEADD-Beispiele und Anwendungsfälle
Nachdem wir nun die Syntax und das Verhalten von
DATEADDverstanden haben, wollen wir praktische Anwendungen anhand unserer Beispieldaten untersuchen. In diesem Abschnitt zeigen wir, wieDATEADDechte Geschäftsprobleme lösen und die Möglichkeiten der Datenanalyse verbessern kann.Berechnung der Abonnementverlängerungsdaten
Eine häufige Geschäftsanforderung ist die Bestimmung des Zeitpunkts, zu dem Abonnements auf der Grundlage ihres Abrechnungszyklus erneuert werden:
Erläuterung: Diese Abfrage berechnet das erste Verlängerungsdatum für jedes Abonnement auf der Grundlage seines Abrechnungszyklus. Wir verwenden
DATEADDmit unterschiedlichen Datumsteilen (MONTHoderYEAR) und Werten (1, 3 oder 1) je nach Abrechnungszyklus.Ausgabe:
Beachte, wie Snowflake den Übergang vom 28. Februar zum 28. Februar (Schaltjahr) korrekt behandelt.
Lieferfenster vorhersagen
Verwenden wir DATEADD, um die geschätzten Lieferfenster für Bestellungen zu berechnen:
Erläuterung: Diese Anfrage:
Ausgabe:
Erstellen einer Tabelle mit Datumsangaben
Für die Zeitreihenanalyse wird häufig eine Tabelle mit Datumsangaben benötigt. Lass uns eine mit DATEADD erstellen:
Erläuterung: Diese Anfrage:
DATEADDmit einem Sequenzgenerator, um eine Reihe von Daten für 2023 zu erstellen.Ausgabe:
Tabellen mit Datumsdimensionen verbessern die Analyseleistung erheblich, indem sie Datumsattribute im Voraus berechnen, anstatt sie in Abfragen wiederholt zu berechnen. Sie vereinheitlichen die Datumslogik im gesamten Unternehmen und sorgen für einheitliche Definitionen von Quartalen, Wochenenden und anderen Zeiträumen.
Dieser Ansatz reduziert Fehler und macht komplexe zeitbasierte Analysen für Geschäftsanwender leichter zugänglich. Datumsdimensionen ermöglichen auch eine effiziente Filterung und Gruppierung nach verschiedenen Zeithierarchien wie Jahr, Quartal, Monat und Tag.
Die Funktion
DATEADDmit Reihenfolgebildung bietet eine einfache Methode, diese Tabellen ohne manuelle Dateneingabe aufzufüllen.Diese Technik kann erweitert werden, um mehrjährige Kalender oder spezielle Zeitdimensionen wie Steuerkalender oder Geschäftstagsberechnungen zu erstellen. Zusätzliche Spalten können Feiertage, Wochennummern oder benutzerdefinierte Bezeichnungen für Geschäftszeiträume enthalten, die für eine genaue Berichterstattung wichtig sind.
Einmal erstellt, kann diese Dimensionstabelle mit Faktentabellen verknüpft werden, um leistungsstarke Time Intelligence-Funktionen in Dashboards und Berichten zu ermöglichen.
Analyse der geplanten Ereignisse
Verwenden wir
DATEADD, um anstehende geplante Wartungsereignisse zu analysieren:Erläuterung: Diese Anfrage:
Da alle unsere Beispieldaten aus dem Jahr 2023 stammen, würde diese Abfrage im Jahr 2025 normalerweise keine Ergebnisse liefern, aber das Konzept zeigt, wie man geplante Ereignisse analysieren kann.
Berechnung der Abrechnungszeiträume
Für abonnementbasierte Unternehmen ist es wichtig, die Abrechnungszeiträume genau zu berechnen:
Erläuterung: Diese Anfrage:
seq4())DATEADD(MONTH, seq, start_date)DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date)). Dies gewährleistet den korrekten Umgang mit unterschiedlichen Monatslängen (28/29/30/31 Tage)DATEDIFF('DAY', billing_period_start, billing_period_end) + 1. Die +1 ist notwendig, weil DATEDIFF die Differenz zwischen den Daten zurückgibt, ohne das Enddatum.subscription_idund Abrechnungszeitraum für eine logische DarstellungAusgabe:
Beachte, wie
DATEADDmit unterschiedlichen Monatslängen umgeht und so eine genaue Berechnung des Abrechnungszeitraums sicherstellt.Diese Beispiele zeigen, wie
DATEADDeingesetzt werden kann, um gängige Geschäftsprobleme zu lösen, bei denen Daten manipuliert werden. Indem duDATEADDmit anderen SQL-Funktionen kombinierst, kannst du in Snowflake leistungsstarke Abfragen für zeitbasierte Analysen und Datenverarbeitung erstellen.Vergleich von DATEADD mit verwandten Snowflake-Funktionen
Schauen wir uns nun an, wie dieFunktion
DATEADDim Vergleich zu einigen anderen Funktionen von Snowflake abschneidet.DATEADD vs. DATEDIFF und DATE_TRUNC
Während
DATEADDein bestimmtes Zeitintervall zu einem Datum addiert oder subtrahiert, berechnetDATEDIFFdie Differenz zwischen zwei Daten in einer bestimmten Einheit.DATEDIFFgibt eine ganze Zahl zurück, die die Anzahl der vollständigen Einheiten zwischen den Daten angibt und ist damit ideal für die Berechnung von Zeiträumen wie Abonnementlängen oder Tagen seit der Bestellung .DATE_TRUNCentfernt dagegen die Genauigkeit eines Datums-/Zeitwerts, indem kleinere Datumsanteile auf ihre Standardwerte gesetzt werden und so auf eine bestimmte Einheit abgerundet wird.Ausgabe:
Wann ist welche Funktion zu verwenden (Entscheidungskriterien)
Verwende
DATEADD, wenn du Daten um bestimmte Zeitintervalle nach vorne oder hinten verschieben musst, z. B. um zukünftige Verlängerungsdaten, Lieferfenster oder Zahlungspläne zu berechnen .Wähle
DATEDIFF, wenn du die verstrichene Zeit zwischen zwei Daten messen willst, z. B. bei der Berechnung von Alter, Dauer oder zeitbasierten Metriken für die Berichterstattung.DATE_TRUNCist am besten geeignet, wenn du Daten nach Zeiträumen (täglich, monatlich, vierteljährlich) gruppieren, Zeitstempel auf ein einheitliches Genauigkeitsniveau standardisieren oder zeitbasierte Hierarchien für Analysen erstellen musst.Umgang mit Grenzfällen und Fehlerbehebung
Wenn du Probleme bei der Nutzung der Funktion hast, findest du hier einige Tipps, die dir aus der Patsche helfen können.
Anpassungen am Monatsende und im Schaltjahr
Snowflake geht bei der Verwendung von
DATEADDintelligent mit Monatsenddaten um. Wenn du Monate zu einem Monatsende addierst, gibt Snowflake den letzten Tag des resultierenden Monats zurück, unabhängig von der Anzahl der Tage. Dieses Verhalten bewahrt das Konzept des "Monatsendes", auch wenn die Monate unterschiedlich lang sind.Berücksichtigung von Zeitzonen und Sommerzeit
Wenn du mit Zeitstempeldaten arbeitest, die Zeitzonen enthalten (
TIMESTAMP_TZ), berücksichtigtDATEADD automatisch die Sommerzeitumstellung. Dies stellt sicher, dass die Berechnungen über Zeitumstellungen hinweg genau bleiben, kann aber manchmal zu unerwarteten Ergebnissen führen, wenn bestimmte Intervalle um die Sommerzeitgrenzen herum hinzugefügt werden.Wenn du mit Zeitstempeln rund um die Sommerzeit arbeitest, solltest du beachten, dass die Addition von 24 Stunden nicht unbedingt der Addition von einem Tag entspricht. Der Ansatz "add_1d" führt in der Regel zu intuitiveren Ergebnissen in Geschäftsanwendungen.
Häufige Fehler und ihre Lösungen
DATEADD-Fehler entstehen in der Regel durch Typüberschneidungen oder ungültige Eingaben. Hier sind häufige Probleme und Lösungen:
Tipps zur Leistungsoptimierung
Für die beste Leistung beim Einsatz von
DATEADDin großen Betrieben:DATEADDwenn möglich in den Umwandlungs- statt in den Filterstufen an.DATEADDfür bereichsbasierte Berechnungen, um die Indexnutzung zu verbessern.Wenn du diese Grenzfälle und Optimierungstechniken verstehst, kannst du in Snowflake eine robustere Logik für die Datumsmanipulation schreiben, häufige Fallstricke vermeiden und die Leistung maximieren.
Fazit
Die Funktion Snowflake
DATEADDist ein unverzichtbares Werkzeug für die Datumsmanipulation, mit dem Datenexperten Zeitarithmetik für verschiedene Datumsanteile durchführen können. Es behandelt Monatsende, Schaltjahre, Zeitzonen und Sommerzeitumstellungen mit vorhersehbarem Verhalten. Wir haben gesehen, wieDATEADDfür die Verwaltung von Abonnements, die Nachverfolgung von Lieferungen, die Erstellung von Datumsangaben und die Berechnung von Rechnungen eingesetzt werden kann. Zusammen mitDATEDIFFundDATE_TRUNCwird es zu einer zentralen Komponente für zeitbasierte Analysen in Snowflake.Wenn du mehr über Snowflake wissen möchtest, schau dir den Lernpfad Snowflake Foundations an oder erkunde das Erstellen von Tabellen in Snowflake, um deine Datenmodellierungskenntnisse zu erweitern. Der Leitfaden Snowflake Zeitreisen nutzen ergänzt dein Verständnis für zeitliche Abläufe. Anfänger/innen sollten mit dem Snowflake Tutorial für Anfänger/innen beginnen.