Ana içeriğe geç

Snowflake Veri Alımı: Kapsamlı Bir Rehber

Snowflake’te veri alımını anlamak için bu rehberi izleyin. Bu öğretici, Snowflake’e yeni başlayanlar veya işlevselliği hızlıca gözden geçirmek isteyenler için idealdir.
· 12 dk. oku

Yapay Zeka ile Keşfedin

Snowflake, ölçeklenebilirliği, performansı ve sadeliği sayesinde veri profesyonelleri tarafından yaygın olarak kullanılan bulut-yerel bir veri platformudur; analitikten veri bilimine kadar her şey için idealdir. Ancak araçtan en yüksek verimi almak için Snowflake veri alımında ustalaşmak kritik önem taşır. Platforma yeniyseniz, önce mimarisine aşina olmak için şu Yeni Başlayanlar için Snowflake Eğitimi ile başlamanızı öneririm.

Verimli ve doğru şekilde geliştirilmiş veri alım boru hatları, verinin aşağı akış kullanım senaryoları için erişilebilir ve güvenilir olmasını sağlamak açısından kritiktir. Periyodik toplu güncellemelerle ya da gerçek zamanlı veri akışlarıyla uğraşıyor olun, doğru alım yöntemi ve araçlarını seçmek veri boru hattınızın performansı ve sürdürülebilirliği üzerinde doğrudan etkiye sahiptir.

Ayrıntılara geçmeden önce, veri akışına ilişkin bazı temel kavramları anlamak önemlidir.:

  • Toplu vs. gerçek zamanlı alım: Toplu işlemler, verileri planlı aralıklarla yükleyerek veriyi toplu şekilde aktarır. Gerçek zamanlı alım ise veri oluşturulurken neredeyse anlık olarak kullanılabilir olmasını sağlar ve canlı akış şeklinde görülür. Şu makaleden daha fazlasını öğrenebilirsiniz: Toplu vs Akış İşleme.
  • Yapılandırılmış vs. yarı-yapılandırılmış veri: Yapılandırılmış veriler satır ve sütunlara düzgünce sığarken, yarı-yapılandırılmış veriler (JSON veya Avro gibi) daha esnek işlem gerektirir ve verinin alınmasına yardımcı olmak için etiketler veya işaretçiler kullanır.

Snowflake’te Veri Alımı Nedir?

Veri alımı, verilerin çeşitli kaynaklardan depolama, işleme ve analiz için bir veritabanına taşınması sürecini ifade eder. Verileriniz bulut depolamadan, veritabanlarından, uygulamalardan veya olay akışlarından gelsin, alım Snowflake içindeki veri yaşam döngüsünün ilk adımıdır.

Snowflake’in benzersiz mimarisi işlemeyi ve depolamayı birbirinden ayırır. Bu, analitik performansı etkilemeden veri alımını basitleştirir. Alım, veri kaynağına ve kullanım senaryosuna bağlı olarak dahili aşamaları (Snowflake içinde) veya harici aşamaları (S3 ya da Azure Blob Storage gibi) hedefleyebilir. Daha fazla bilgi için şu makale Snowflake Mimarisi konusunda derinlemesine bir inceleme sunuyor.

Temel alım hususları

Bir alım boru hattı tasarlarken  Verinin Dört V’sini aklınızda tutun:

  • Hacim (Volume): Ne kadar veri alıyorsunuz?
  • Hız (Velocity): Veri ne sıklıkla geliyor?
  • Çeşitlilik (Variety): Hangi biçimler söz konusu (CSV, JSON, Parquet)?
  • Doğruluk (Veracity): Veri ne kadar güvenilir, hangi düzeyde temizlik gerekiyor?

Bu dört bileşen dikkate alınmalıdır. Hacim ve hız, boru hattımızın bant genişliğini ve veriyi işleme yeteneğini değerlendirmemizi gerektirir. Çeşitlilik ve doğruluk ise akış sırasında verinin kalite kontrolünü yapabilen, sağlam ve esnek boru hatları geliştirmemizi gerektirir.

Temel Alım Hususları

Snowflake’te Veri Alım Yöntemleri

Snowflake’te kullanılabilen bazı veri alım yöntemlerini tartışalım. Bazı yöntemler COPY INTO, Snowpipe veya Snowpipe streaming gibi komutların kullanılmasını içerir.

COPY INTO ile Toplu Alım

Snowflake’in en temel alım yöntemi COPY INTO komutudur. COPY INTO, harici aşamalarda depolanan dosyalardan veriyi Snowflake tablolarına yükler. Geçmiş verileri toplu yüklemek veya düzenli toplu güncellemeler için idealdir.

Bulut depolamadan veri yükleme

Amazon S3, Azure Blob Storage veya Google Cloud Storage’dan, bu bulut hizmetlerini Snowflake’e bağlayan bir harici aşama oluşturarak veri yükleyebilirsiniz. Doğru dosya yolu ve kimlik bilgileriyle Snowflake dosyaları verimli biçimde okur ve işler.

Farklı veri biçimlerini yönetme

COPY INTO birden çok biçimi destekler: CSV, JSON, Avro, ORC ve Parquet. Bağlayıcıyı oluşturmanın bir parçası olarak çeşitli biçim türü seçenekleri bulunur. Liste oldukça kapsamlıdır; ancak genellikle tarih biçimleri, ayırıcılar (virgül veya diğer değerler), kodlama, null seçenekleri vb. gibi ayarları tanımlamak için seçenekler vardır. Tüm ayrıntılar için Snowflake web sitesindeki belgeleri okumanızı kesinlikle tavsiye ederim.

Hata yönetimi ve izleme

ON_ERROR ayarını, sorunlu satırları atlayacak, yüklemeyi durduracak veya hataları günlüğe kaydedecek şekilde yapılandırabilirsiniz. Bunu hataları izlemek ve döndürmek için VALIDATION_MODE ile birleştirin. Yükleme sırasında oluşan hata sayısını da izleyen LOAD_HISTORY gibi metadata tablolarını kullanabilirsiniz.

Snowpipe ile Sürekli Alım

Snowpipe, belirli bir aşamada yeni dosyalar göründüğünde bunları otomatik olarak algılayıp yükleyerek sürekli alım sağlar. Bu işlevsellik Snowflake platformunun içine yerleştirilmiştir. Otomatik dosya entegrasyonu, olay tabanlı tetikleyiciler ve izleme sunar.

Dosya alımını otomatikleştirme

Snowpipe, bulut depolama bildirimleriyle entegrasyon yoluyla dosyaları otomatik alacak şekilde yapılandırılabilir; bu da manuel çalıştırma ihtiyacını azaltır. Örneğin Amazon S3, belirli bir kovadaki değişiklikler için kullanıcıları uyaran olay bildirimlerine sahiptir. 

Snowpipe, bu bildirimleri gören bir kullanıcıya bağlanabilir. Bu kullanıcı bir olay bildirimi aldığında Snowpipe veri alım sürecini başlatmak üzere tetiklenir.

veri dosyalarının Snowflake harici S3 aşamasına aktığı, alım SQS kuyruğunun Snowpipe COPY INTO işlevini tetiklediği hattı gösteren diyagram

Otomatik Veri Alımının Diyagramı (Snowflake Belgeleri)

İzleme ve yönetim

Snowflake, birkaç farklı izleme ve hata yönetimi aracı sunar. PIPE_USAGE_HISTORY metadata tablosu, alınan bayt ve dosyalar gibi veri yükleme geçmişini görüntülemeyi sağlar. VALIDATE_PIPE_LOAD tablosu ise oluşan hatalar hakkında bilgi sağlar. 

Snowpipe içinde, dosyaları atlamamıza ve hatalarla ilgili uyarı bildirimleri göndermemize olanak tanıyan ON_ERROR ayarı bulunur.

Snowpipe Streaming ile Gerçek Zamanlı Akış

Snowpipe Streaming, milisaniye düzeyinde gecikmeyle gerçek zamanlı akış verilerini almak için Snowflake’in en yeni yöntemidir. Dosyalara tepki veren Snowpipe’in aksine, Snowpipe Streaming veriyi bir API aracılığıyla satır satır alır. Bu yöntemler birbirini tamamlar; esneklik ve verimlilik sağlar.

Snowflake Ingest SDK’yı kullanma

Snowflake Ingest SDK, geliştiricilerin bellekte yaşayan bir kuyruk kullanarak veriyi doğrudan Snowflake’e iten Java veya Scala uygulamaları yazmasına olanak tanır. Bu uygulamalar, Apache Kafka konuları ve diğer akış bağlayıcıları gibi yerlerden satır düzeyinde veri kabul edecek şekilde tasarlanmıştır.

Kullanım senaryoları ve faydalar

Telemetri, tıklama akışı veya IoT verileri için mükemmeldir; Snowpipe Streaming, minimum depolama yükü ve yüksek aktarım hızıyla verinin neredeyse gerçek zamanlı kullanılabilirliğini sağlar. Bu alım yöntemi, veriniz yüksek hızlı ve neredeyse gerçek zamanlı gerektiğinde idealdir.

Snowflake’te Veri Alımı için Araçlar

Snowpipe ve Snowpipe Streaming gibi yöntemlerle Snowflake’e veri almanın bir parçası olarak, veri boru hatlarını doğru biçimde bağlamak için bazı araçlara ihtiyaç vardır. Başlıca araçlardan biri, veri kaynakları ile Snowflake arasında iletişim aracı olarak yaygın şekilde kullanılan Kafka’dır. Alternatif olarak Fivetran ve Matillion gibi, Snowflake’e ETL süreçlerini yönetebilen üçüncü taraf araçlar da vardır.

Kafka için Snowflake bağlayıcısı

Snowflake, Kafka konularından okuyan ve iletileri doğrudan Snowflake depolamasına yazan bir Kafka bağlayıcısı sunar. Veri Kafka’ya yayımlanır ve Snowpipe veya Snowpipe Streaming kullanılarak Snowflake bu yayımlanan veriyi alıp dahili depolamaya aktarabilir.  Bu, veri aktarımı için son derece esnek bir yoldur. Kafka’nın gücü ve ölçeklenebilirliğini kapsayan şu Apache Kafka’ya Giriş kursunu öneririm.

Kafka yapılandırması ve en iyi uygulamalar

Entegrasyonu doğru şekilde kurmak için bir Kafka Connect işçisi yapılandırmanız ve konu adları, arabellek boyutları ve Snowflake kimlik bilgileri gibi parametreleri ayarlamanız gerekir. 

Bu yapılandırmalar, izlemek istediğimiz veri türlerini ve metadata bilgilerini de belirlememize olanak tanır. Bu bağlantıları tanımlamanın iki ana yolu, ya Confluent (Apache Kafka’nın üçüncü taraf yönetilen sürümü) üzerinden ya da açık kaynak Apache Kafka JDK’sını manuel kullanmaktır. 

Hangisini seçerseniz seçin, şu en iyi uygulamaları izleyin:

  • Olay sırasını korumak için bölümleme ve anahtara dayalı sıralama kullanın.
  • Gecikme ve bant genişliğini dengelemek için boşaltma (flush) aralıklarını optimize edin.

Snowflake SDK ile Kafka’nın akış veri için kullanımı örneği (Snowflake Belgeleri)

Üçüncü taraf ETL araçları

Kafka’nın yanı sıra Fivetran, Matillion ve Talend gibi üçüncü taraf ETL platformları, yüzlerce kaynaktan veriyi Snowflake’e almak ve dönüştürmek için yönetilen ETL/ELT çözümleri sunar. Bu üçüncü taraf platformlar genellikle veri yönetimine düşük kodlu ve basitleştirilmiş SaaS çözümleri sunar; ancak bu platformları seçmenin kendine özgü dezavantajları vardır.

Üçüncü taraf ETL araçlarının artıları ve eksileri

Maliyet ve esneklik gibi bazı hususlar, üçüncü taraf ETL araçları kullanılırken dikkatle değerlendirilmelidir. Snowflake’e veri alımı için kesinlikle basitleştirilmiş yaklaşımlar sunsalar da, nihayetinde kullanımı daha zorlaştırabilecek kısıtlamalar olabilir.

  • Artıları: Kod gerektirmeyen kurulum, yaygın SaaS araçları için bağlayıcılar, yerleşik dönüşüm özellikleri, basit ve entegre etmesi kolay
  • Eksileri: Abonelik maliyeti, özel mantık için sınırlı kontrol ve genellikle sağlayıcıya bağımlılık (kolayca taşınamama)

Bu kısıtları bilerek, doğru aracı seçerken şunları değerlendirmelisiniz:

  • Ekibinizin teknik uzmanlığı
  • Sıklık ve gecikme gereksinimleri
  • Kaynak sistem desteği
  • Bütçe ve lisans kısıtları

Snowflake Veri Alımı için En İyi Uygulamalar

Bir boru hattı tasarlamak zorlu bir iştir; ancak hayatınızı kolaylaştırmak için izleyebileceğiniz bazı genel kavramlar ve en iyi uygulamalar vardır. Bunlar verimliliği artırmayı ve maliyetleri en aza indirmeyi hedefler.

Performans ve maliyet için optimize edin

Gzip veya Parquet gibi dosya biçimlerini kullanarak dosyalarınızın boyutunu en aza indirip veri depolama maliyetini düşürün. Ayrıca, veri aktarılırken kopyalama sürecinizde çok sayıda küçük dosya yerine daha az sayıda büyük dosyayı tercih etmek genellikle daha iyidir. Tek bir büyük dosyanın, birden fazla küçük dosyayı aktarmaya kıyasla ağ ek yükü daha azdır. Son olarak, işlem ve ağ maliyetleri bir endişeyse, büyük toplu işleri yoğun olmayan saatlere planlayın.

Ayrıca, boru hatlarınızda şema evrimini ele aldığınızdan emin olun. Parquet gibi bazı veri türleri doğal olarak şema evrimine izin verir. Bu, veri kaynağındaki veri şeması değişse bile geçmiş verileri etkilemediği ve veri için ileri/geri uyumluluğu koruduğu anlamına gelir.

Veri kalitesi ve gözlemlenebilirliği sağlayın

Veri alım boru hattınızda göz önünde bulundurmanız gereken bir diğer konu da veri kalitesi ve gözlemlenebilirliğidir. Akıllı bir yol, veriyi nihai veritabanı depolamanıza entegre etmeden önce hazırlama (staging) yapmaktır. Veri doğruluğunu ve bozulma olmadığını sağlamak için karma (hash) ve metadata kontrolleri yapmak isteyebilirsiniz. Ayrıca, kullanıcılara verinin kendisine doğrudan erişim vermek yerine, farklı veri kaynaklarını birleştirebilen görünümler (view) oluşturmak daha iyi bir kullanıcı deneyimi sunabilir.

Son olarak, veri boru hattınızın sağlığını sürekli izlemek ve günlüklemek istersiniz. Alım başarısı, gecikme ve hataları izlemek için Snowflake’in metadata görünümlerini veya DataDog ya da Monte Carlo gibi harici gözlemlenebilirlik araçlarını kullanarak panolar kurun. 

Uygulamalı Öğretici: Snowflake’e Veri Alma

Burada Snowflake’te boru hatlarını nasıl oluşturabileceğinize dair bazı üst düzey örnekleri ele alacağız. Not: Tam adımlarınız, veri yöneticinizin Snowflake ortamınızı nasıl yapılandırdığına bağlı olarak farklı olabilir. Kuruluşunuzun en iyi uygulamalarını takip ettiğinizden emin olun! 

Önkoşullar

Öncelikle bazı önkoşullar. Veritabanını yönetmenize izin veren bir Snowflake hesabına ihtiyacınız olacak. Sık görülen erişim izinlerinden bazıları şema oluşturma yetkisidir. İkinci olarak, bulunduğunuz sunucunun veriyi depoladığınız harici bulut depolama kovasına veya dahili depolamaya erişimi olduğundan emin olmalısınız. Bunun için veritabanı yöneticinizle görüşün.

Adım 1: COPY INTO Kullanarak Veri Yükleme

Snowflake veritabanınıza bir CSV dosyası yüklemenin basit bir örneğini inceleyelim.

1. Veriyi hazırlayın ve yükleyin Dosyalarınızı (ör. CSV) biçimlendirin ve bulut depolama kovasına yükleyin.

2. Aşama (stage) ve dosya biçimi oluşturun

/* specify the file format */CREATE FILE FORMAT my_csv_format TYPE = 'CSV' 

/* this will help if there are double quotes or apostrophes in your data */

FIELD_OPTIONALLY_ENCLOSED_BY='"';

/* Stage the data using the credentials you have */

CREATE STAGE my_stage URL='s3://my-bucket/data/' CREDENTIALS=(AWS_KEY_ID='...' AWS_SECRET_KEY='...');

3.  COPY INTO çalıştırın ve doğrulayın

COPY INTO my_table FROM @my_stage FILE_FORMAT = (FORMAT_NAME = 'my_csv_format');SELECT * FROM my_table;

Adım 2: Snowpipe ile Alımı Otomatikleştirme

Snowpipe kullanarak otomatik bir alım oluşturmak oldukça basit olabilir!

1. Snowpipe oluşturun

CREATE PIPE my_pipe 

AUTO_INGEST = TRUE

   AWS_SNS_TOPIC = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket'

	AS 

COPY INTO my_table 

FROM @my_stage

 FILE_FORMAT = (TYPE = ‘CSV’);

2. Bulut depolama olaylarını yapılandırın Boru hattını SNS/SQS kullanarak tetiklemek için S3 kova bildirimini ayarlayın. Daha fazla ayrıntı için Datacamp’teki şu rehberi izlerim: AWS SNS.

3. Alımı izleyin 

Boru etkinliğini görmek için SNOWPIPE_EXECUTION_HISTORY metadata tablosunu sorguladığınızdan emin olun.

Adım 3: Snowpipe Streaming ile Veri Akışı

Snowpipe Streaming’i kurmak oldukça yoğun olabilir ve burada ele alabileceğimizden biraz daha ayrıntılıdır. Bazı temel adımları kapsayacağım, ancak istemci SDK’sının nasıl oluşturulacağına dair örnekler için esas olarak Snowflake Streaming belgelerini okumanızı öneririm.

  1. SDK’yı kurun: Java veya Scala uygulamanıza Snowflake Ingest SDK’yı yükleyin. Ardından profile.json dosyasında API bağlantı ayarlarını yapılandırın. Gerekli özellikler yetkilendirme kimlik bilgilerini, Snowflake URL’sini ve kullanıcıyı içerir. Bu, SDK’nın Snowflake sunucunuza bağlanmasını sağlar. Gelen veriyi işlemek için geri kalan Java kodunuzu yazın; insertRows yöntemi dahil.
  2. Örnek bir uygulama ile veriyi akıtın: Kafka bağlayıcınızdan veriyi, ClientSDK kullanarak Snowflake API’nizi çağıracak şekilde itin.
  3. İzleyin ve hataları yönetin: SDK istisnalarını yakalayın, başarısız istekleri yeniden deneyin ve metadata tabloları ve panoları kullanarak alım metriklerini izleyin. API’nizin hataları durduracak ve hata bildirimleri gönderecek şekilde tasarlandığından emin olun.

Sonuç

Snowflake, geleneksel toplu yüklemelerden gerçek zamanlı akışa kadar sağlam ve esnek bir veri alım yöntemleri paketi sunar. Mevcut araç ve teknikleri anlayarak veri ekipleri güvenilir, yüksek performanslı ve maliyet etkin boru hatları tasarlayabilir. İster yeni başlıyor olun ister kurumsal ölçekte bir çözümü optimize ediyor olun, Snowflake veri alımında ustalaşmak modern bir veri yığını inşa etmenin kritik bir adımıdır. Snowflake hakkında daha fazla bilgi edinmek isterseniz aşağıdaki kaynakları şiddetle tavsiye ederim:

Snowflake Veri Alımı Hakkında SSS

Snowpipe ile Snowpipe Streaming arasındaki fark nedir?

Snowpipe, dosyalardan (genellikle bulut depolamada saklanan) veriler iniş yaptıkça olay tabanlı tetikleyiciler kullanarak alır. Snowpipe Streaming ise bir SDK kullanarak veriyi gerçek zamanlı olarak, satır satır doğrudan bir uygulamadan alır ve milisaniye düzeyinde gecikme sağlar.

Snowflake, gelen verilerimdeki şema değişikliklerini otomatik olarak algılayabilir mi?

Otomatik olarak değil. Şema evrimi stratejilerini manuel olarak ya da bunu destekleyen araçlarla uygulamanız gerekir. JSON gibi yarı-yapılandırılmış veriler için dinamik yapıları barındırmak üzere variant sütunlarını kullanabilirsiniz.

Veri alımımın doğru çalışıp çalışmadığını nasıl izlerim?

Snowflake, alım olaylarını, hataları ve performansı izlemek için LOAD_HISTORY, PIPE_USAGE_HISTORY ve TASK_HISTORY gibi çeşitli görünümler sağlar. Ayrıca uyarılar ve panolar için gözlemlenebilirlik araçlarıyla entegre olabilirsiniz.

Snowflake veri alımı için hangi dosya formatlarını destekler?

Snowflake, CSV, JSON, Avro, ORC, Parquet ve XML’i destekler. Dosyanın nasıl yorumlanacağını bir dosya biçimi nesnesi kullanarak tanımlarsınız.

Bulut depolama veya Kafka dışındaki kaynaklardan Snowflake’e veri alabilir miyim?

Evet. Üçüncü taraf araçlar (örn. Fivetran, Matillion, Airbyte), Snowflake’in REST API’si, Snowpipe Streaming veya bağlayıcılar ya da SDK’lar kullanan özel komut dosyaları aracılığıyla veri alabilirsiniz.

Konular

İlgili