موصل Snowflake

اربط Snowflake بـ Brevo من خلال Tajo لمزامنة شرائح العملاء من مستودع البيانات الخاص بك، وإثراء ملفات جهات الاتصال ببيانات التحليلات، وتشغيل حملات تسويقية مخصصة مدعومة برؤى من المستودع.

نظرة عامة

الخاصيةالقيمة
المنصةSnowflake
الفئةمستودع بيانات (مخصص)
تعقيد الإعدادمتوسط
تكامل رسميلا
البيانات المُزامَنةعملاء، شرائح، تحليلات، أحداث
طريقة المصادقةزوج مفاتيح / OAuth 2.0

الميزات

  • ETL العكسي - دفع شرائح العملاء من Snowflake إلى قوائم جهات اتصال Brevo
  • مزامنة الجماهير - مزامنة الجماهير المحسوبة من المستودع للحملات المستهدفة
  • إثراء التحليلات - إثراء جهات اتصال Brevo بمقاييس محسوبة (LTV، درجات RFM)
  • الاستعلامات القائمة على SQL - استخدام Snowflake SQL REST API لتنفيذ الاستعلامات برمجيًا
  • مزامنة مجدولة - تشغيل خطوط أنابيب بيانات آلية على فترات قابلة للتخصيص
  • دعم العبارات المتعددة - تنفيذ تحويلات بيانات معقدة في استدعاءات API فردية

المتطلبات الأساسية

قبل البدء، تأكد من توفر ما يلي:

  1. حساب Snowflake مع دور ACCOUNTADMIN أو SYSADMIN
  2. حساب Brevo مع وصول إلى API
  3. حساب Tajo مع صلاحيات الموصلات
  4. مستودع Snowflake مخصص لاستعلامات التكامل
  5. سياسة شبكة تسمح بعناوين IP الخاصة بـ Tajo

المصادقة

مصادقة زوج المفاتيح (موصى بها)

Terminal window
# Generate RSA key pair
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
openssl 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

Terminal window
# Using JWT token with the 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"}'

الإعداد

الإعداد الأساسي

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_NAME

نقاط نهاية واجهة البرمجة

نقطة النهايةالطريقةالوصف
/api/v2/statementsPOSTتقديم عبارات SQL للتنفيذ
/api/v2/statements/{statementHandle}GETالتحقق من حالة التنفيذ
/api/v2/statements/{statementHandle}/cancelPOSTإلغاء عبارة قيد التشغيل
/api/v2/statements/{statementHandle}?partition={id}GETاسترجاع أقسام النتائج

أقسام SQL API

يُعيد Snowflake SQL API مجموعات النتائج الكبيرة في أقسام. يحتوي كل قسم على ما يصل إلى 12 ميجابايت تقريبًا من البيانات. استخدم معامل القسم للتنقل عبر النتائج.

أمثلة على الكود

تهيئة الموصل

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

// تنفيذ استعلام SQL عبر 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;
// استطلاع النتائج
let status = result.statementStatusUrl;
while (result.code !== '090001') {
const check = await fetch(status, {
headers: { 'Authorization': `Bearer ${jwtToken}` }
});
result = await check.json();
}
// مزامنة مع Brevo عبر Tajo
for (const row of result.data) {
await tajo.contacts.sync({
email: row[0],
attributes: { SEGMENT: row[1], LTV: row[2] }
});
}

خط أنابيب ETL العكسي

// دفع الجماهير المحسوبة من Snowflake إلى قوائم Brevo
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'
}
}
});

حدود المعدل

الموردالحدملاحظات
استعلامات SQL API المتزامنة20 لكل مستخدملكل حساب Snowflake
حجم نتيجة SQL API12 ميجابايت لكل قسمقسّم النتائج بمعرّفات الأقسام
مهلة العبارة172,800 ثانية (48 ساعة)قابلة للتكوين لكل استعلام
طلبات APIتختلف حسب الخطةاستنادًا إلى إصدار Snowflake

تكاليف المستودع

يفرض Snowflake رسومًا بناءً على وقت الحوسبة. استخدم مستودعًا مخصصًا بحجم مناسب لاستعلامات Tajo واضبط التعليق التلقائي لتقليل التكاليف.

استكشاف الأخطاء وإصلاحها

المشكلةالسببالحل
فشلت المصادقةانتهاء رمز JWTأعد توليد JWT بصلاحية صالحة
انتهاء مهلة الاستعلاممجموعة بيانات كبيرةأضف عوامل تصفية أو استخدم المزامنة التزايدية
خطأ في الشبكةIP غير مدرج في القائمة البيضاءأضف عناوين IP الخاصة بـ Tajo إلى سياسة شبكة Snowflake
أعمدة مفقودةتغيير في المخططحدّث إعدادات تعيين الحقول
خطأ في القسمالنتيجة كبيرة جدًاعالج النتائج في أقسام أصغر

وضع التصحيح

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

أفضل الممارسات

  1. استخدم مستودعًا مخصصًا - تجنب التعارض مع أحمال عمل الإنتاج
  2. طبّق المزامنة التزايدية - استعلم فقط عن السجلات المتغيرة منذ آخر مزامنة
  3. اضبط التعليق التلقائي - اضبط المستودع للتعليق بعد 5 دقائق من عدم النشاط
  4. استخدم مصادقة زوج المفاتيح - فضّل زوج المفاتيح على مصادقة كلمة المرور
  5. حسّن الاستعلامات - صفِّ واعرض فقط الأعمدة اللازمة لمزامنة أسرع
  6. راقب الأرصدة - تتبع استهلاك أرصدة Snowflake لاستعلامات التكامل

الأمان

  • مصادقة زوج المفاتيح - تشفير RSA 2048-bit للوصول إلى API
  • OAuth 2.0 - مصادقة قائمة على الرموز مع تحديد نطاق الدور
  • سياسات الشبكة - قائمة IP المسموح بها لنقاط نهاية خدمة Tajo
  • الوصول القائم على الدور - دور Snowflake مخصص بأدنى الصلاحيات المطلوبة
  • نقل البيانات المشفرة - TLS 1.2+ لجميع اتصالات API
  • إخفاء البيانات - استخدم إخفاء البيانات الديناميكي في Snowflake للحقول الحساسة

موارد ذات صلة

Subscribe to updates

developer-docs

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

auto-detect
مساعد AI

مرحباً! اسألني أي شيء عن الوثائق.