Gerçek dünyadan örneklerle Snowflake'in DATEADD fonksiyonunu tarih manipülasyonunda nasıl kullanacağınızı öğrenin. Zaman hesaplamalarında ustalaşın, köşe durumlarını yönetin ve SQL sorgularınızın performansını optimize edin.
Snowflake DATEADD fonksiyonu, tarih, saat veya zaman damgası değerlerine belirli zaman aralıkları ekleyip çıkarmanıza olanak tanıyan, her tür tarih aritmetiğini gerçekleştirmek için nispeten basit ama güçlü bir yöntemdir.
DATEADD kullanımını anlamak; abonelik dönemlerini hesaplama, gelecekteki herhangi bir tarih için projeksiyon oluşturma ve daha ileri analizler için zaman serisi veri kümeleri üretme gibi faydalı analizleri veri analistleri ve/veya mühendislerin gerçekleştirmesini sağlar.
Bu eğitimde, fonksiyonun sözdizimini, pratikte nasıl uygulanabileceğini ve Snowflake SQL’de tarih işlemede DATEADD fonksiyonunun genel potansiyelini öğreneceksiniz.
Snowflake’e yeni başlıyorsanız, Snowflake Foundations yetkinlik yolumuzu mutlaka inceleyin.
Uygulama İçin Örnek Bir Veritabanı Kurma
DATEADD ayrıntılarına dalmadan önce, örnekleri daha pratik ve uygulamalı kılmak için tarih açısından zengin verilerle bir örnek veritabanı oluşturalım. Gerçek verilerle çalışmak, fonksiyonun yeteneklerini öğrenirken kavramların pekişmesine yardımcı olacaktır.
Farklı tablo türleri ve en iyi uygulamalar dahil olmak üzere tablo oluşturma hakkında daha fazla ayrıntı için Creating Tables in Snowflake kılavuzuna bakın.
İpucu: Başarıyla çalıştıktan sonra worksheet'inizdeki mevcut tüm sorguları silmelisiniz.
5. Tabloları örnek verilerle doldurma
Çeşitli tarih ve saat değerleri içeren örnek veriler ekleyelim:
Artık farklı tarih ve zaman damgası biçimleri içeren üç tabloya sahip işlevsel bir örnek veritabanımız var. Bu veri kümesi, bu öğreticinin geri kalanında DATEADD fonksiyonunu keşfetmemiz için temel görevi görecek.
Snowflake DATEADD’i Anlama: Sözdizimi ve Parametreler
DATEADD fonksiyonu, Snowflake’teki tarih aritmetiği işlemleri için gereklidir. Tarih, saat veya zaman damgası değerlerinden belirli zaman aralıklarını eklemenize veya çıkarmanıza olanak tanır. Bu fonksiyonun nasıl çalıştığını, sözdizimi ve parametrelerinden başlayarak adım adım ele alalım.
Snowflake, DATEADD ile kullanılabilecek çeşitli tarih parçalarını destekler:
-- 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;Altyapı:
Ek olarak desteklenen tarih parçaları arasında MILLISECOND, MICROSECOND, NANOSECOND ve CENTURY bulunur.
Artık yıllar ve ay sonu tarihlerinde Snowflake'in uygun ayarlamalar yaptığını unutmayın. Örneğin, 28 Şubat 2023’e bir yıl eklemek 29 Şubat 2024 (artık yıl) sonucunu verir.
Çıkarma için negatif değerleri kullanma
DATEADD fonksiyonu, negatif değerler kullanılarak zaman aralıklarını çıkarmak için de kullanılabilir:
-- 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;Altyapı:
Açıklama:
İlk ifade 15 Mart 2023’ten 3 ay çıkarır
İkinci ifade bugünün tarihinden 7 gün çıkarır
Üçüncü ifade geçerli zaman damgasından 48 saat (2 gün) çıkarır
DATEADD'in dönüş türü, giriş ifadesinin türüne bağlıdır:
Bir DATE üzerinde uygulandığında bir DATE döndürür
Bir TIMESTAMP üzerinde uygulandığında bir TIMESTAMP döndürür
Bir TIME üzerinde uygulandığında bir TIME döndürür
DATEADD, girdiğinizin özgün veri türünü korur. Bu davranışı anlamak önemlidir; çünkü sonucu sonraki işlemlerde nasıl kullanabileceğinizi etkiler.
Örneğin bir DATE değerine saat eklediğinizde, sonuç yine DATE olur (yani saat kısmı kırpılır); bir TIMESTAMP değerine saat eklemek ise tarih ve saat bileşenlerini korur.
DATEADD fonksiyonunun bu temel parametre ve davranışlarını anlamak, sonraki bölümlerde inceleyeceğimiz daha gelişmiş kullanım senaryoları için temel sağlayacaktır.
Pratik DATEADD Örnekleri ve Kullanım Senaryoları
Artık DATEADD'in sözdizimini ve davranışını anladığımıza göre, örnek verilerimizi kullanarak pratik uygulamaları inceleyelim. Bu bölümde, DATEADD'in gerçek iş sorunlarını nasıl çözebileceğini ve veri analizi yeteneklerini nasıl güçlendirebileceğini göstereceğiz.
Abonelik yenileme tarihlerini hesaplama
Yaygın bir iş gereksinimi, faturalandırma döngüsüne göre aboneliklerin ne zaman yenileneceğini belirlemektir:
Açıklama: Bu sorgu, her aboneliğin faturalandırma döngüsüne göre ilk yenileme tarihini hesaplar. Faturalandırma döngüsüne bağlı olarak farklı tarih parçaları (MONTH veya YEAR) ve değerler (1, 3 veya 1) ile DATEADD kullanılır.
Çıktı:
Snowflake'in 28 Şubat’tan 28 Şubat’a (artık yıl) geçişi doğru şekilde ele alışına dikkat edin.
Teslimat aralıklarını öngörme
Siparişler için tahmini teslimat aralıklarını hesaplamak üzere DATEADD kullanalım:
-- 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;Altyapı:
Açıklama: Bu sorgu:
Tahmini teslimat saatinden 12 saat çıkararak 12 saatlik bir teslimat aralığı oluşturur
Teslimat aralığının başlangıcını ve bitişini gösterir
Tahmini toplam teslimat süresini saat cinsinden hesaplar
Çıktı:
Bir tarih boyut tablosu oluşturma
Zaman serisi analizi sıklıkla bir tarih boyut tablosu gerektirir. Bunu DATEADD kullanarak oluşturalım:
-- 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;Altyapı:
Açıklama: Bu sorgu:
DATEADD'i bir dizi üreticiyle birlikte kullanarak 2023 yılı için bir dizi tarih üretir
Her takvim tarihi için yararlı tarih özniteliklerini çıkarır
2023 1. çeyreğe filtreler ve kısalık için ilk 10 günü gösterir
Çıktı:
Tarih boyut tabloları, tarih özniteliklerini sorgularda tekrarla hesaplamak yerine önceden hesaplayarak analitik performansı önemli ölçüde artırır. Kuruluş genelinde tarih mantığını standartlaştırır, çeyrekler, hafta sonları ve diğer dönemler için tutarlı tanımlar sağlar.
Bu yaklaşım hataları azaltır ve zaman temelli karmaşık analizleri iş kullanıcıları için daha erişilebilir kılar. Tarih boyutları, yıl, çeyrek, ay ve gün gibi çeşitli zaman hiyerarşilerine göre verimli filtreleme ve gruplamayı da mümkün kılar.
Sıra üretimi ile DATEADD fonksiyonu, bu boyut tablolarını elle veri girişi olmadan doldurmak için basit bir yöntem sunar.
Bu teknik, çok yıllı takvimler veya mali takvimler ya da iş günü hesaplamaları gibi özel zaman boyutları oluşturmak için genişletilebilir. Ek sütunlar, doğru raporlama için kritik olan tatil bayrakları, hafta numaraları veya özel iş dönemi tanımlamaları içerebilir.
Oluşturulduktan sonra bu boyut tablosu, panolar ve raporlarda güçlü zaman zekâsı yetenekleri sağlamak için olgu tablolarıyla birleştirilebilir.
Zamanlanmış olayları analiz etme
Yaklaşan planlı bakım etkinliklerini analiz etmek için DATEADD kullanalım:
-- 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;Altyapı:
Açıklama: Bu sorgu:
Yaklaşan etkinlikleri (gelecekte olanları) bulur
Hazırlığın ne zaman başlaması gerektiğini hesaplar (etkinlikten 3 gün önce)
Süresine göre etkinliğin ne zaman biteceğini hesaplar
Etkinliğin başlamasına kaç dakika kaldığını gösterir
Tüm örnek verilerimiz 2023’ten olduğu için, bu sorgu 2025’te tipik olarak sonuç göstermeyecektir; ancak zamanlanmış etkinliklerin nasıl analiz edileceğini kavramsal olarak gösterir.
Faturalandırma dönemlerini hesaplama
Abonelik tabanlı işletmelerde, kesin faturalandırma dönemlerini hesaplamak esastır:
-- 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;Altyapı:
Açıklama: Bu sorgu:
Aylık abonelikler için bir dizi üreticiyle (seq4()) CROSS JOIN kullanarak sonraki 6 faturalandırma dönemini üretir
Dönem numarasına göre ay ekleyerek DATEADD(MONTH, seq, start_date) ile başlangıç tarihini hesaplar
Bitiş tarihini, bir sonraki dönemin başlamasından bir gün önce olacak şekilde DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date)) ile hesaplar Bu, değişen ay uzunluklarını (28/29/30/31 gün) doğru şekilde ele alır
Her faturalandırma dönemindeki gün sayısını DATEDIFF('DAY', billing_period_start, billing_period_end) + 1 ile sayar +1 gereklidir çünkü DATEDIFF bitiş tarihini dahil etmeden tarihler arasındaki farkı döndürür
WHERE koşulu ile yalnızca aylık abonelikleri dahil eder
Sonuçları mantıklı bir sunum için subscription_id ve dönem numarasına göre sıralar
Çıktı:
DATEADD farklı ay uzunluklarını doğru biçimde ele alarak, faturalandırma dönemi hesaplamalarının isabetli olmasını sağlar.
Bu örnekler, tarih manipülasyonunu içeren yaygın iş problemlerini çözmek için DATEADD'in nasıl uygulanabileceğini gösterir. DATEADD'i diğer SQL fonksiyonlarıyla birleştirerek, Snowflake’te zaman temelli analiz ve veri işleme için güçlü sorgular oluşturabilirsiniz.
Şimdi DATEADD fonksiyonunun Snowflake’teki diğer bazı fonksiyonlarla nasıl karşılaştırıldığına bakalım.
DATEADD ve DATEDIFF ile DATE_TRUNC
DATEADD belirli bir zaman aralığını bir tarihe ekler veya çıkarırken, DATEDIFF iki tarih arasındaki farkı belirtilen birimde hesaplar. DATEDIFF, tarihler arasındaki tam birim sayısını temsil eden bir tamsayı döndürür ve abonelik süreleri veya sipariş verilişinden bu yana geçen günler gibi süreleri hesaplamak için idealdir.
DATE_TRUNC ise, daha küçük tarih parçalarını varsayılan değerlerine ayarlayarak bir tarih/saat değerinden kesinliği kaldırır ve fiilen belirtilen birime yuvarlar.
-- 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;Altyapı:
Çıktı:
Hangi fonksiyon ne zaman kullanılmalı (karar kriterleri)
Belirli zaman aralıklarıyla tarihleri ileri veya geri kaydırmanız gerektiğinde, örneğin gelecekteki yenileme tarihlerini, teslimat aralıklarını veya ödeme planlarını hesaplamak için DATEADD kullanın.
Yaş, süre veya raporlama için zaman bazlı metrikler gibi, iki tarih arasında geçen zamanı ölçerken DATEDIFF tercih edin.
DATE_TRUNC; verileri zaman dönemlerine göre (günlük, aylık, çeyreklik) gruplamanız, zaman damgalarını tutarlı bir kesinlik düzeyine standartlaştırmanız veya analiz için zaman temelli hiyerarşiler oluşturmanız gerektiğinde en uygunudur.
-- 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;Altyapı:
Köşe Durumlarını Ele Alma ve Sorun Giderme
Fonksiyonu kullanırken sorun yaşıyorsanız, sizi sıkıntıdan kurtarabilecek bazı ipuçları burada.
Ay sonu ve artık yıl ayarlamaları
Snowflake, DATEADD kullanıldığında ay sonu tarihlerini akıllıca ele alır. Ay sonu bir tarihe ay eklerken, Snowflake ortaya çıkan ayın gün sayısından bağımsız olarak o ayın son gününü döndürür. Bu davranış, ayların farklı uzunlukları olsa bile “ayın sonu” kavramını korur.
-- 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, 2024Altyapı:
Saat dilimi ve yaz saati uygulaması dikkate almaları
Saat dilimlerini içeren zaman damgası verileriyle (TIMESTAMP_TZ) çalışırken, DATEADD otomatik olarak yaz saati uygulaması (DST) geçişlerini hesaba katar. Bu, zaman değişiklikleri boyunca hesaplamaların doğru kalmasını sağlar, ancak bazen DST sınırlarında belirli aralıklar eklerken beklenmedik sonuçlar üretebilir.
-- 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 transitionAltyapı:
Zaman damgalarıyla DST geçişleri civarında çalışırken, 24 saat eklemenin 1 gün eklemeye eşit olmayabileceğini unutmayın. “add_1d" yaklaşımı, iş uygulamalarında genellikle daha sezgisel sonuçlar üretir.
Yaygın hatalar ve çözümleri
DATEADD hataları genellikle tür uyumsuzlukları veya geçersiz girdilerden kaynaklanır. İşte yaygın sorunlar ve çözümleri:
-- 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 formatAltyapı:
Performans optimizasyonu ipuçları
Büyük ölçekli işlemlerde DATEADD kullanırken en iyi performans için:
Mümkün olduğunda DATEADD'i filtreleme aşamalarından ziyade dönüşüm aşamalarında uygulayın.
Birden çok kez kullanıldığında, yaygın tarih hesaplamalarını geçici tablolarda veya CTE’lerde önceden hesaplayın.
Aralık tabanlı hesaplamalarda dizin kullanımını iyileştirmek için DATEADD'den önce DATE_TRUNC kullanmayı düşünün.
Tarih aralıkları üretmek gibi toplu işlemler için, özyinelemeli CTE’ler yerine (tarih boyutu örneğinde gösterildiği gibi) sıra üreticilerini kullanın.
-- 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();Altyapı:
Bu köşe durumlarını ve optimizasyon tekniklerini anlamak, Snowflake’te daha sağlam tarih manipülasyon mantığı yazmanıza, yaygın tuzaklardan kaçınırken performansı en üst düzeye çıkarmanıza yardımcı olacaktır.
Sonuç
Snowflake DATEADD fonksiyonu, veri profesyonellerinin çeşitli tarih parçalarında zaman aritmetiği yapmasına olanak tanıyan, tarih manipülasyonu için temel bir araçtır. Ay sonu tarihlerini, artık yılları, saat dilimlerini ve Yaz Saati Uygulaması geçişlerini öngörülebilir bir davranışla ele alır. DATEADD'in abonelik yönetimi, teslimat takibi, tarih boyutu oluşturma ve faturalandırma hesaplamalarına nasıl uygulanabileceğini gördük. DATEDIFF ve DATE_TRUNC ile birlikte kullanıldığında, Snowflake’te zaman bazlı analitik için çekirdek bir bileşen haline gelir.
Snowflake DATEADD fonksiyonu, tarih, saat veya zaman damgası değerlerine belirli zaman aralıkları (gün, ay, yıl gibi) ekleyip çıkarmak için kullanılır. Genellikle gelecekteki tarihleri, abonelik yenilemelerini ve zaman serisi analizlerini hesaplamak için tercih edilir.
DATEADD ay sonu tarihlerini ve artık yılları nasıl ele alır?⌄
DATEADD, ay sonu tarihlerini “ayın sonu” kavramını koruyacak şekilde akıllıca ele alır. Ay sonu bir tarihe ay eklediğinizde, ortaya çıkan ayın son gününü döndürür. Artık yıllarda ise tarihleri otomatik olarak ayarlar (ör. 28 Şubat 2023’e bir yıl eklemek 29 Şubat 2024 sonucunu verir).
DATEADD'de desteklenen tarih parçaları nelerdir?⌄
DATEADD, YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND, CENTURY dahil çeşitli tarih parçalarını destekler. Her bir parça, bir tarih değerine o birimin eklenip çıkarılmasına olanak tanır.
DATEADD farklı zaman damgası türleriyle kullanılabilir mi?⌄
Evet, DATEADD tüm Snowflake zaman damgası türleriyle çalışır: TIMESTAMP_NTZ (Saat Dilimi Yok), TIMESTAMP_TZ (Saat Dilimli) ve TIMESTAMP_LTZ (Yerel Saat Dilimi). Zaman damgası türünü korur ve saat dilimi dönüşümlerini otomatik olarak ele alır.
DATEADD, DATEDIFF ve DATE_TRUNC'tan nasıl farklıdır?⌄
DATEADD zaman aralıkları ekleyip çıkartarak tarihleri değiştirirken, DATEDIFF iki tarih arasındaki farkı belirtilen birimde hesaplar ve DATE_TRUNC belirtilen birime yuvarlayarak bir tarih/saat değerinden kesinliği kaldırır. Tarih manipülasyonunda farklı ama birbirini tamamlayan amaçlara hizmet ederler.
2 yılı aşkın deneyime sahip bir veri bilimi içerik üreticisiyim ve Medium’da en büyük takipçi kitlelerinden birine sahibim. Yapay zekâ ve makine öğrenimi üzerine, biraz da alaycı bir üslupla yazılmış, ayrıntılı makaleler kaleme almayı seviyorum; çünkü onları biraz daha az sıkıcı hale getirmek için bir şeyler yapmak gerekiyor. 130’un üzerinde makale ve bir de DataCamp kursu ürettim; bir diğeri de hazırlık aşamasında. İçeriklerim 5 milyondan fazla kişi tarafından görüldü; bunların 20 bini Medium ve LinkedIn’de takipçim oldu.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Snowflake ile uygulamalı deneyim kazanın! Veri mühendisleri, analistler ve BI uzmanlarına yönelik bu etkileşimli başlangıç eğitiminde verileri sorgulamayı, modellemeyi ve yönetmeyi öğrenin.
İşe hazır bir Veri Mühendisi olun: Snowflake'te tasarım yapmayı, sorgular yazmayı ve çözümler geliştirmeyi öğrenin; dönüşüm ve modelleme için Snowflake SQL'de ustalaşın.
Snowflake
DATEADDfonksiyonu, tarih, saat veya zaman damgası değerlerine belirli zaman aralıkları ekleyip çıkarmanıza olanak tanıyan, her tür tarih aritmetiğini gerçekleştirmek için nispeten basit ama güçlü bir yöntemdir.DATEADDkullanımını anlamak; abonelik dönemlerini hesaplama, gelecekteki herhangi bir tarih için projeksiyon oluşturma ve daha ileri analizler için zaman serisi veri kümeleri üretme gibi faydalı analizleri veri analistleri ve/veya mühendislerin gerçekleştirmesini sağlar.Bu eğitimde, fonksiyonun sözdizimini, pratikte nasıl uygulanabileceğini ve Snowflake SQL’de tarih işlemede
DATEADDfonksiyonunun genel potansiyelini öğreneceksiniz.Snowflake’e yeni başlıyorsanız, Snowflake Foundations yetkinlik yolumuzu mutlaka inceleyin.
Uygulama İçin Örnek Bir Veritabanı Kurma
DATEADDayrıntılarına dalmadan önce, örnekleri daha pratik ve uygulamalı kılmak için tarih açısından zengin verilerle bir örnek veritabanı oluşturalım. Gerçek verilerle çalışmak, fonksiyonun yeteneklerini öğrenirken kavramların pekişmesine yardımcı olacaktır.1. Snowflake hesabı oluşturma (yeni kullanıcılar için)
Snowflake’e yeniyseniz, 30 gün boyunca kredi sağlayan bir ücretsiz deneme hesabı oluşturmanız gerekir. Platforma kapsamlı bir giriş için, temelleri ve temel kavramları kapsayan Introduction to Snowflake kursuna göz atın.
2. Çalışma sayfanızı (worksheet) hazırlama
Snowflake’te SQL sorguları “Worksheet”lerde (not defterlerine benzer) çalıştırılır. Yeni bir worksheet oluşturmak için:
Snowflake arayüzüne tamamen yabancıysanız, bu Snowflake’e Yeni Başlayanlar için Eğitim platformun yararlı bir genel bakışını sunar.
3. Bir veritabanı ve şema seçme
Bu eğitimde, Snowflake Learning veritabanı ve public şemayı kullanacağız:
4. Sentetik veri ve tablolar oluşturma
‘DATEADD’ işlevini çeşitli senaryolarda göstermek için tarih ile ilgili veriler içeren üç tablo oluşturacağız:
Not: Aşağıdaki komutları worksheet'inizde tek seferde çalıştırmak için “Command + Shift + Enter”/”Ctrl + Shift + Enter” kullanın:
Farklı tablo türleri ve en iyi uygulamalar dahil olmak üzere tablo oluşturma hakkında daha fazla ayrıntı için Creating Tables in Snowflake kılavuzuna bakın.
İpucu: Başarıyla çalıştıktan sonra worksheet'inizdeki mevcut tüm sorguları silmelisiniz.
5. Tabloları örnek verilerle doldurma
Çeşitli tarih ve saat değerleri içeren örnek veriler ekleyelim:
6. Örnek verileri doğrulama
Verilerimizin doğru şekilde yüklendiğini doğrulamak için bazı temel sorgular çalıştıralım:
Artık farklı tarih ve zaman damgası biçimleri içeren üç tabloya sahip işlevsel bir örnek veritabanımız var. Bu veri kümesi, bu öğreticinin geri kalanında
DATEADDfonksiyonunu keşfetmemiz için temel görevi görecek.Snowflake DATEADD’i Anlama: Sözdizimi ve Parametreler
DATEADDfonksiyonu, Snowflake’teki tarih aritmetiği işlemleri için gereklidir. Tarih, saat veya zaman damgası değerlerinden belirli zaman aralıklarını eklemenize veya çıkarmanıza olanak tanır. Bu fonksiyonun nasıl çalıştığını, sözdizimi ve parametrelerinden başlayarak adım adım ele alalım.Fonksiyonun sözdizimi ve parametreleri
DATEADDfonksiyonunun temel sözdizimi şöyledir:Her parametreyi inceleyelim:
Açıklama: Bu sorgu 15 Ocak 2023 tarihine 3 ay ekler. Parametreler şu şekilde çalışır:
date_part (MONTH): Eklediğimiz ya da çıkardığımız zaman birimini belirtirvalue (3): Eklenecek (pozitif) veya çıkarılacak (negatif) birim sayısıdate_or_timestamp_expression('2023-01-15'): Başlangıç tarihiÇıktı:
Desteklenen tarih parçaları
Snowflake,
DATEADDile kullanılabilecek çeşitli tarih parçalarını destekler:Ek olarak desteklenen tarih parçaları arasında
MILLISECOND,MICROSECOND,NANOSECONDveCENTURYbulunur.Artık yıllar ve ay sonu tarihlerinde Snowflake'in uygun ayarlamalar yaptığını unutmayın. Örneğin, 28 Şubat 2023’e bir yıl eklemek 29 Şubat 2024 (artık yıl) sonucunu verir.
Çıkarma için negatif değerleri kullanma
DATEADDfonksiyonu, negatif değerler kullanılarak zaman aralıklarını çıkarmak için de kullanılabilir:Açıklama:
Çıktı:
Dönüş türü davranışı
DATEADD'in dönüş türü, giriş ifadesinin türüne bağlıdır:DATEüzerinde uygulandığında birDATEdöndürürTIMESTAMPüzerinde uygulandığında birTIMESTAMPdöndürürTIMEüzerinde uygulandığında birTIMEdöndürürDATEADD, girdiğinizin özgün veri türünü korur. Bu davranışı anlamak önemlidir; çünkü sonucu sonraki işlemlerde nasıl kullanabileceğinizi etkiler.Örneğin bir DATE değerine saat eklediğinizde, sonuç yine DATE olur (yani saat kısmı kırpılır); bir
TIMESTAMPdeğerine saat eklemek ise tarih ve saat bileşenlerini korur.DATEADDfonksiyonunun bu temel parametre ve davranışlarını anlamak, sonraki bölümlerde inceleyeceğimiz daha gelişmiş kullanım senaryoları için temel sağlayacaktır.Pratik DATEADD Örnekleri ve Kullanım Senaryoları
Artık
DATEADD'in sözdizimini ve davranışını anladığımıza göre, örnek verilerimizi kullanarak pratik uygulamaları inceleyelim. Bu bölümde,DATEADD'in gerçek iş sorunlarını nasıl çözebileceğini ve veri analizi yeteneklerini nasıl güçlendirebileceğini göstereceğiz.Abonelik yenileme tarihlerini hesaplama
Yaygın bir iş gereksinimi, faturalandırma döngüsüne göre aboneliklerin ne zaman yenileneceğini belirlemektir:
Açıklama: Bu sorgu, her aboneliğin faturalandırma döngüsüne göre ilk yenileme tarihini hesaplar. Faturalandırma döngüsüne bağlı olarak farklı tarih parçaları (
MONTHveyaYEAR) ve değerler (1, 3 veya 1) ileDATEADDkullanılır.Çıktı:
Snowflake'in 28 Şubat’tan 28 Şubat’a (artık yıl) geçişi doğru şekilde ele alışına dikkat edin.
Teslimat aralıklarını öngörme
Siparişler için tahmini teslimat aralıklarını hesaplamak üzere DATEADD kullanalım:
Açıklama: Bu sorgu:
Çıktı:
Bir tarih boyut tablosu oluşturma
Zaman serisi analizi sıklıkla bir tarih boyut tablosu gerektirir. Bunu DATEADD kullanarak oluşturalım:
Açıklama: Bu sorgu:
DATEADD'i bir dizi üreticiyle birlikte kullanarak 2023 yılı için bir dizi tarih üretirÇıktı:
Tarih boyut tabloları, tarih özniteliklerini sorgularda tekrarla hesaplamak yerine önceden hesaplayarak analitik performansı önemli ölçüde artırır. Kuruluş genelinde tarih mantığını standartlaştırır, çeyrekler, hafta sonları ve diğer dönemler için tutarlı tanımlar sağlar.
Bu yaklaşım hataları azaltır ve zaman temelli karmaşık analizleri iş kullanıcıları için daha erişilebilir kılar. Tarih boyutları, yıl, çeyrek, ay ve gün gibi çeşitli zaman hiyerarşilerine göre verimli filtreleme ve gruplamayı da mümkün kılar.
Sıra üretimi ile
DATEADDfonksiyonu, bu boyut tablolarını elle veri girişi olmadan doldurmak için basit bir yöntem sunar.Bu teknik, çok yıllı takvimler veya mali takvimler ya da iş günü hesaplamaları gibi özel zaman boyutları oluşturmak için genişletilebilir. Ek sütunlar, doğru raporlama için kritik olan tatil bayrakları, hafta numaraları veya özel iş dönemi tanımlamaları içerebilir.
Oluşturulduktan sonra bu boyut tablosu, panolar ve raporlarda güçlü zaman zekâsı yetenekleri sağlamak için olgu tablolarıyla birleştirilebilir.
Zamanlanmış olayları analiz etme
Yaklaşan planlı bakım etkinliklerini analiz etmek için
DATEADDkullanalım:Açıklama: Bu sorgu:
Tüm örnek verilerimiz 2023’ten olduğu için, bu sorgu 2025’te tipik olarak sonuç göstermeyecektir; ancak zamanlanmış etkinliklerin nasıl analiz edileceğini kavramsal olarak gösterir.
Faturalandırma dönemlerini hesaplama
Abonelik tabanlı işletmelerde, kesin faturalandırma dönemlerini hesaplamak esastır:
Açıklama: Bu sorgu:
seq4()) CROSS JOIN kullanarak sonraki 6 faturalandırma dönemini üretirDATEADD(MONTH, seq, start_date)ile başlangıç tarihini hesaplarDATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date))ile hesaplar Bu, değişen ay uzunluklarını (28/29/30/31 gün) doğru şekilde ele alırDATEDIFF('DAY', billing_period_start, billing_period_end) + 1ile sayar +1 gereklidir çünkü DATEDIFF bitiş tarihini dahil etmeden tarihler arasındaki farkı döndürürsubscription_idve dönem numarasına göre sıralarÇıktı:
DATEADDfarklı ay uzunluklarını doğru biçimde ele alarak, faturalandırma dönemi hesaplamalarının isabetli olmasını sağlar.Bu örnekler, tarih manipülasyonunu içeren yaygın iş problemlerini çözmek için
DATEADD'in nasıl uygulanabileceğini gösterir.DATEADD'i diğer SQL fonksiyonlarıyla birleştirerek, Snowflake’te zaman temelli analiz ve veri işleme için güçlü sorgular oluşturabilirsiniz.DATEADD’in İlgili Snowflake Fonksiyonlarıyla Karşılaştırılması
Şimdi
DATEADDfonksiyonunun Snowflake’teki diğer bazı fonksiyonlarla nasıl karşılaştırıldığına bakalım.DATEADD ve DATEDIFF ile DATE_TRUNC
DATEADDbelirli bir zaman aralığını bir tarihe ekler veya çıkarırken,DATEDIFFiki tarih arasındaki farkı belirtilen birimde hesaplar.DATEDIFF, tarihler arasındaki tam birim sayısını temsil eden bir tamsayı döndürür ve abonelik süreleri veya sipariş verilişinden bu yana geçen günler gibi süreleri hesaplamak için idealdir.DATE_TRUNCise, daha küçük tarih parçalarını varsayılan değerlerine ayarlayarak bir tarih/saat değerinden kesinliği kaldırır ve fiilen belirtilen birime yuvarlar.Çıktı:
Hangi fonksiyon ne zaman kullanılmalı (karar kriterleri)
Belirli zaman aralıklarıyla tarihleri ileri veya geri kaydırmanız gerektiğinde, örneğin gelecekteki yenileme tarihlerini, teslimat aralıklarını veya ödeme planlarını hesaplamak için
DATEADDkullanın.Yaş, süre veya raporlama için zaman bazlı metrikler gibi, iki tarih arasında geçen zamanı ölçerken
DATEDIFFtercih edin.DATE_TRUNC; verileri zaman dönemlerine göre (günlük, aylık, çeyreklik) gruplamanız, zaman damgalarını tutarlı bir kesinlik düzeyine standartlaştırmanız veya analiz için zaman temelli hiyerarşiler oluşturmanız gerektiğinde en uygunudur.Köşe Durumlarını Ele Alma ve Sorun Giderme
Fonksiyonu kullanırken sorun yaşıyorsanız, sizi sıkıntıdan kurtarabilecek bazı ipuçları burada.
Ay sonu ve artık yıl ayarlamaları
Snowflake,
DATEADDkullanıldığında ay sonu tarihlerini akıllıca ele alır. Ay sonu bir tarihe ay eklerken, Snowflake ortaya çıkan ayın gün sayısından bağımsız olarak o ayın son gününü döndürür. Bu davranış, ayların farklı uzunlukları olsa bile “ayın sonu” kavramını korur.Saat dilimi ve yaz saati uygulaması dikkate almaları
Saat dilimlerini içeren zaman damgası verileriyle (
TIMESTAMP_TZ) çalışırken, DATEADD otomatik olarak yaz saati uygulaması (DST) geçişlerini hesaba katar. Bu, zaman değişiklikleri boyunca hesaplamaların doğru kalmasını sağlar, ancak bazen DST sınırlarında belirli aralıklar eklerken beklenmedik sonuçlar üretebilir.Zaman damgalarıyla DST geçişleri civarında çalışırken, 24 saat eklemenin 1 gün eklemeye eşit olmayabileceğini unutmayın. “add_1d" yaklaşımı, iş uygulamalarında genellikle daha sezgisel sonuçlar üretir.
Yaygın hatalar ve çözümleri
DATEADD hataları genellikle tür uyumsuzlukları veya geçersiz girdilerden kaynaklanır. İşte yaygın sorunlar ve çözümleri:
Performans optimizasyonu ipuçları
Büyük ölçekli işlemlerde
DATEADDkullanırken en iyi performans için:DATEADD'i filtreleme aşamalarından ziyade dönüşüm aşamalarında uygulayın.DATEADD'den önce DATE_TRUNC kullanmayı düşünün.Bu köşe durumlarını ve optimizasyon tekniklerini anlamak, Snowflake’te daha sağlam tarih manipülasyon mantığı yazmanıza, yaygın tuzaklardan kaçınırken performansı en üst düzeye çıkarmanıza yardımcı olacaktır.
Sonuç
Snowflake
DATEADDfonksiyonu, veri profesyonellerinin çeşitli tarih parçalarında zaman aritmetiği yapmasına olanak tanıyan, tarih manipülasyonu için temel bir araçtır. Ay sonu tarihlerini, artık yılları, saat dilimlerini ve Yaz Saati Uygulaması geçişlerini öngörülebilir bir davranışla ele alır.DATEADD'in abonelik yönetimi, teslimat takibi, tarih boyutu oluşturma ve faturalandırma hesaplamalarına nasıl uygulanabileceğini gördük.DATEDIFFveDATE_TRUNCile birlikte kullanıldığında, Snowflake’te zaman bazlı analitik için çekirdek bir bileşen haline gelir.Daha fazla Snowflake bilgisi için Snowflake Foundations yetkinlik yoluna göz atın veya veri modelleme becerilerinizi geliştirmek için Creating Tables in Snowflake içeriğini keşfedin. Using Snowflake Time Travel rehberi, zamansal işlemlere dair anlayışınızı tamamlar. Yeni başlayanlar Snowflake Tutorial for Beginners ile başlamalıdır.