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ış

ÖzellikDeğer
PlatformSnowflake
KategoriVeri Ambarı (Özel)
Kurulum KarmaşıklığıOrta
Resmi EntegrasyonHayır
Senkronize Edilen VeriMüşteriler, Segmentler, Analitik, Olaylar
Kimlik Doğrulama YöntemiAnahtar Ç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:

  1. ACCOUNTADMIN veya SYSADMIN rolüne sahip bir Snowflake hesabı
  2. API erişimi olan bir Brevo hesabı
  3. Bağlayıcı izinlerine sahip bir Tajo hesabı
  4. Entegrasyon sorguları için adanmış bir Snowflake ambarı
  5. Tajo IP adreslerine izin veren bir ağ politikası

Kimlik Doğrulama

Anahtar Çifti Kimlik Doğrulaması (Önerilen)

Terminal window
# RSA anahtar çifti oluşturun
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
openssl 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ı

Terminal window
# SQL API ile JWT belirteci kullanma
curl -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_sync

Alan 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_NAME

API Uç Noktaları

Uç NoktaYöntemAçıklama
/api/v2/statementsPOSTYürütme için SQL ifadeleri gönder
/api/v2/statements/{statementHandle}GETYürütme durumunu kontrol et
/api/v2/statements/{statementHandle}/cancelPOSTÇalışan bir ifadeyi iptal et
/api/v2/statements/{statementHandle}?partition={id}GETSonuç 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üt
const 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 et
let 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 et
for (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 aktar
await 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ı

KaynakSınırNotlar
SQL API eşzamanlı sorgularKullanıcı başına 20Snowflake hesabı başına
SQL API sonuç boyutuBölüm başına 12MBBölüm kimlikleriyle sayfalayın
İfade zaman aşımı172.800 sn (48 s)Sorgu başına yapılandırılabilir
API istekleriPlana göre değişirSnowflake 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

SorunNedenÇözüm
Kimlik doğrulama başarısızSüresi dolmuş JWT belirteciGeçerli son kullanma tarihiyle JWT’yi yeniden oluşturun
Sorgu zaman aşımıBüyük veri kümesiFiltre ekleyin veya artımlı senkronizasyon kullanın
Ağ hatasıIP izin listesinde yokTajo IP’lerini Snowflake ağ politikasına ekleyin
Eksik sütunlarŞema değişikliğiAlan eşleştirme yapılandırmasını güncelleyin
Bölüm hatasıSonuç çok büyükSonuçları daha küçük bölümlerde işleyin

Hata Ayıklama Modu

connectors:
snowflake:
debug: true
log_level: verbose
log_queries: true

En İyi Uygulamalar

  1. Adanmış bir ambar kullanın - Üretim iş yükleriyle çekişmeyi önleyin
  2. Artımlı senkronizasyon uygulayın - Yalnızca son senkronizasyondan bu yana değişen kayıtları sorgulayın
  3. Otomatik askıya almayı ayarlayın - Ambarı 5 dakikalık inaktiflik sonrası askıya alacak şekilde yapılandırın
  4. Anahtar çifti kimlik doğrulamasını kullanın - Parola kimlik doğrulamasına göre anahtar çiftini tercih edin
  5. Sorguları optimize edin - Daha hızlı senkronizasyon için yalnızca gerekli sütunları filtreleyin ve seçin
  6. 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

İlgili Kaynaklar

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI Asistan

Merhaba! Belgeler hakkında her şeyi sorabilirsiniz.