Snowflake-kobling

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

EgenskapVerdi
PlattformSnowflake
KategoriDatalager (Custom)
OppsettskompleksitetModerat
Offisiell integrasjonNei
Synkroniserte dataKunder, segmenter, analyse, hendelser
AutentiseringsmetodeNø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:

  1. En Snowflake-konto med ACCOUNTADMIN- eller SYSADMIN-rollen
  2. En Brevo-konto med API-tilgang
  3. En Tajo-konto med konnektor-rettigheter
  4. Et dedikert Snowflake-warehouse for integrasjonsspørringer
  5. En nettverkspolicy som tillater Tajo-IP-adresser

Autentisering

Nøkkelparautentisering (anbefalt)

Terminal window
# Generer RSA-nøkkelpar
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
openssl 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

Terminal window
# Bruker JWT-token med SQL API
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"}'

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_sync

Feltmapping

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-endepunkter

EndepunktMetodeBeskrivelse
/api/v2/statementsPOSTSend inn SQL-utsagn for kjøring
/api/v2/statements/{statementHandle}GETSjekk kjøringsstatus
/api/v2/statements/{statementHandle}/cancelPOSTAvbryt et kjørende utsagn
/api/v2/statements/{statementHandle}?partition={id}GETHent 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 API
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;
// Poll for resultater
let status = result.statementStatusUrl;
while (result.code !== '090001') {
const check = await fetch(status, {
headers: { 'Authorization': `Bearer ${jwtToken}` }
});
result = await check.json();
}
// Synkroniser til Brevo via Tajo
for (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-lister
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'
}
}
});

Ratebegrensninger

RessursGrenseMerknader
SQL API samtidige spørringer20 per brukerPer Snowflake-konto
SQL API-resultatstørrelse12 MB per partisjonPaginer med partisjons-ID-er
Utsagnstidsavbrudd172 800 sek (48 t)Konfigurerbart per spørring
API-forespørslerVarierer etter planBasert 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ÅrsakLøsning
Autentisering mislyktesUtløpt JWT-tokenRegenerer JWT med gyldig utløp
SpørringstidsavbruddStort datasettLegg til filtre eller bruk inkrementell synkronisering
NettverksfeilIP ikke hvitelistetLegg Tajo-IP-er til Snowflake-nettverkspolicyen
Manglende kolonnerSkjemaendringOppdater feltmappingkonfigurasjon
PartisjonsfeilResultat for stortBehandle resultater i mindre partisjoner

Feilsøkingsmodus

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

Beste praksis

  1. Bruk et dedikert warehouse - Unngå konflikt med produksjonsarbeidslast
  2. Implementer inkrementell synkronisering - Spør kun om endrede poster siden siste synkronisering
  3. Sett auto-suspend - Konfigurer warehouse til å suspendere etter 5 minutter med inaktivitet
  4. Bruk nøkkelparautentisering - Foretrekk nøkkelpar fremfor passordautentisering
  5. Optimaliser spørringer - Filtrer og projiser kun nødvendige kolonner for raskere synkroniseringer
  6. 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

Relaterte ressurser

Subscribe to updates

developer-docs

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

auto-detect
AI-assistent

Hei! Spør meg om dokumentasjonen.