نسخ وتحويل البيانات في Snowflake باستخدام Azure Data Factory أو تحليلات Azure Synapse

ينطبق على: Azure Data Factory Azure Synapse Analytics

تلميح

جرب Data Factory في Microsoft Fabric، وهو حل تحليلي متكامل للمؤسسات. يغطي Microsoft Fabric كل شيء بدءا من حركة البيانات إلى علم البيانات والتحليلات في الوقت الحقيقي والمعلومات المهنية وإعداد التقارير. تعرف على كيفية بدء إصدار تجريبي جديد مجانا!

توضح هذه المقالة كيفية استخدام نشاط النسخ في Azure Data Factory ومسارات Azure Synapse لنسخ البيانات من وإلى Snowflake واستخدام تدفق البيانات لتحويل البيانات في Snowflake. للتعرف على المزيد، اقرأ المقالة التمهيدية عن Data Factory أو Azure Synapse Analytics.

هام

يوفر موصل Snowflake الجديد دعما محسنا ل Snowflake الأصلي. إذا كنت تستخدم موصل Snowflake القديم في الحل الخاص بك، فيرجى ترقية موصل Snowflake قبل 31 أكتوبر 2024. راجع هذا القسم للحصول على تفاصيل حول الفرق بين الإصدار القديم والأحدث.

القدرات المدعومة

يتم دعم موصل Snowflake هذا للإمكانات التالية:

القدرات المدعومة IR
Copy activity (المصدر/المتلق) (1) (2)
تعيين تدفق البيانات (المصدر/ المتلقي) (1)
نشاط البحث (1) (2)
نشاط البرنامج النصي (1) (2)

① وقت تشغيل تكامل Azure ② وقت تشغيل التكامل المستضاف ذاتيًا

للنشاط نسخ، هذا الموصل Snowflake يدعم الوظائف التالية:

  • انسخ البيانات من Snowflake التي تستخدم الأمر COPY الخاص بـ Snowflake إلى [‏‏الموقع] لتحقيق أفضل أداء.
  • انسخ البيانات إلى Snowflake التي تستفيد من أمر COPY الخاص بـ Snowflake في [جدول] لتحقيق أفضل أداء. وهو يدعم Snowflake على Azure.
  • إذا كان الوكيل مطلوباً للاتصال بـ Snowflake من وقت تشغيل التكامل المستضاف ذاتياً، فيجب عليك تكوين متغيرات البيئة لـ HTTP_PROXY وHTTPS_PROXY على مضيف وقت تشغيل التكامل.

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

إذا كان مخزن البيانات الخاص بك موجوداً داخل شبكة محلية، أو شبكة Azure ظاهرية، أو Amazon Virtual Private Cloud، فأنت بحاجة إلى تكوين وقت تشغيل تكامل مستضاف ذاتياً للاتصال به. تأكد من إضافة عناوين IP التي يقوم باستخدامها وقت تشغيل التكامل المستضاف ذاتيًا إلى القائمة المسموح بها.

إذا كان مخزن البيانات الخاص بك عبارة عن خدمة بيانات سحابية مُدارة، يمكنك استخدام Azure Integration Runtime. إذا كان الوصول مقيدًا بعناوين IP التي تمت الموافقة عليها في قواعد جدار الحماية، يمكنك إضافة Azure Integration Runtime IPs إلى القائمة المسموح بها.

يجب أن يكون لحساب Snowflake المستخدم للمصدر أو المتلقي حق الوصول الضروري USAGE على قاعدة البيانات والوصول للقراءة/الكتابة على المخطط والجداول/طرق العرض الموجودة ضمنه. بالإضافة إلى ذلك، يجبCREATE STAGE أن يكون أيضًا على المخطط لتتمكن من إنشاء المرحلة الخارجية باستخدام SAS URI.

يجب أن تقوم بتعيين قيم خصائص الحساب التالية

الخاصية الوصف مطلوبة افتراضي
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION يتم تحديد ما إذا كان يلزم طلب كائن تكامل التخزين كمؤهلات اعتماد سحابية عند إنشاء مرحلة خارجية مسماة (باستخدام CREATE STAGE) للوصول إلى موقع تخزين سحابي خاص. خطأ خطأ
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION يتم تحديد ما إذا كنت تريد استخدام مرحلة خارجية مسماة تشير إلى كائن تكامل التخزين على أنها بيانات اعتماد سحابية عند تحميل البيانات من أو إلغاء تحميل البيانات إلى موقع تخزين سحابي خاص. خطأ خطأ

لمزيد من المعلومات حول آليات وخيارات أمان الشبكة التي يدعمها Data Factory، راجع إستراتيجيات الوصول إلى البيانات.

الشروع في العمل

لتنفيذ نشاط النسخ باستخدام أحد المسارات، يمكنك استخدام إحدى الأدوات أو عدد تطوير البرامج التالية:

إنشاء خدمة مرتبطة بـ Snowflake باستخدام واجهة المستخدم

استخدم الخطوات التالية لإنشاء خدمة مرتبطة إلى Snowflake في واجهة مستخدم مدخل Microsoft Azure.

  1. استعرض للوصول إلى علامة التبويب "Manage" في مصنع بيانات Azure أو مساحة عمل Synapse، وحدد "Linked Services"، ثم انقر فوق "New":

  2. البحث عن Snowflake وتحديد موصل Snowflake.

    لقطة شاشة لموصل Snowflake.

  3. قم بتكوين تفاصيل الخدمة، واختبر الاتصال، وأنشئ الخدمة المرتبطة الجديدة.

    لقطة شاشة لتكوين الخدمة المرتبطة لـ Snowflake.

تفاصيل تكوين الموصل

توفر المقاطع التالية تفاصيل حول الخصائص التي تعرف الكيانات الخاصة بموصل Snowflake.

خصائص الخدمة المرتبطة

يتم دعم هذه الخصائص العامة لخدمة Snowflake المرتبطة:

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية النوع إلى SnowflakeV2. ‏‏نعم‬
معرف الحساب اسم الحساب مع مؤسسته. على سبيل المثال، myorg-account123. ‏‏نعم‬
قاعدة بيانات قاعدة البيانات الافتراضية المستخدمة لجلسة العمل بعد الاتصال. ‏‏نعم‬
مستودع المستودع الظاهري الافتراضي المستخدم لجلسة العمل بعد الاتصال. ‏‏نعم‬
نوع المصادقة نوع المصادقة المستخدمة للاتصال بخدمة Snowflake. القيم المسموح بها هي: أساسي (افتراضي) وKeyPair. راجع الأقسام المقابلة أدناه حول المزيد من الخصائص والأمثلة على التوالي. لا
الدور دور الأمان الافتراضي المستخدم لجلسة العمل بعد الاتصال. لا
connectVia يُستخدم وقت تشغيل التكامل للاتصال بمخزن البيانات. يمكنك استخدام Azure Integration Runtime أو وقت تشغيل التكامل المستضاف ذاتياً (إذا كان مخزن بياناتك في شبكة اتصال خاصة). إذا لم يكن محدداً، فإنه يستخدم وقت تشغيل تكامل Azure الافتراضي. لا

يدعم موصل Snowflake هذا أنواع المصادقة التالية. راجع الأقسام المقابلة للاطلاع على التفاصيل.

المصادقة الأساسية

لاستخدام المصادقة الأساسية ، بالإضافة إلى الخصائص العامة الموضحة في القسم السابق، حدد الخصائص التالية:

الخاصية الوصف مطلوب
المستخدم اسم تسجيل الدخول لمستخدم Snowflake. ‏‏نعم‬
كلمة المرور كلمة المرور لمستخدم Snowflake. وضع علامة على هذا الحقل كنوع SecureString لتخزينه بشكل آمن. يمكنك أيضاً الإشارة إلى سر مخزن في Azure Key Vault. ‏‏نعم‬

مثال:

{
    "name": "SnowflakeV2LinkedService",
    "properties": {
        "type": "SnowflakeV2",
        "typeProperties": {
            "accountIdentifier": "<accountIdentifier>",
            "database": "<database>",
            "warehouse": "<warehouse>",
            "authenticationType": "Basic",
            "user": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            },
            "role": "<role>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

كلمة المرور في Azure Key Vault:

{
    "name": "SnowflakeV2LinkedService",
    "properties": {
        "type": "SnowflakeV2",
        "typeProperties": {
            "accountIdentifier": "<accountIdentifier>",
            "database": "<database>",
            "warehouse": "<warehouse>",
            "authenticationType": "Basic",
            "user": "<username>",
            "password": {
                "type": "AzureKeyVaultSecret",
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>",
                    "type": "LinkedServiceReference"
                }, 
                "secretName": "<secretName>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

إشعار

يدعم تعيين تدفقات البيانات المصادقة الأساسية فقط.

مصادقة زوج المفاتيح

لاستخدام مصادقة زوج المفاتيح، تحتاج إلى تكوين وإنشاء مستخدم مصادقة زوج مفاتيح في Snowflake بالإشارة إلى مصادقة زوج المفاتيح وتدارة زوج المفاتيح. بعد ذلك، دون ملاحظة عن المفتاح الخاص وعبارة المرور (اختياري)، التي تستخدمها لتعريف الخدمة المرتبطة.

بالإضافة إلى الخصائص العامة الموصوفة في القسم السابق، حدد الخصائص التالية:

الخاصية الوصف مطلوب
المستخدم اسم تسجيل الدخول لمستخدم Snowflake. ‏‏نعم‬
privateKey المفتاح الخاص المستخدم لمصادقة زوج المفاتيح.

للتأكد من أن المفتاح الخاص صالح عند إرساله إلى Azure Data Factory، ومع الأخذ في الاعتبار أن ملف privateKey يتضمن أحرفا جديدة (\n)، من الضروري تنسيق محتوى privateKey بشكل صحيح في نموذج السلسلة الحرفي الخاص به. تتضمن هذه العملية إضافة \n بشكل صريح إلى كل سطر جديد.
‏‏نعم‬
مفتاح خاص عبارة المرور المستخدمة لفك تشفير المفتاح الخاص، إذا كان مشفرا. لا

مثال:

{
    "name": "SnowflakeV2LinkedService",
    "properties": {
        "type": "SnowflakeV2",
        "typeProperties": {
            "accountIdentifier": "<accountIdentifier>",
            "database": "<database>",
            "warehouse": "<warehouse>",
            "authenticationType": "KeyPair",
            "user": "<username>",
            "privateKey": {
                "type": "SecureString",
                "value": "<privateKey>"
            },
            "privateKeyPassphrase": { 
                "type": "SecureString",
                "value": "<privateKeyPassphrase>"
            },
            "role": "<role>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

خصائص مجموعة البيانات

للحصول على قائمة كاملة بالأقسام والخصائص المتوفرة لتعريف مجموعات البيانات، راجع مقالة مجموعات البيانات.

يتم اعتماد الخصائص التالية لمجموعة بيانات Snowflake.

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية نوع مجموعة البيانات إلى SnowflakeV2Table. ‏‏نعم‬
Schema اسم المخطط. ملاحظة: اسم المخطط حساسة لحالة الأحرف. لا للمصدر، نعم للمتلقي
طاولتنا اسم الجدول/طريقة العرض. لاحظ أن اسم الجدول حساس لحالة الأحرف. لا للمصدر، نعم للمتلقي

مثال:

{
    "name": "SnowflakeV2Dataset",
    "properties": {
        "type": "SnowflakeV2Table",
        "typeProperties": {
            "schema": "<Schema name for your Snowflake database>",
            "table": "<Table name for your Snowflake database>"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "linkedServiceName": {
            "referenceName": "<name of linked service>",
            "type": "LinkedServiceReference"
        }
    }
}

انسخ خصائص النشاط

للحصول على قائمة كاملة بالأقسام والخصائص المتوفرة لتعريف الأنشطة، راجع مقالة التدفقات. يوفر هذا القسم قائمة بالخصائص التي يدعمها مصدر Snowflake والمتلقي.

Snowflake كمصدر

يستخدم موصل Snowflake الأمر COPY في [الموقع] الخاص ب Snowflake لتحقيق أفضل أداء.

إذا كان تخزين بيانات المتلقي وتنسيقه مدعومين أصلاً بواسطة أمر Snowflake COPY، فيمكنك استخدام نشاط النسخ للنسخ مباشرةً من Snowflake إلى المتلقي. لمزيد من التفاصيل، راجع نسخة مباشرة من Snowflake. خلاف ذلك، استخدم نسخة مرحلية مدمجة من Snowflake.

لنسخ البيانات من Snowflake تُدعم الخصائص التالية في قسم مصدر نشاط النسخ.

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية نوع مصدر نشاط النسخ إلى SnowflakeV2Source. ‏‏نعم‬
استعلام تحديد الاستعلام SQL لقراءة البيانات من Snowflake. إذا كانت أسماء المخطط والجدول والأعمدة تحتوي على أحرف صغيرة، فاقتبس معرّف العنصر في الاستعلام، على سبيل المثال select * from "schema"."myTable".
تنفيذ الإجراء المخزن غير مدعوم.
لا
exportSettings إعدادات متقدمة تستخدم لاسترداد البيانات من Snowflake. يمكنك تكوين تلك المدعومة من قبل COPY في الأمر الذي ستمر به الخدمة عند استدعاء الكشف. ‏‏نعم‬
تحت exportSettings:
النوع نوع أمر التصدير، تعيين إلى SnowflakeExportCopyCommand. ‏‏نعم‬
دمج التخزين حدد اسم تكامل التخزين الذي أنشأته في Snowflake. للحصول على الخطوات الأساسية لاستخدام تكامل التخزين، راجع تكوين تكامل تخزين Snowflake. لا
additionalCopyOptions خيارات نسخ إضافية، مقدمة كقاموس لأزواج قيم المفاتيح. أمثلة: MAX_FILE_SIZE، OVERWRITE. لمزيد من المعلومات، راجع خيارات نسخ Snowflake. لا
additionalFormatOptions خيارات إضافية لتنسيق ملف يتم توفيرها إلى الأمر COPY كقاموس أزواج قيم المفاتيح. أمثلة: DATE_FORMAT، TIME_FORMAT، TIMESTAMP_FORMAT. لمزيد من المعلومات، راجع خيارات نوع تنسيق Snowflake. لا

إشعار

تأكد من أن لديك الإذن لتنفيذ الأمر التالي والوصول إلى المخطط INFORMATION_SCHEMA و أعمدة الجدول.

  • COPY INTO <location>

نسخة مباشرة من Snowflake

إذا كان مخزن البيانات المتلقي والتنسيق يفيان بالمعايير الموضحة في هذا القسم، يمكنك استخدام نشاط النسخ للنسخ المباشر من Snowflake إلى المتلقي. تتحقق الخدمة من الإعدادات وتفشل في تشغيل نشاط النسخ إذا لم يتم استيفاء المعايير التالية:

  • عند تحديد storageIntegration في المصدر:

    مخزن بيانات المتلقي هو Azure Blob Storage الذي أشرت إليه في المرحلة الخارجية في Snowflake. تحتاج إلى إكمال الخطوات التالية قبل نسخ البيانات:

    1. إنشاء خدمة مرتبطة ب Azure Blob Storage لتخزين Azure Blob المتلقي مع أي أنواع مصادقة مدعومة.

    2. امنح دور Storage Blob Data Contributor على الأقل إلى كيان خدمة Snowflake في المتلقي Azure Blob Storage Access Control (IAM) .

  • عندما لا تحدد storageIntegration في المصدر:

    الخدمة المرتبطة بالمتلقي هي تخزين كائن ثنائي كبير الحجم من Azure مع مصادقة توقيع الوصول المشترك. إذا كنت ترغب في نسخ البيانات مباشرة إلى Azure Data Lake Storage Gen2 بالتنسيق المدعوم التالي، يمكنك إنشاء خدمة مرتبطة ب Azure Blob Storage باستخدام مصادقة SAS مقابل حساب Azure Data Lake Storage Gen2، لتجنب استخدام نسخة مرحلية من Snowflake.

  • تنسيق بيانات المتلقي هو Parquet أو نص محدد أو JSON بالتكوينات التالية:

    • لتنسيق Parquet يكون برنامج ضغط الوسائط وفكها None، Snappy، أو Lzo.
    • لتنسيق النص المحدد:
      • rowDelimiter هو \r\n، أو أي حرف واحد.
      • compression يمكن أن يكون دون ضغط، gzip، bzip2، أو مضغوط.
      • يُترك encodingName كإعداد افتراضي أو يتم التعيين إلى utf-8.
      • quoteChar هو عرض أسعار مزدوج، عرض أسعار واحد، أو سلسلة فارغة (دون علامة اقتباس أحرف).
    • لتنسيق JSON، النسخة المباشرة تدعم الحالة التي يكون فيها جدول Snowflake للمصدر أو نتيجة الاستعلام فقط عمود واحد ونوع بيانات هذا العمود هو VARIANT أو OBJECT أو ARRAY.
      • compression يمكن أن يكون دون ضغط، gzip، bzip2، أو مضغوط.
      • يُترك encodingName كإعداد افتراضي أو يتم التعيين إلى utf-8.
      • filePattern في مصدر نشاط النسخ يتم ترك المتلقي كإعداد افتراضي أو التعيين على setOfObjects.
  • في مصدر نشاط النسخ، additionalColumns غير محدد.

  • لم يتم تحديد تعيين العمود.

مثال:

"activities":[
    {
        "name": "CopyFromSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Snowflake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SnowflakeV2Source",
                "query": "SELECT * FROM MYTABLE",
                "exportSettings": {
                    "type": "SnowflakeExportCopyCommand",
                    "additionalCopyOptions": {
                        "MAX_FILE_SIZE": "64000000",
                        "OVERWRITE": true
                    },
                    "additionalFormatOptions": {
                        "DATE_FORMAT": "'MM/DD/YYYY'"
                    },
                    "storageIntegration": "< Snowflake storage integration name >"
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

نسخة مرحلية من Snowflake

عندما لا يكون مخزن بيانات المتلقي أو تنسيقه متوافقا أصلا مع الأمر Snowflake COPY، كما هو مذكور في القسم الأخير، قم بتمكين النسخة المرحلية المضمنة باستخدام مثيل تخزين Azure Blob مؤقت. كما توفر لك ميزة النسخ المرحلي معدل نقل أفضل. تصدر الخدمة البيانات من Snowflake إلى التخزين المرحلي، ثم تنسخ البيانات للمتلقي، وأخيراً تنظف بياناتك المؤقتة من التخزين المرحلي. راجع نسخة مرحلية للحصول على تفاصيل حول نسخ البيانات باستخدام التقسيم المرحلي.

لاستخدام هذه الميزة، قم بإنشاء خدمة تخزين Azure Blob المرتبطة التي تشير إلى حساب تخزين Azure كالتقسيم المرحلي المؤقت. ثم حدد enableStaging وstagingSettings الخصائص في نشاط النسخ.

  • عند تحديد storageIntegration في المصدر، يجب أن يكون Azure Blob Storage المرحلي المؤقت هو الذي أشرت إليه في المرحلة الخارجية في Snowflake. تأكد من إنشاء خدمة مرتبطة ب Azure Blob Storage لها مع أي مصادقة مدعومة، ومنح دور Storage Blob Data Contributor على الأقل إلى كيان خدمة Snowflake في التحكم في الوصول إلى تخزين Azure Blob المرحلي (IAM).

  • عندما لا تحدد storageIntegration في المصدر، يجب أن تستخدم الخدمة المرتبطة بتخزين Azure Blob المرحلي مصادقة توقيع الوصول المشترك، كما هو مطلوب من قبل الأمر Snowflake COPY. تأكد من منح إذن الوصول المناسب إلى Snowflake في Azure Blob Storage المرحلي. لمعرفة المزيد حول هذا الموضوع، راجع هذه المقالة.

مثال:

"activities":[
    {
        "name": "CopyFromSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Snowflake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SnowflakeV2Source",               
                "query": "SELECT * FROM MyTable",
                "exportSettings": {
                    "type": "SnowflakeExportCopyCommand",
                    "storageIntegration": "< Snowflake storage integration name >"                    
                }
            },
            "sink": {
                "type": "<sink type>"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

عند إجراء نسخة مرحلية من Snowflake، من الضروري تعيين سلوك نسخ المتلقي إلى دمج الملفات. يضمن هذا الإعداد معالجة جميع الملفات المقسمة ودمجها بشكل صحيح، مما يمنع المشكلة حيث يتم نسخ الملف المقسم الأخير فقط.

مثال على التكوين

{
    "type": "Copy",
    "source": {
        "type": "SnowflakeSource",
        "query": "SELECT * FROM my_table"
    },
    "sink": {
        "type": "AzureBlobStorage",
        "copyBehavior": "MergeFiles"
    }
}

إشعار

قد يؤدي الفشل في تعيين "سلوك نسخ المتلقي" إلى "دمج الملفات " إلى نسخ آخر ملف مقسم فقط.

Snowflake كمتلقي

يستخدم موصل Snowflake الأمر COPY في [الجدول] الخاص بـ Snowflake لتحقيق أفضل أداء. وهو يدعم كتابة البيانات في Snowflake على Azure.

إذا كان تخزين بيانات المصدر وتنسيقه مدعومين أصلاً بواسطة أمر Snowflake COPY، فيمكنك استخدام نشاط النسخ للنسخ مباشرةً من المصدر إلى Snowflake. لمزيد من التفاصيل، راجع نسخة مباشرة إلى Snowflake. خلاف ذلك، استخدم نسخة مرحلية مدمجة إلى Snowflake.

لنسخ البيانات من Snowflake، يتم دعم الخصائص التالية في قسم متلقي نشاط النسخ.

الخاصية الوصف مطلوب
النوع خاصية نوع متلقي نشاط النسخ، عين على SnowflakeV2Sink. ‏‏نعم‬
preCopyScript حدد استعلام SQL لنشاط النسخ للتشغيل قبل كتابة البيانات في Snowflake عند كل تشغيل. استخدم هذه الخاصية لتنظيف البيانات المحملة في الخلفية. لا
importSettings إعدادات متقدمة تستخدم لكتابة البيانات في Snowflake. يمكنك تكوين تلك المدعومة من قبل COPY في الأمر الذي ستمر به الخدمة عند استدعاء الكشف. ‏‏نعم‬
تحت importSettings:
النوع نوع أمر الاستيراد، تعيين إلى SnowflakeImportCopyCommand. ‏‏نعم‬
دمج التخزين حدد اسم تكامل التخزين الذي أنشأته في Snowflake. للحصول على الخطوات الأساسية لاستخدام تكامل التخزين، راجع تكوين تكامل تخزين Snowflake. لا
additionalCopyOptions خيارات نسخ إضافية، مقدمة كقاموس لأزواج قيم المفاتيح. أمثلة: ON_ERROR، FORCE، LOAD_UNCERTAIN_FILES. لمزيد من المعلومات، راجع خيارات نسخ Snowflake. لا
additionalFormatOptions خيارات تنسيق ملف إضافية تم توفيرها للأمر نسخ، المقدمة كقاموس أزواج قيم المفاتيح. أمثلة: DATE_FORMAT، TIME_FORMAT، TIMESTAMP_FORMAT. لمزيد من المعلومات، راجع خيارات نوع تنسيق Snowflake. لا

إشعار

تأكد من أن لديك الإذن لتنفيذ الأمر التالي والوصول إلى المخطط INFORMATION_SCHEMA و أعمدة الجدول.

  • SELECT CURRENT_REGION()
  • COPY INTO <table>
  • SHOW REGIONS
  • CREATE OR REPLACE STAGE
  • DROP STAGE

نسخة مباشرة إلى Snowflake

إذا كان مخزن البيانات المصدر والتنسيق يفيان بالمعايير الموضحة في هذا القسم، يمكنك استخدام نشاط النسخ للنسخ المباشر من المصدر إلى Snowflake. تتحقق الخدمة من الإعدادات وتفشل في تشغيل نشاط النسخ إذا لم يتم استيفاء المعايير التالية:

  • عند تحديد storageIntegration في المتلقي:

    مخزن البيانات المصدر هو Azure Blob Storage الذي أشرت إليه في المرحلة الخارجية في Snowflake. تحتاج إلى إكمال الخطوات التالية قبل نسخ البيانات:

    1. إنشاء خدمة مرتبطة ب Azure Blob Storage لمصدر Azure Blob Storage مع أي أنواع مصادقة مدعومة.

    2. امنح دور Storage Blob Data Reader على الأقل إلى كيان خدمة Snowflake في مصدر التحكم في الوصول إلى تخزين Azure Blob (IAM).

  • عندما لا تحدد storageIntegration في المتلقي:

    الخدمة المرتبطة بالمصدر هي تخزين كائن ثنائي كبير الحجم من Azure مع مصادقة توقيع الوصول المشترك. إذا كنت ترغب في نسخ البيانات مباشرة من Azure Data Lake Storage Gen2 بالتنسيق المدعوم التالي، يمكنك إنشاء خدمة مرتبطة ب Azure Blob Storage باستخدام مصادقة SAS مقابل حساب Azure Data Lake Storage Gen2، لتجنب استخدام نسخة مرحلية إلى Snowflake.

  • تنسيق بيانات المصدر هو Parquet أو نص محدد أو JSON بالتكوينات التالية:

    • لتنسيق Parquet يكون برنامج ضغط الوسائط وفكها None، أو Snappy.

    • لتنسيق delimited text:

      • rowDelimiter هو \r\n، أو أي حرف واحد. إذا لم يكن محدد الصف "\r\n"، firstRowAsHeader فيجب أن يكون خاطئاskipLineCount، ولم يتم تحديده.
      • compression يمكن أن يكون دون ضغط، gzip، bzip2، أو مضغوط.
      • encodingName هو ترك الافتراضي أو تعيين إلى "UTF-8"، "UTF-16"، "UTF-16BE"، "UTF-32"، "UTF-32BE"، "BIG5"، "EUC-JP"، "EUC-KR"، "GB18030"، "ISO-2022-JP"، "ISO-2022-KR"، "ISO-8859-1"، "ISO-8859-2"، "ISO-8859-5"، "ISO-8859-6"، "ISO-8859-7"، "ISO-8859-8"، "ISO-8 8859-9"، "ويندوز - 1250"، "ويندوز - 1251"، "ويندوز - 1252"، "ويندوز - 1253"، "ويندوز - 1254"، "ويندوز - 1255".
      • quoteChar هو عرض أسعار مزدوج، عرض أسعار واحد، أو سلسلة فارغة (دون علامة اقتباس أحرف).
    • لتنسيق JSON، النسخة المباشرة تدعم الحالة التي يكون فيها جدول Snowflake للمتلقي فقط عمود واحد ونوع بيانات هذا العمود هو VARIANT أو OBJECT أو ARRAY.

      • compression يمكن أن يكون دون ضغط، gzip، bzip2، أو مضغوط.
      • يُترك encodingName كإعداد افتراضي أو يتم التعيين إلى utf-8.
      • لم يتم تحديد تعيين العمود.
  • في مصدر نشاط النسخ:

    • additionalColumns غير محدد.
    • إذا كان المصدر مجلداً، يتم تعيين recursive إلى صحيح.
    • prefixmodifiedDateTimeStartmodifiedDateTimeEndلم يتم تحديد و وenablePartitionDiscovery.

مثال:

"activities":[
    {
        "name": "CopyToSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Snowflake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SnowflakeV2Sink",
                "importSettings": {
                    "type": "SnowflakeImportCopyCommand",
                    "copyOptions": {
                        "FORCE": "TRUE",
                        "ON_ERROR": "SKIP_FILE"
                    },
                    "fileFormatOptions": {
                        "DATE_FORMAT": "YYYY-MM-DD"
                    },
                    "storageIntegration": "< Snowflake storage integration name >"
                }
            }
        }
    }
]

نسخة مرحلية لـ Snowflake

عندما لا يكون مخزن بيانات المصدر أو تنسيقه متوافقا أصلا مع الأمر Snowflake COPY، كما هو مذكور في القسم الأخير، قم بتمكين النسخة المرحلية المضمنة باستخدام مثيل تخزين Azure Blob مؤقت. كما توفر لك ميزة النسخ المرحلي معدل نقل أفضل. تقوم الخدمة تلقائياً بتحويل البيانات لتلبية متطلبات تنسيق البيانات في Snowflake. ثم استدعاء الأمر COPY لتحميل البيانات في Snowflake. وأخيراً، فإنه ينظف البيانات المؤقتة الخاصة بك من تخزين الكائن الثنائي كبير الحجم. راجع النسخ المرحلي للحصول على تفاصيل حول نسخ البيانات باستخدام التقسيم المرحلي.

لاستخدام هذه الميزة، قم بإنشاء خدمة تخزين Azure Blob المرتبطة التي تشير إلى حساب تخزين Azure كالتقسيم المرحلي المؤقت. ثم حدد enableStaging وstagingSettings الخصائص في نشاط النسخ.

  • عند تحديد storageIntegration في المتلقي، يجب أن يكون Azure Blob Storage المرحلي المؤقت هو الذي أشرت إليه في المرحلة الخارجية في Snowflake. تأكد من إنشاء خدمة مرتبطة ب Azure Blob Storage لها مع أي مصادقة مدعومة، ومنح دور Storage Blob Data Reader على الأقل إلى كيان خدمة Snowflake في التحكم في الوصول إلى تخزين Azure Blob المرحلي (IAM).

  • عندما لا تحدد storageIntegration في المتلقي، تحتاج الخدمة المرتبطة بتخزين Azure Blob المرحلي إلى استخدام مصادقة توقيع الوصول المشترك كما هو مطلوب من قبل الأمر Snowflake COPY.

مثال:

"activities":[
    {
        "name": "CopyToSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Snowflake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SnowflakeV2Sink",
                "importSettings": {
                    "type": "SnowflakeImportCopyCommand",
                    "storageIntegration": "< Snowflake storage integration name >"
                }
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

تعيين خصائص تدفق البيانات

عند تحويل البيانات في مخطط تدفق البيانات، يمكنك القراءة من الجداول والكتابة إليها في Snowflake. لمزيد من المعلومات، راجع تحويل المصدر و تحويل المتلقي في تعيين تدفقات البيانات. يمكنك اختيار استخدام مجموعة بيانات Snowflake أو مجموعة بيانات مضمنة كمصدر ونوع متلقي.

تحويل المصدر

يسرد الجدول أدناه الخصائص التي يدعمها مصدر Snowflake. يمكنك تحرير هذه الخصائص في علامة التبويب خيارات المصدر. يستخدم الموصل نقل البيانات الداخلية لـ Snowflake.

Name ‏‏الوصف مطلوب القيم المسموح بها خاصية البرنامج النصي لتدفق البيانات
جدول إذا قمت بتحديد الجدول كإدخال، فسيحضر تدفق البيانات جميع البيانات من الجدول المحدد في مجموعة بيانات Snowflake أو في خيارات المصدر عند استخدام مجموعة البيانات المضمنة. لا السلسلة‬ (لمجموعة البيانات المضمنة فقط)
اسم الجدول
اسم المخطط
الاستعلام إذا قمت بتحديد الاستعلام كإدخال، أدخل استعلاما لإحضار البيانات من Snowflake. يمنع هذا الإعداد أي جدول اخترته في مجموعة البيانات.
إذا كانت أسماء المخطط والجدول والأعمدة تحتوي على أحرف صغيرة، فاقتبس معرّف العنصر في الاستعلام، على سبيل المثال select * from "schema"."myTable".
لا السلسلة‬ استعلام
تمكين الاستخراج التزايدي (معاينة) استخدم هذا الخيار لإخبار ADF بمعالجة الصفوف التي تغيرت منذ آخر مرة تم فيها تنفيذ البنية الأساسية لبرنامج ربط العمليات التجارية فقط. لا Boolean enableCdc
عمود تزايدي عند استخدام ميزة الاستخراج التزايدي، يجب اختيار العمود التاريخ/الوقت/العدد الذي ترغب في استخدامه كعلامة مائية في الجدول المصدر. لا السلسلة‬ العلامة المائية
تمكين تتبع تغيير Snowflake (معاينة) يمكن هذا الخيار ADF من الاستفادة من تقنية التقاط بيانات تغيير Snowflake لمعالجة بيانات دلتا فقط منذ تنفيذ البنية الأساسية لبرنامج ربط العمليات التجارية السابق. يقوم هذا الخيار تلقائيا بتحميل بيانات دلتا مع عمليات إدراج الصف وتحديثه وحذفه دون الحاجة إلى أي عمود تزايدي. لا Boolean enableNativeCdc
صافي التغييرات عند استخدام تتبع تغيير البلورة الثلجية، يمكنك استخدام هذا الخيار للحصول على صفوف تم تغييرها أو تغييرات شاملة. لن تعرض الصفوف التي تم تغييرها سوى أحدث إصدارات الصفوف التي تغيرت منذ نقطة زمنية معينة، بينما ستعرض لك التغييرات الشاملة جميع إصدارات كل صف تم تغييره، بما في ذلك الإصدارات التي تم حذفها أو تحديثها. على سبيل المثال، إذا قمت بتحديث صف، فسترى إصدار حذف وإصدار إدراج في تغييرات شاملة، ولكن فقط إصدار الإدراج في صفوف تم تغييرها. اعتمادا على حالة الاستخدام الخاصة بك، يمكنك اختيار الخيار الذي يناسب احتياجاتك. الخيار الافتراضي خطأ، مما يعني تغييرات شاملة. لا Boolean netChanges
تضمين أعمدة النظام عند استخدام تتبع تغيير snowflake، يمكنك استخدام خيار systemColumns للتحكم في ما إذا كانت أعمدة دفق بيانات التعريف التي يوفرها Snowflake مضمنة أو مستبعدة في إخراج تعقب التغيير. بشكل افتراضي، يتم تعيين systemColumns إلى true، ما يعني تضمين أعمدة دفق بيانات التعريف. يمكنك تعيين systemColumns إلى false إذا كنت تريد استبعادها. لا Boolean أعواد النظام
بدء القراءة من البداية سيؤدي تعيين هذا الخيار باستخدام الاستخراج المتزايد وتعقب التغيير إلى توجيه ADF لقراءة جميع الصفوف عند التنفيذ الأول للبنية الأساسية لبرنامج ربط العمليات التجارية مع تشغيل الاستخراج التزايدي. لا Boolean skipInitialLoad

أمثلة النص مصدر Snowflake

عند استخدام مجموعة بيانات Snowflake كنوع المصدر، يكون البرنامج النصي لتدفق البيانات المقترنة:

source(allowSchemaDrift: true,
	validateSchema: false,
	query: 'select * from MYTABLE',
	format: 'query') ~> SnowflakeSource

إذا كنت تستخدم مجموعة بيانات مضمنة، يكون البرنامج النصي لتدفق البيانات المقترنة:

source(allowSchemaDrift: true,
	validateSchema: false,
	format: 'query',
	query: 'select * from MYTABLE',
	store: 'snowflake') ~> SnowflakeSource

تتبع التغيير الأصلي

يدعم Azure Data Factory الآن ميزة أصلية في Snowflake تعرف باسم تعقب التغييرات، والتي تتضمن تعقب التغييرات في شكل سجلات. تسمح لنا هذه الميزة من snowflake بتعقب التغييرات في البيانات بمرور الوقت مما يجعلها مفيدة لغرض تحميل البيانات والتدقيق المتزايد. لاستخدام هذه الميزة، عند تمكين Change data capture وتحديد Snowflake Change Tracking، نقوم بإنشاء كائن Stream للجدول المصدر الذي يمكن تعقب التغيير على جدول Snowflake المصدر. بعد ذلك، نستخدم عبارة CHANGES في استعلامنا لجلب البيانات الجديدة أو المحدثة فقط من الجدول المصدر. أيضا، يوصى بجدولة البنية الأساسية لبرنامج ربط العمليات التجارية بحيث يتم استهلاك التغييرات ضمن فاصل زمني من وقت استبقاء البيانات المعين لجدول مصدر snowflake قد يرى المستخدم سلوكا غير متناسق في التغييرات الملتقطة.

تحويل المتلقي

يسرد الجدول أدناه الخصائص التي يدعمها متلقي Snowflake. يمكنك تحرير هذه الخصائص في علامة التبويب الإعدادات . عند استخدام مجموعة البيانات المضمنة، سترى إعدادات إضافية، وهي نفس الخصائص الموضحة في قسم خصائص مجموعة البيانات. يستخدم الموصل نقل البيانات الداخلية من Snowflake.

Name ‏‏الوصف مطلوب القيم المسموح بها خاصية البرنامج النصي لتدفق البيانات
أسلوب التحديث حدد العمليات المسموح بها في وجهة Snowflake.
لتحديث صفوف أو إجراء upsert "إدراج الصفوف أو تحديثها" أو حذفها، يلزم إجراء تحويل في الصف المعدل لوضع علامة على الصفوف التي تخضع لتلك الإجراءات.
‏‏نعم‬ true أو false قابل للحذف
قابلة للادراج
قابل للتحديث
قابل للإدراج أو التحديث
الأعمدة الرئيسية بالنسبة للتحديثات وعمليات التنشيط والحذف، يجب تعيين عمود أو أعمدة مفتاح لتحديد الصف الذي ستتم إعادة تعديله. لا صفيف المفاتيح
إجراء الجدول يحدد ما إذا كان سيتم إعادة إنشاء أو إزالة كل الصفوف من الجدول الوجهة قبل الكتابة.
- None: لن يتم اتخاذ أي إجراء على الجدول.
- Recreate: سيتم إسقاط الجدول وإعادة إنشائه. مطلوب في حال إنشاء جدول جديد بشكل ديناميكي.
- Truncate: سيتم إزالة جميع الصفوف من الجدول الهدف.
لا true أو false إعادة إنشاء
اقتطاع

أمثلة النص متلقي Snowflake

عند استخدام مجموعة بيانات Snowflake كنوع المتلقي، يكون البرنامج النصي لتدفق البيانات المقترنة:

IncomingStream sink(allowSchemaDrift: true,
	validateSchema: false,
	deletable:true,
	insertable:true,
	updateable:true,
	upsertable:false,
	keys:['movieId'],
	format: 'table',
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> SnowflakeSink

إذا كنت تستخدم مجموعة بيانات مضمنة، يكون البرنامج النصي لتدفق البيانات المقترنة:

IncomingStream sink(allowSchemaDrift: true,
	validateSchema: false,
	format: 'table',
	tableName: 'table',
	schemaName: 'schema',
	deletable: true,
	insertable: true,
	updateable: true,
	upsertable: false,
	store: 'snowflake',
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> SnowflakeSink

تحسين دفع الاستعلام

من خلال تعيين مستوى تسجيل البنية الأساسية لبرنامج ربط العمليات التجارية إلى بلا، نستبعد نقل مقاييس التحويل الوسيط، ومنع العوائق المحتملة لتحسينات Spark وتمكين تحسين دفع الاستعلام الذي يوفره Snowflake. يسمح تحسين الإيقاف المؤقت هذا بتحسينات أداء كبيرة لجداول Snowflake الكبيرة مع مجموعات بيانات واسعة النطاق.

إشعار

لا ندعم الجداول المؤقتة في Snowflake، لأنها محلية لجلسة العمل أو المستخدم الذي يقوم بإنشائها، ما يجعلها غير قابلة للوصول إلى جلسات العمل الأخرى وعرضة للكتابة فوقها كجداول عادية بواسطة Snowflake. بينما يقدم Snowflake جداول عابرة كبديل، والتي يمكن الوصول إليها عالميا، فإنها تتطلب حذفا يدويا، مما يتناقض مع هدفنا الأساسي المتمثل في استخدام جداول Temp وهو تجنب أي عمليات حذف في مخطط المصدر.

بحث عن خصائص النشاط

لمزيد من المعلومات حول الخصائص، راجع نشاط البحث.

ترقية خدمة Snowflake المرتبطة

لترقية خدمة Snowflake المرتبطة، يمكنك إجراء ترقية جنبا إلى جنب، أو ترقية موضعية.

الترقية جنبا إلى جنب

لإجراء ترقية جنبا إلى جنب، أكمل الخطوات التالية:

  1. إنشاء خدمة Snowflake مرتبطة جديدة وتكوينها بالإشارة إلى خصائص الخدمة المرتبطة.
  2. إنشاء مجموعة بيانات استنادا إلى خدمة Snowflake المرتبطة التي تم إنشاؤها حديثا.
  3. استبدل الخدمة المرتبطة الجديدة ومجموعة البيانات بالخدمات الموجودة في البنية الأساسية لبرنامج ربط العمليات التجارية التي تستهدف الكائنات القديمة.

الترقية الموضوعية

لإجراء ترقية موضعية، تحتاج إلى تحرير حمولة الخدمة المرتبطة الموجودة.

  1. تحديث النوع من 'Snowflake' إلى 'SnowflakeV2'.

  2. تعديل حمولة الخدمة المرتبطة من تنسيقها القديم إلى النمط الجديد. يمكنك إما تعبئة كل حقل من واجهة المستخدم بعد تغيير النوع المذكور أعلاه، أو تحديث الحمولة مباشرة من خلال محرر JSON. راجع قسم خصائص الخدمة المرتبطة في هذه المقالة للحصول على خصائص الاتصال المدعومة. توضح الأمثلة التالية الاختلافات في الحمولة لموصلات Snowflake القديمة والجديدة:

    حمولة JSON لموصل Snowflake القديم:

    { 
    

    "الاسم": "Snowflake1"، "type": "Microsoft.DataFactory/factories/linkedservices"، "properties": { "annotations": []، "type": "Snowflake"، "typeProperties": { "authenticationType": "Basic"، "connectionString": "jdbc:snowflake://<fake_account.snowflakecomputing.com/?user=FAKE_USER&db=FAKE_DB&warehouse=FAKE_DW&schema=PUBLIC>"، "encryptedCredential": "<your_encrypted_credential_value>" }, "connectVia": { "referenceName": "AzureIntegrationRuntime", "type": "IntegrationRuntimeReference" } } }


**New Snowflake connector JSON payload:**
```json
{ 
       "name": "Snowflake2", 
       "type": "Microsoft.DataFactory/factories/linkedservices", 
    "properties": { 
           "parameters": { 
             "schema": { 
                   "type": "string", 
                   "defaultValue": "PUBLIC" 
               } 
           }, 
        "annotations": [], 
           "type": "SnowflakeV2", 
           "typeProperties": { 
               "authenticationType": "Basic", 
               "accountIdentifier": "<FAKE_Account", 
               "user": "FAKE_USER", 
               "database": "FAKE_DB", 
            "warehouse": "FAKE_DW", 
               "encryptedCredential": "<placeholder>" 
           }, 
           "connectVia": { 
               "referenceName": "AutoResolveIntegrationRuntime", 
               "type": "IntegrationRuntimeReference" 
        } 
       } 
} 
  1. تحديث مجموعة البيانات لاستخدام الخدمة المرتبطة الجديدة. يمكنك إما إنشاء مجموعة بيانات جديدة استنادا إلى الخدمة المرتبطة التي تم إنشاؤها حديثا، أو تحديث خاصية نوع مجموعة بيانات موجودة من SnowflakeTable إلى SnowflakeV2Table.

الاختلافات بين Snowflake و Snowflake (قديم)

يوفر موصل Snowflake وظائف جديدة ويتوافق مع معظم ميزات موصل Snowflake (القديم). يوضح الجدول أدناه اختلافات الميزات بين Snowflake و Snowflake (قديم).

Snowflake Snowflake (قديم)
دعم المصادقة الأساسية ومصادقة زوج المفاتيح. دعم المصادقة الأساسية.
معلمات البرنامج النصي غير معتمدة في نشاط البرنامج النصي حاليا. كبديل، استخدم التعبيرات الديناميكية لمعلمات البرنامج النصي. لمزيد من المعلومات، راجع التعبيرات والوظائف في Azure Data Factory وAzure Synapse Analytics. دعم معلمات البرنامج النصي في نشاط البرنامج النصي.
دعم BigDecimal في نشاط البحث. سيتم عرض نوع NUMBER، كما هو محدد في Snowflake، كسلسلة في نشاط البحث. BigDecimal غير مدعوم في نشاط البحث.
يتم إهمال الخاصية القديمة لصالح المعلمات المطلوبة الحساب والمستودع وقاعدة البيانات والمخطط والدور connectionstring في موصل Snowflake القديم، تم استخدام الخاصية connectionstring لإنشاء اتصال.

لتحديد إصدار موصل Snowflake المستخدم في الخدمة المرتبطة Snowflake الموجودة، تحقق من الخاصية type . يتم تحديد الإصدار القديم بواسطة "type": "Snowflake"، بينما يتم تحديد أحدث إصدار V2 بواسطة "type": "SnowflakeV2".

يقدم إصدار V2 العديد من التحسينات على الإصدار القديم، بما في ذلك:

التحجيم التلقائي: يضبط الموارد تلقائيا استنادا إلى تحميل نسبة استخدام الشبكة.

عملية منطقة التوفر المتعددة: توفر المرونة من خلال العمل عبر مناطق توفر متعددة.

دعم IP الثابت: يعزز الأمان من خلال السماح باستخدام عناوين IP الثابتة.

للحصول على قائمة مخازن البيانات المعتمدة كمصادر ومواضع تلقٍّ، راجع مخازن البيانات المعتمدة والتنسيقات.