Trình Kết Nối Snowflake
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ó:
- Tài khoản Snowflake với quyền truy cập API
- Service user với key pair authentication
- Warehouse và database đã được gán
- Tài khoản Brevo với quyền truy cập API
- 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.
# Tạo private keyopenssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
# Tạo public keyopenssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
# Gán public key cho user SnowflakeALTER USER tajo_service SET RSA_PUBLIC_KEY='<public_key_contents>';tajo connectors install snowflake \ --account $SNOWFLAKE_ACCOUNT \ --username $SNOWFLAKE_USER \ --private-key-path ./rsa_key.p8 \ --warehouse $SNOWFLAKE_WAREHOUSE \ --database $SNOWFLAKE_DATABASECấu Hình
Thiết Lập Cơ Bản
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
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_SCORESQL Queries Ví Dụ
Query Đồng Bộ Contacts
-- Lấy customers hoạt động với tất cả thuộc tính cần thiếtSELECT 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_activeFROM customers cLEFT 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 NULLGROUP BY 1,2,3,4,5,6,7Ví Dụ Code
Khởi Tạo Trình Kết Nối
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
// Đồng bộ kết quả query sang Brevoawait 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 |