Snowflake konnektor
Csatlakoztasd a Snowflake-et a Brevóhoz a Tajo segítségével, hogy szinkronizáld az ügyfélszegmenseket az adattárházadból, gazdagítsd a kapcsolatprofilokat analitikai adatokkal, és adattárház alapú insightokkal táplált személyre szabott marketingkampányokat futtass.
Áttekintés
| Tulajdonság | Érték |
|---|---|
| Platform | Snowflake |
| Kategória | Adattárház (Egyéni) |
| Telepítés bonyolultsága | Közepes |
| Hivatalos integráció | Nem |
| Szinkronizált adatok | Ügyfelek, Szegmensek, Analitika, Események |
| Hitelesítési módszer | Kulcspár / OAuth 2.0 |
Funkciók
- Fordított ETL – Ügyfélszegmensek küldése a Snowflake-ből Brevo kapcsolatlistákba
- Közönség-szinkronizáció – Adattárházban számított közönségek szinkronizálása célzott kampányokhoz
- Analitika-gazdagítás – Brevo kapcsolatok gazdagítása számított mutatókkal (LTV, RFM pontszámok)
- SQL alapú lekérdezések – A Snowflake SQL REST API használata lekérdezések programozott végrehajtásához
- Ütemezett szinkronizáció – Automatizált adatcsővezetékek futtatása konfigurálható időközönként
- Több utasítás támogatása – Összetett adatátalakítások végrehajtása egyetlen API hívásban
Előfeltételek
Mielőtt elkezdenéd, győződj meg róla, hogy rendelkezel:
- Egy Snowflake fiókkal ACCOUNTADMIN vagy SYSADMIN szerepkörrel
- Egy Brevo fiókkal API-hozzáféréssel
- Egy Tajo fiókkal konnektor engedélyekkel
- Egy dedikált Snowflake adattárházzal az integráció lekérdezéseihez
- Hálózati szabályzattal, amely engedélyezi a Tajo IP-címeket
Hitelesítés
Kulcspár hitelesítés (Ajánlott)
# Generate RSA key pairopenssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocryptopenssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
# Assign public key to Snowflake user# In Snowflake:# ALTER USER tajo_integration SET RSA_PUBLIC_KEY='MII...';OAuth 2.0 hitelesítés
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 hitelesítés
# Using JWT token with the SQL APIcurl -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"}'Konfiguráció
Alapbeállítás
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 * * *" # Every 6 hours
queries: customer_segments: | SELECT email, segment_name, ltv_score, rfm_class FROM customer_segments WHERE updated_at > :last_syncMezőleképezés
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 végpontok
| Végpont | Módszer | Leírás |
|---|---|---|
/api/v2/statements | POST | SQL utasítások beküldése végrehajtásra |
/api/v2/statements/{statementHandle} | GET | Végrehajtási státusz ellenőrzése |
/api/v2/statements/{statementHandle}/cancel | POST | Futó utasítás megszakítása |
/api/v2/statements/{statementHandle}?partition={id} | GET | Eredmény-partíciók lekérése |
SQL API partíciók
A Snowflake SQL API nagy eredménykészleteket partíciókban adja vissza. Minden partíció körülbelül 12 MB adatot tartalmaz. Használd a partition paramétert az eredmények bejárásához.
Kódpéldák
A konnektor inicializálása
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'});Ügyfélszegmensek szinkronizálása SQL API-n keresztül
// Execute a SQL query via Snowflake SQL REST APIconst 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;
// Poll for resultslet status = result.statementStatusUrl;while (result.code !== '090001') { const check = await fetch(status, { headers: { 'Authorization': `Bearer ${jwtToken}` } }); result = await check.json();}
// Sync to Brevo via Tajofor (const row of result.data) { await tajo.contacts.sync({ email: row[0], attributes: { SEGMENT: row[1], LTV: row[2] } });}Fordított ETL csővezeték
// Push computed audiences from Snowflake to Brevo listsawait 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' } }});Ráta-korlátok
| Erőforrás | Korlát | Megjegyzések |
|---|---|---|
| SQL API párhuzamos lekérdezések | 20 felhasználónként | Snowflake fiókonként |
| SQL API eredmény mérete | 12 MB/partíció | Oldalazás partíció azonosítókkal |
| Utasítás időtúllépés | 172 800 mp (48 óra) | Lekérdezésenként konfigurálható |
| API kérések | Terv szerint változó | Snowflake kiadástól függően |
Adattárház-költségek
A Snowflake számítási idő alapján számol fel díjat. Használj dedikált, megfelelően méretezett adattárházat a Tajo lekérdezésekhez, és állíts be automatikus felfüggesztést a költségek minimalizálásához.
Hibaelhárítás
| Probléma | Ok | Megoldás |
|---|---|---|
| Hitelesítés sikertelen | Lejárt JWT token | Generáld újra a JWT tokent érvényes lejárati idővel |
| Lekérdezési időtúllépés | Nagy adatkészlet | Adj hozzá szűrőket vagy használj növekményes szinkronizálást |
| Hálózati hiba | IP nincs fehérlistán | Add hozzá a Tajo IP-ket a Snowflake hálózati szabályzathoz |
| Hiányzó oszlopok | Sémaváltozás | Frissítsd a mezőleképezés konfigurációt |
| Partíciós hiba | Eredmény túl nagy | Dolgozd fel az eredményeket kisebb partíciókban |
Hibakeresési mód
connectors: snowflake: debug: true log_level: verbose log_queries: trueLegjobb gyakorlatok
- Használj dedikált adattárházat – Kerüld a versenyhelyzetet az éles munkaterhelésekkel
- Implementálj növekményes szinkronizálást – Csak az utolsó szinkronizálás óta megváltozott rekordokat kérdezd le
- Állíts be automatikus felfüggesztést – Konfiguráld az adattárházat, hogy 5 perc tétlenség után felfüggessze magát
- Használj kulcspár hitelesítést – A kulcspárt részesítsd előnyben a jelszavas hitelesítéssel szemben
- Optimalizáld a lekérdezéseket – Csak a szükséges oszlopokat szűrd és vetítsd ki a gyorsabb szinkronizáláshoz
- Figyeld a krediteket – Kövesd a Snowflake kredit-fogyasztást az integrációs lekérdezéseknél
Biztonság
- Kulcspár hitelesítés – RSA 2048 bites titkosítás az API-hozzáféréshez
- OAuth 2.0 – Token alapú hitelesítés szerepkör-hatókörrel
- Hálózati szabályzatok – IP engedélyezési lista a Tajo szolgáltatásvégpontokhoz
- Szerepkör alapú hozzáférés – Dedikált Snowflake szerepkör minimálisan szükséges jogosultságokkal
- Titkosított adatátvitel – TLS 1.2+ minden API kommunikációhoz
- Adatmaszkolás – Snowflake dinamikus adatmaszkolás használata érzékeny mezőkhöz