Snowflake Bağlayıcısı
Veri ambarınızdan müşteri segmentlerini senkronize etmek, kişi profillerini analitik verilerle zenginleştirmek ve ambar odaklı öngörülerle kişiselleştirilmiş pazarlama kampanyalarına güç katmak için Snowflake’i Tajo üzerinden Brevo’ya bağlayın.
Genel Bakış
| Özellik | Değer |
|---|---|
| Platform | Snowflake |
| Kategori | Veri Ambarı (Özel) |
| Kurulum Karmaşıklığı | Orta |
| Resmi Entegrasyon | Hayır |
| Senkronize Edilen Veri | Müşteriler, Segmentler, Analitik, Olaylar |
| Kimlik Doğrulama Yöntemi | Anahtar Çifti / OAuth 2.0 |
Özellikler
- Ters ETL - Snowflake’ten müşteri segmentlerini Brevo kişi listelerine aktarın
- Kitle senkronizasyonu - Hedefli kampanyalar için ambar tarafından hesaplanan kitleleri senkronize edin
- Analitik zenginleştirme - Brevo kişilerini hesaplanmış metriklerle (LTV, RFM puanları) zenginleştirin
- SQL tabanlı sorgular - Programatik olarak sorgu çalıştırmak için Snowflake SQL REST API’sini kullanın
- Planlı senkronizasyon - Yapılandırılabilir aralıklarla otomatik veri hatları çalıştırın
- Çoklu ifade desteği - Tek API çağrılarında karmaşık veri dönüşümleri yürütün
Ön Koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
- ACCOUNTADMIN veya SYSADMIN rolüne sahip bir Snowflake hesabı
- API erişimi olan bir Brevo hesabı
- Bağlayıcı izinlerine sahip bir Tajo hesabı
- Entegrasyon sorguları için adanmış bir Snowflake ambarı
- Tajo IP adreslerine izin veren bir ağ politikası
Kimlik Doğrulama
Anahtar Çifti Kimlik Doğrulaması (Önerilen)
# RSA anahtar çifti oluşturunopenssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocryptopenssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
# Genel anahtarı Snowflake kullanıcısına atayın# Snowflake'te:# ALTER USER tajo_integration SET RSA_PUBLIC_KEY='MII...';OAuth 2.0 Kimlik Doğrulaması
const tokenResponse = await fetch( 'https://<account>.snowflakecomputing.com/oauth/token-request', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ grant_type: 'client_credentials', client_id: process.env.SNOWFLAKE_CLIENT_ID, client_secret: process.env.SNOWFLAKE_CLIENT_SECRET, scope: 'session:role:TAJO_ROLE' }) });SQL API Kimlik Doğrulaması
# SQL API ile JWT belirteci kullanmacurl -X POST \ 'https://<account>.snowflakecomputing.com/api/v2/statements' \ -H 'Authorization: Bearer <jwt_token>' \ -H 'Content-Type: application/json' \ -H 'X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT' \ -d '{"statement": "SELECT * FROM customers LIMIT 10", "warehouse": "TAJO_WH"}'Yapılandırma
Temel Kurulum
connectors: snowflake: enabled: true account: "your-account.snowflakecomputing.com" warehouse: "TAJO_WH" database: "MARKETING_DB" schema: "PUBLIC" role: "TAJO_ROLE"
sync: customers: true segments: true analytics: true schedule: "0 */6 * * *" # Her 6 saatte bir
queries: customer_segments: | SELECT email, segment_name, ltv_score, rfm_class FROM customer_segments WHERE updated_at > :last_syncAlan Eşleştirme
field_mapping: email: email first_name: FIRSTNAME last_name: LASTNAME ltv_score: LTV_SCORE rfm_class: RFM_SEGMENT total_orders: ORDER_COUNT last_purchase_date: LAST_ORDER_DATE predicted_churn: CHURN_RISK customer_segment: SEGMENT_NAMEAPI Uç Noktaları
| Uç Nokta | Yöntem | Açıklama |
|---|---|---|
/api/v2/statements | POST | Yürütme için SQL ifadeleri gönder |
/api/v2/statements/{statementHandle} | GET | Yürütme durumunu kontrol et |
/api/v2/statements/{statementHandle}/cancel | POST | Çalışan bir ifadeyi iptal et |
/api/v2/statements/{statementHandle}?partition={id} | GET | Sonuç bölümlerini al |
SQL API Bölümleri
Snowflake SQL API büyük sonuç kümelerini bölümler halinde döndürür. Her bölüm yaklaşık 12MB’a kadar veri içerir. Sonuçlar arasında yinelemek için partition parametresini kullanın.
Kod Örnekleri
Bağlayıcıyı Başlatma
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
await tajo.connectors.connect('snowflake', { account: process.env.SNOWFLAKE_ACCOUNT, privateKey: process.env.SNOWFLAKE_PRIVATE_KEY, warehouse: 'TAJO_WH', database: 'MARKETING_DB', schema: 'PUBLIC'});SQL API ile Müşteri Segmentlerini Senkronize Etme
// Snowflake SQL REST API aracılığıyla bir SQL sorgusu yürütconst response = await fetch( `https://${account}.snowflakecomputing.com/api/v2/statements`, { method: 'POST', headers: { 'Authorization': `Bearer ${jwtToken}`, 'Content-Type': 'application/json', 'X-Snowflake-Authorization-Token-Type': 'KEYPAIR_JWT' }, body: JSON.stringify({ statement: `SELECT email, segment, ltv FROM customer_segments WHERE updated_at > '${lastSync}'`, warehouse: 'TAJO_WH', database: 'MARKETING_DB', schema: 'PUBLIC', timeout: 120 }) });
const result = await response.json();const statementHandle = result.statementHandle;
// Sonuçları yoklamayla kontrol etlet status = result.statementStatusUrl;while (result.code !== '090001') { const check = await fetch(status, { headers: { 'Authorization': `Bearer ${jwtToken}` } }); result = await check.json();}
// Tajo aracılığıyla Brevo'ya senkronize etfor (const row of result.data) { await tajo.contacts.sync({ email: row[0], attributes: { SEGMENT: row[1], LTV: row[2] } });}Ters ETL Hattı
// Snowflake'ten hesaplanmış kitleleri Brevo listelerine aktarawait tajo.connectors.sync('snowflake', { type: 'reverse-etl', query: ` SELECT email, first_name, last_name, predicted_ltv, churn_score FROM ml_predictions.customer_scores WHERE score_date = CURRENT_DATE() `, destination: { list_id: 42, attribute_mapping: { predicted_ltv: 'PREDICTED_LTV', churn_score: 'CHURN_SCORE' } }});Hız Sınırları
| Kaynak | Sınır | Notlar |
|---|---|---|
| SQL API eşzamanlı sorgular | Kullanıcı başına 20 | Snowflake hesabı başına |
| SQL API sonuç boyutu | Bölüm başına 12MB | Bölüm kimlikleriyle sayfalayın |
| İfade zaman aşımı | 172.800 sn (48 s) | Sorgu başına yapılandırılabilir |
| API istekleri | Plana göre değişir | Snowflake sürümüne göre |
Ambar Maliyetleri
Snowflake işlem süresine göre ücretlendirir. Tajo sorguları için adanmış, uygun boyutlu bir ambar kullanın ve maliyetleri en aza indirmek için otomatik askıya alma ayarlayın.
Sorun Giderme
| Sorun | Neden | Çözüm |
|---|---|---|
| Kimlik doğrulama başarısız | Süresi dolmuş JWT belirteci | Geçerli son kullanma tarihiyle JWT’yi yeniden oluşturun |
| Sorgu zaman aşımı | Büyük veri kümesi | Filtre ekleyin veya artımlı senkronizasyon kullanın |
| Ağ hatası | IP izin listesinde yok | Tajo IP’lerini Snowflake ağ politikasına ekleyin |
| Eksik sütunlar | Şema değişikliği | Alan eşleştirme yapılandırmasını güncelleyin |
| Bölüm hatası | Sonuç çok büyük | Sonuçları daha küçük bölümlerde işleyin |
Hata Ayıklama Modu
connectors: snowflake: debug: true log_level: verbose log_queries: trueEn İyi Uygulamalar
- Adanmış bir ambar kullanın - Üretim iş yükleriyle çekişmeyi önleyin
- Artımlı senkronizasyon uygulayın - Yalnızca son senkronizasyondan bu yana değişen kayıtları sorgulayın
- Otomatik askıya almayı ayarlayın - Ambarı 5 dakikalık inaktiflik sonrası askıya alacak şekilde yapılandırın
- Anahtar çifti kimlik doğrulamasını kullanın - Parola kimlik doğrulamasına göre anahtar çiftini tercih edin
- Sorguları optimize edin - Daha hızlı senkronizasyon için yalnızca gerekli sütunları filtreleyin ve seçin
- Kredileri izleyin - Entegrasyon sorguları için Snowflake kredi tüketimini takip edin
Güvenlik
- Anahtar çifti kimlik doğrulaması - API erişimi için RSA 2048-bit şifreleme
- OAuth 2.0 - Rol kapsamlı belirteç tabanlı kimlik doğrulama
- Ağ politikaları - Tajo hizmet uç noktaları için IP izin verme
- Rol tabanlı erişim - Minimum gerekli ayrıcalıklarla adanmış Snowflake rolü
- Şifrelenmiş veri aktarımı - Tüm API iletişimleri için TLS 1.2+
- Veri maskeleme - Hassas alanlar için Snowflake dinamik veri maskeleme kullanın