Snowflake-kobling
Koblingsstatus: Planlagt Ikke bygget ennå. Tajo kjører ikke denne koblingen i dag.
Illustrasjon · eksempeldata
Eksempel på synkronisering
Kilde
Snowflake
Koblingsstatus: Planlagt
Mål
Det andre verktøyet ditt
Koblingsstatus: Eget verktøy
Feltkobling
| Kildefelt | Målfelt | Eksempelverdi |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Utkast
- Se gjennom én oppføring
- Godkjenn denne versjonen
Status gjelder hver enkelt kobling og garanterer ikke at denne synkroniseringen er klar. Feltene er illustrative. Kontroller faktisk skjema og tillatelser før synkroniseringen kjører.
Koble Snowflake til Brevo gjennom Tajo for å synkronisere kundesegmenter fra datalageret ditt, berike kontaktprofiler med analysedata og drive personaliserte markedsføringskampanjer med lagerdrevet innsikt.
Oversikt
| Egenskap | Verdi |
|---|---|
| Plattform | Snowflake |
| Kategori | Datalager (Custom) |
| Oppsettskompleksitet | Moderat |
| Offisiell integrasjon | Nei |
| Synkroniserte data | Kunder, segmenter, analyse, hendelser |
| Autentiseringsmetode | Nøkkelpar / OAuth 2.0 |
Funksjoner
- Reverse ETL - Push kundesegmenter fra Snowflake til Brevo-kontaktlister
- Målgruppesynkronisering - Synkroniser lagerberegnede målgrupper for målrettede kampanjer
- Analyseberikelse - Berik Brevo-kontakter med beregnede målinger (LTV, RFM-score)
- SQL-baserte spørringer - Bruk Snowflake SQL REST API for å kjøre spørringer programmatisk
- Planlagt synkronisering - Kjør automatiserte datapipelines med konfigurerbare intervaller
- Støtte for flere utsagn - Kjør komplekse datatransformasjoner i enkle API-kall
Forutsetninger
Før du begynner, sørg for at du har:
- En Snowflake-konto med ACCOUNTADMIN- eller SYSADMIN-rollen
- En Brevo-konto med API-tilgang
- En Tajo-konto med konnektor-rettigheter
- Et dedikert Snowflake-warehouse for integrasjonsspørringer
- En nettverkspolicy som tillater Tajo-IP-adresser
Autentisering
Nøkkelparautentisering (anbefalt)
# Generer RSA-nøkkelparopenssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocryptopenssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
# Tildel offentlig nøkkel til Snowflake-bruker# I Snowflake:# ALTER USER tajo_integration SET RSA_PUBLIC_KEY='MII...';OAuth 2.0-autentisering
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-autentisering
# Bruker JWT-token med 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"}'Konfigurasjon
Grunnleggende oppsett
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 * * *" # Hver 6. time
queries: customer_segments: | SELECT email, segment_name, ltv_score, rfm_class FROM customer_segments WHERE updated_at > :last_syncFeltmapping
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-endepunkter
| Endepunkt | Metode | Beskrivelse |
|---|---|---|
/api/v2/statements | POST | Send inn SQL-utsagn for kjøring |
/api/v2/statements/{statementHandle} | GET | Sjekk kjøringsstatus |
/api/v2/statements/{statementHandle}/cancel | POST | Avbryt et kjørende utsagn |
/api/v2/statements/{statementHandle}?partition={id} | GET | Hent resultatpartisjoner |
SQL API-partisjoner
Snowflake SQL API returnerer store resultatsett i partisjoner. Hver partisjon inneholder opptil omtrent 12 MB data. Bruk partisjonsparameteren for å iterere gjennom resultater.
Kodeeksempler
Initialiser kobling
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'});Synkroniser kundesegmenter via SQL API
// Kjør en SQL-spørring 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 resultaterlet status = result.statementStatusUrl;while (result.code !== '090001') { const check = await fetch(status, { headers: { 'Authorization': `Bearer ${jwtToken}` } }); result = await check.json();}
// Synkroniser til Brevo via Tajofor (const row of result.data) { await tajo.contacts.sync({ email: row[0], attributes: { SEGMENT: row[1], LTV: row[2] } });}Reverse ETL-pipeline
// Push beregnede målgrupper fra Snowflake til Brevo-listerawait 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' } }});Ratebegrensninger
| Ressurs | Grense | Merknader |
|---|---|---|
| SQL API samtidige spørringer | 20 per bruker | Per Snowflake-konto |
| SQL API-resultatstørrelse | 12 MB per partisjon | Paginer med partisjons-ID-er |
| Utsagnstidsavbrudd | 172 800 sek (48 t) | Konfigurerbart per spørring |
| API-forespørsler | Varierer etter plan | Basert på Snowflake-versjon |
Warehouse-kostnader
Snowflake fakturerer basert på kompute-tid. Bruk et dedikert, riktig dimensjonert warehouse for Tajo-spørringer og sett auto-suspend for å minimere kostnader.
Feilsøking
| Problem | Årsak | Løsning |
|---|---|---|
| Autentisering mislyktes | Utløpt JWT-token | Regenerer JWT med gyldig utløp |
| Spørringstidsavbrudd | Stort datasett | Legg til filtre eller bruk inkrementell synkronisering |
| Nettverksfeil | IP ikke hvitelistet | Legg Tajo-IP-er til Snowflake-nettverkspolicyen |
| Manglende kolonner | Skjemaendring | Oppdater feltmappingkonfigurasjon |
| Partisjonsfeil | Resultat for stort | Behandle resultater i mindre partisjoner |
Feilsøkingsmodus
connectors: snowflake: debug: true log_level: verbose log_queries: trueBeste praksis
- Bruk et dedikert warehouse - Unngå konflikt med produksjonsarbeidslast
- Implementer inkrementell synkronisering - Spør kun om endrede poster siden siste synkronisering
- Sett auto-suspend - Konfigurer warehouse til å suspendere etter 5 minutter med inaktivitet
- Bruk nøkkelparautentisering - Foretrekk nøkkelpar fremfor passordautentisering
- Optimaliser spørringer - Filtrer og projiser kun nødvendige kolonner for raskere synkroniseringer
- Overvåk kreditter - Spor Snowflake-kredittforbruk for integrasjonsspørringer
Sikkerhet
- Nøkkelparautentisering - RSA 2048-bits kryptering for API-tilgang
- OAuth 2.0 - Token-basert autentisering med rollescoping
- Nettverkspolicyer - IP-hviteliste for Tajo-tjenesteendepunkter
- Rollebasert tilgang - Dedikert Snowflake-rolle med minimalt nødvendige rettigheter
- Kryptert dataoverføring - TLS 1.2+ for all API-kommunikasjon
- Datamaskering - Bruk Snowflakes dynamiske datamaskering for sensitive felt