---
title: "Snowflake-kobling"
description: "Fullstendig Snowflake-integrasjonsveiledning for synkronisering av datalageranalyse, kundesegmenter og business intelligence med Brevo gjennom Tajo."
url: https://tajo.io/no/docs/connectors/custom/snowflake/
markdown: https://tajo.io/no/docs/connectors/custom/snowflake.md
lang: no-NO
robots: noindex
---

Be om tidlig tilgang

Skriv inn fornavn og e-postadresse på jobb. Vi sender deg en lenke for å bekrefte forespørselen om tilgang til Tajo.

# Snowflake-kobling

Koblingsstatus: Planlagt Ikke bygget ennå. Tajo kjører ikke denne koblingen i dag.

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

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:

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)

```bash
# 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

```javascript
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

```bash
# 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

```yaml
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

```yaml
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

| 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

```javascript
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

```javascript
// 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

```javascript
// 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

| 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

```yaml
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

- [Segment-kobling](https://tajo.io/no/docs/connectors/custom/segment)
- [PostHog-kobling](https://tajo.io/no/docs/connectors/custom/posthog)
- [Customer Sync-ferdighet](https://tajo.io/no/docs/skills/data-sync/customer-sync)
- [Snowflake SQL API-dokumentasjon](https://docs.snowflake.com/en/developer-guide/sql-api/guide)
