---
title: "Trình Kết Nối Snowflake"
description: "Hướng dẫn tích hợp Snowflake đầy đủ để thực hiện reverse ETL, đồng bộ customer data từ data warehouse sang Brevo qua Tajo."
url: https://tajo.io/vi/docs/connectors/custom/snowflake/
markdown: https://tajo.io/vi/docs/connectors/custom/snowflake.md
lang: vi-VN
robots: noindex
---

Đăng ký quyền truy cập sớm

Nhập tên và địa chỉ email công việc của bạn. Chúng tôi sẽ gửi liên kết để xác nhận yêu cầu truy cập Tajo.

# Trình Kết Nối Snowflake

Trạng thái trình kết nối: Dự kiến Chưa được xây dựng. Hiện Tajo chưa chạy trình kết nối này.

| Trường nguồn | Trường đích | Giá trị mẫu |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Kết nối Snowflake với Brevo qua Tajo để thực hiện reverse ETL — truy vấn data warehouse của bạn và đồng bộ dữ liệu phân tích, hành vi khách hàng và chỉ số tương tác vào Brevo.

## Tổng Quan

| Thuộc Tính | Giá Trị |
| --- | --- |
| **Nền Tảng** | Snowflake |
| **Danh Mục** | Tùy Chỉnh |
| **Độ Phức Tạp Thiết Lập** | Nâng Cao |
| **Tích Hợp Chính Thức** | Không |
| **Dữ Liệu Đồng Bộ** | Tables, Views, Kết Quả Truy Vấn |
| **Loại API** | Snowflake SQL API + Driver |
| **Xác Thực** | Key Pair Authentication |

## Tính Năng

- **Reverse ETL** - Đẩy dữ liệu warehouse vào Brevo contacts và events
- **SQL linh hoạt** - Viết bất kỳ SQL query nào để lấy dữ liệu cần đồng bộ
- **Lên lịch đồng bộ** - Cấu hình đồng bộ định kỳ với khoảng thời gian tùy chỉnh
- **Cập nhật tăng dần** - Chỉ đồng bộ rows mới hoặc thay đổi kể từ lần đồng bộ cuối
- **Data models tùy chỉnh** - Đồng bộ từ bảng tùy chỉnh, views, hoặc materialized views

## Yêu Cầu

Trước khi bắt đầu, hãy đảm bảo bạn có:

1. Tài khoản Snowflake với quyền truy cập API
2. Service user với key pair authentication
3. Warehouse và database đã được gán
4. Tài khoản Brevo với quyền truy cập API
5. Tài khoản Tajo

## Xác Thực

### Key Pair Authentication (Khuyến Nghị)

Snowflake khuyến nghị key pair authentication cho service accounts.

```bash
# Tạo private key
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt

# Tạo public key
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub

# Gán public key cho user Snowflake
ALTER USER tajo_service SET RSA_PUBLIC_KEY='<public_key_contents>';
```

```bash
tajo connectors install snowflake \
  --account $SNOWFLAKE_ACCOUNT \
  --username $SNOWFLAKE_USER \
  --private-key-path ./rsa_key.p8 \
  --warehouse $SNOWFLAKE_WAREHOUSE \
  --database $SNOWFLAKE_DATABASE
```

## Cấu Hình

### Thiết Lập Cơ Bản

```yaml
connectors:
  snowflake:
    enabled: true
    account: "${SNOWFLAKE_ACCOUNT}"
    username: "${SNOWFLAKE_USER}"
    private_key_path: "${SNOWFLAKE_PRIVATE_KEY_PATH}"
    warehouse: "COMPUTE_WH"
    database: "ANALYTICS"
    schema: "PUBLIC"

    sync_models:
      - name: "brevo_contacts"
        query: |
          SELECT email, first_name, last_name, plan, ltv
          FROM customers
          WHERE is_active = true
        target: brevo_contacts
        primary_key: email
        schedule: "0 2 * * *"  # Hàng ngày lúc 2 giờ sáng
```

### Ánh Xạ Trường

```yaml
field_mapping:
  email: email
  first_name: FIRSTNAME
  last_name: LASTNAME
  plan_tier: PLAN_TYPE
  lifetime_value: LIFETIME_VALUE
  last_login: LAST_LOGIN_DATE
  is_paid: IS_PAID_CUSTOMER
  product_score: ENGAGEMENT_SCORE
```

## SQL Queries Ví Dụ

### Query Đồng Bộ Contacts

```sql
-- Lấy customers hoạt động với tất cả thuộc tính cần thiết
SELECT
  c.email,
  c.first_name,
  c.last_name,
  c.phone,
  s.plan_name as plan,
  s.mrr,
  c.created_at as signup_date,
  DATEDIFF('day', MAX(e.event_time), CURRENT_TIMESTAMP()) as days_since_active
FROM customers c
LEFT JOIN subscriptions s ON c.id = s.customer_id AND s.status = 'active'
LEFT JOIN events e ON c.id = e.user_id AND e.event_time >= DATEADD('day', -30, CURRENT_DATE())
WHERE c.email IS NOT NULL
  AND c.deleted_at IS NULL
GROUP BY 1,2,3,4,5,6,7
```

## Ví Dụ Code

### Khởi Tạo Trình Kết Nối

```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,
  username: process.env.SNOWFLAKE_USER,
  privateKeyPath: process.env.SNOWFLAKE_PRIVATE_KEY_PATH,
  warehouse: process.env.SNOWFLAKE_WAREHOUSE,
  database: process.env.SNOWFLAKE_DATABASE
});
```

### Chạy Reverse ETL Sync

```javascript
// Đồng bộ kết quả query sang Brevo
await tajo.connectors.reverseETL('snowflake', {
  model: 'brevo_contacts',
  mode: 'upsert',
  primaryKey: 'email'
});
```

SQL API Partitions

Snowflake SQL API hỗ trợ phân vùng kết quả cho queries lớn. Tajo tự động chia kết quả lớn thành nhiều phần để tối ưu hóa bộ nhớ và thông lượng.

Chi Phí Warehouse

Mỗi query đồng bộ khởi động Snowflake warehouse của bạn và phát sinh chi phí. Hãy nhóm các đồng bộ lại và lên lịch vào giờ thấp điểm để giảm thiểu chi phí.

## Giới Hạn Tốc Độ

| Tài Nguyên | Giới Hạn |
| --- | --- |
| SQL API requests | 1000 yêu cầu/giờ |
| Kết quả mỗi trang | 10.000 rows |
| Kết nối đồng thời | Dựa trên warehouse size |

## Khắc Phục Sự Cố

| Sự Cố | Nguyên Nhân | Giải Pháp |
| --- | --- | --- |
| Lỗi xác thực key | Public key không khớp | Tạo lại key pair và gán lại trong Snowflake |
| Warehouse suspended | Warehouse không hoạt động | Đặt `AUTO_RESUME = TRUE` cho warehouse |
| Query timeout | Query quá phức tạp | Thêm LIMIT hoặc tối ưu hóa query |
| Quota exceeded | Credit limit | Kiểm tra Snowflake usage và credit settings |

## Tài Nguyên Liên Quan

- [Tài Liệu Snowflake SQL API](https://docs.snowflake.com/en/developer-guide/sql-api/index)
- [Xác Thực Key Pair Snowflake](https://docs.snowflake.com/en/user-guide/key-pair-auth)
- [Customer Sync Skill](https://tajo.io/vi/docs/skills/data-sync/customer-sync)
