Snowflake کنیکٹر
اپنے ڈیٹا ویئر ہاؤس سے گاہک سیگمنٹس سنک کرنے، اینالیٹکس ڈیٹا کے ساتھ رابطہ پروفائلز کو افزودہ کرنے، اور ویئر ہاؤس سے چلنے والی بصیرتوں کے ساتھ ذاتی نوعیت کی مارکیٹنگ مہمات کو طاقت دینے کے لیے Tajo کے ذریعے Snowflake کو Brevo سے منسلک کریں۔
جائزہ
| خاصیت | قدر |
|---|---|
| پلیٹ فارم | Snowflake |
| زمرہ | ڈیٹا ویئر ہاؤس (کسٹم) |
| سیٹ اپ کی پیچیدگی | درمیانی |
| آفیشل انٹیگریشن | نہیں |
| سنک شدہ ڈیٹا | گاہک، سیگمنٹس، اینالیٹکس، ایونٹس |
| تصدیق کا طریقہ | Key Pair / OAuth 2.0 |
خصوصیات
- Reverse ETL - Snowflake سے گاہک سیگمنٹس کو Brevo رابطہ فہرستوں پر دھکیلیں
- آڈیئنس سنک - ٹارگٹڈ مہمات کے لیے ویئر ہاؤس سے تیار شدہ آڈیئنسز سنک کریں
- اینالیٹکس افزودگی - حساب شدہ میٹرکس (LTV, RFM اسکورز) کے ساتھ Brevo رابطوں کو افزودہ کریں
- SQL پر مبنی کوئریز - پروگرامی طور پر کوئریز انجام دینے کے لیے Snowflake SQL REST API استعمال کریں
- شیڈولڈ سنک - قابل ترتیب وقفوں پر خودکار ڈیٹا پائپ لائنز چلائیں
- ملٹی اسٹیٹمنٹ سپورٹ - ایک ہی API کالز میں پیچیدہ ڈیٹا تبدیلیاں انجام دیں
شرائط
شروع کرنے سے پہلے، یقینی بنائیں کہ آپ کے پاس ہے:
- ACCOUNTADMIN یا SYSADMIN رول کے ساتھ Snowflake اکاؤنٹ
- API رسائی کے ساتھ Brevo اکاؤنٹ
- کنیکٹر اجازتوں کے ساتھ Tajo اکاؤنٹ
- انٹیگریشن کوئریز کے لیے ایک مخصوص Snowflake ویئر ہاؤس
- Tajo IP پتوں کی اجازت دینے والی نیٹ ورک پالیسی
تصدیق
Key Pair تصدیق (تجویز کردہ)
# Generate RSA key pairopenssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocryptopenssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
# Assign public key to Snowflake user# In Snowflake:# ALTER USER tajo_integration SET RSA_PUBLIC_KEY='MII...';OAuth 2.0 تصدیق
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 تصدیق
# Using JWT token with the 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"}'تشکیل
بنیادی سیٹ اپ
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 * * *" # Every 6 hours
queries: customer_segments: | SELECT email, segment_name, ltv_score, rfm_class FROM customer_segments WHERE updated_at > :last_syncفیلڈ میپنگ
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 اینڈ پوائنٹس
| اینڈ پوائنٹ | طریقہ | تفصیل |
|---|---|---|
/api/v2/statements | POST | عمل درآمد کے لیے SQL اسٹیٹمنٹس جمع کرائیں |
/api/v2/statements/{statementHandle} | GET | عمل درآمد کی حیثیت چیک کریں |
/api/v2/statements/{statementHandle}/cancel | POST | چلتی اسٹیٹمنٹ کو منسوخ کریں |
/api/v2/statements/{statementHandle}?partition={id} | GET | نتیجہ پارٹیشنز حاصل کریں |
SQL API پارٹیشنز
Snowflake SQL API بڑے نتیجہ سیٹس کو پارٹیشنز میں واپس کرتا ہے۔ ہر پارٹیشن میں تقریباً 12MB تک ڈیٹا ہوتا ہے۔ نتائج کے ذریعے دہرانے کے لیے partition پیرامیٹر استعمال کریں۔
کوڈ کی مثالیں
کنیکٹر کو انیشیلائز کریں
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'});SQL API کے ذریعے گاہک سیگمنٹس سنک کریں
// Execute a SQL query 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 resultslet status = result.statementStatusUrl;while (result.code !== '090001') { const check = await fetch(status, { headers: { 'Authorization': `Bearer ${jwtToken}` } }); result = await check.json();}
// Sync to Brevo via Tajofor (const row of result.data) { await tajo.contacts.sync({ email: row[0], attributes: { SEGMENT: row[1], LTV: row[2] } });}Reverse ETL پائپ لائن
// Push computed audiences from Snowflake to Brevo listsawait 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' } }});شرح کی حدود
| وسیلہ | حد | نوٹس |
|---|---|---|
| SQL API بیک وقتی کوئریز | 20 فی صارف | فی Snowflake اکاؤنٹ |
| SQL API نتیجہ سائز | 12MB فی پارٹیشن | پارٹیشن IDs کے ساتھ پیجینیٹ کریں |
| اسٹیٹمنٹ ٹائم آؤٹ | 172,800 سیکنڈ (48 گھنٹے) | فی کوئری قابل ترتیب |
| API درخواستیں | پلان کے مطابق مختلف | Snowflake ایڈیشن پر مبنی |
ویئر ہاؤس کی لاگت
Snowflake کمپیوٹ وقت کی بنیاد پر چارج کرتا ہے۔ Tajo کوئریز کے لیے ایک مخصوص، مناسب سائز کا ویئر ہاؤس استعمال کریں اور لاگت کم سے کم کرنے کے لیے آٹو سسپنڈ سیٹ کریں۔
ٹربل شوٹنگ
| مسئلہ | وجہ | حل |
|---|---|---|
| تصدیق ناکام | میعاد ختم JWT ٹوکن | درست میعاد ختم ہونے کے ساتھ JWT دوبارہ بنائیں |
| کوئری ٹائم آؤٹ | بڑا ڈیٹا سیٹ | فلٹرز شامل کریں یا انکریمنٹل سنک استعمال کریں |
| نیٹ ورک کی غلطی | IP وائٹ لسٹ نہیں | Snowflake نیٹ ورک پالیسی میں Tajo IPs شامل کریں |
| غائب کالمز | اسکیما تبدیلی | فیلڈ میپنگ تشکیل اپ ڈیٹ کریں |
| پارٹیشن کی غلطی | نتیجہ بہت بڑا | چھوٹے پارٹیشنز میں نتائج پروسیس کریں |
ڈیبگ موڈ
connectors: snowflake: debug: true log_level: verbose log_queries: trueبہترین طرز عمل
- مخصوص ویئر ہاؤس استعمال کریں - پروڈکشن ورک لوڈز کے ساتھ تنازعہ سے بچیں
- انکریمنٹل سنک نافذ کریں - آخری سنک کے بعد صرف تبدیل شدہ ریکارڈز کوئری کریں
- آٹو سسپنڈ سیٹ کریں - 5 منٹ کی غیر فعالیت کے بعد ویئر ہاؤس کو سسپنڈ کرنے کے لیے ترتیب دیں
- Key pair auth استعمال کریں - پاس ورڈ تصدیق پر key pair کو ترجیح دیں
- کوئریز کو بہتر بنائیں - تیز سنک کے لیے صرف ضروری کالمز فلٹر اور پروجیکٹ کریں
- کریڈٹس کی نگرانی کریں - انٹیگریشن کوئریز کے لیے Snowflake کریڈٹ کھپت ٹریک کریں
سیکیورٹی
- Key pair تصدیق - API رسائی کے لیے RSA 2048-bit انکرپشن
- OAuth 2.0 - رول اسکوپنگ کے ساتھ ٹوکن پر مبنی تصدیق
- نیٹ ورک پالیسیز - Tajo سروس اینڈ پوائنٹس کے لیے IP اجازت دینا
- رول پر مبنی رسائی - کم از کم مطلوبہ مراعات کے ساتھ مخصوص Snowflake رول
- انکرپٹڈ ڈیٹا منتقلی - تمام API مواصلات کے لیے TLS 1.2+
- ڈیٹا ماسکنگ - حساس فیلڈز کے لیے Snowflake ڈائنامک ڈیٹا ماسکنگ استعمال کریں