سؤال

أنا أقوم بتشغيل حزمة SSIS للتحميل أقول مليون صف من ملف مسطح يستخدم مهمة سيناريو للتحولات المعقدة وجهة جدول SQL Server. أحاول معرفة أفضل طريقة (حسنا، بأي حال من الأحوال في هذه المرحلة) للكتابة إلى جدول مختلف عدد الصف الصف (ربما في مضاعفات 1000 ليكون أكثر كفاءة) أثناء معالجة تدفق البيانات. هذا بحيث يمكنني تحديد النسبة المئوية للتقدم خلال المهمة التي قد تستغرق بضع دقائق، ببساطة عن طريق الاستعلام عن الجدول بشكل دوري.

لا يبدو لي أن أضيف أي مهمة SQL في التدفق، لذلك أعتقد أن الطريقة الوحيدة هي الاتصال بقاعدة بيانات SQL داخل البرنامج النصي .NET. هذا يبدو مؤلما ولست متأكدا من ذلك ممكنا. هل هناك طريقة أخرى أكثر أناقة؟ لقد رأيت إشارة إلى "قراءة الصفوف" عداد الأداء ولكن غير متأكد من أين يمكنني الوصول إلى هذا في SSIS وما زلت غير متأكد من كيفية كتابةها إلى جدول SQL أثناء معالجة تدفق البيانات.

أي اقتراحات نقدر.

غلين

هل كانت مفيدة؟

المحلول 4

حسنا، كان لديه بعض النجاح في النهاية .... إضافة مكالمة إلى الفرع التالي في مكون البرنامج النصي:

Sub UpdateLoadLog(ByVal Load_ID As Int32, ByVal Row_Count As Int32, ByVal Row_Percent As Int32, ByVal connstr As String)
    Dim dbconn As OleDbConnection
    Dim Sql As String
    Dim dbcomm As OleDbCommand

    dbconn = New OleDbConnection(connstr)
    dbconn.Open()
    Sql = "update myTable set rows_processed = " & Row_Count & ", rows_processed_percent = " & Row_Percent & " where load_id = " & Load_ID & " and load_log_type = 'SSIS'"
    dbcomm = New OleDbCommand(Sql, dbconn)
    dbcomm.ExecuteNonQuery()

    dbconn.Close()
    dbconn = Nothing
    dbcomm = Nothing
End Sub

يتم تنفيذ هذا كل 1000 صف، ويحديث الجدول بنجاح. يوجد هذا الصف موجودا بالفعل لأنه يتم إنشاؤه في تدفق التحكم في بداية الحزمة، ثم يتم تحديثه مرة أخرى في تدفق التحكم في النهاية مع RowCount النهائي و 100٪.

شكرا لجميع اقتراحاتكم يا شباب.

نصائح أخرى

هناك نوعان من الخيارات السهلة هنا:

الخيار 1: استخدم التسجيل المدمج مع SSIS ومشاهدة حدث التقدم المحرز. يمكن تكوين هذا لتسجيل الدخول إلى عدة مخرجات مختلفة بما في ذلك قاعدة البيانات العلائقية والملفات المسطحة

شاهد المزيد هنا

الخيار 2: يمكنك إضافة مكون البرنامج النصي SSIS يمكن أن يطلق النار على الإخطارات إلى نظام خارجي مثل جدول قاعدة البيانات

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

  • في استعلام المصدر أو شكل تحويل، أضف عدد صف (تدريجي)
  • في متفرعة مشروطة، استخدم تعبير مودي (٪) إلى فرع كلما كان الرقم مضاعفا على سبيل المثال 1000، ولكن هذا يمكن تكوينه أو بناء على بيانات المصدر (على سبيل المثال 0.0٪ إلى 100.0٪ من البيانات)
  • قم بإنشاء إدارة اتصال السجل واستخدام وجهة. السيطرة على أحجام الخلط بحيث يتم ملتزم الصفوف على الفور بالجدول الهدف.

لماذا لا تكتب تطبيق .NET ويمكنك الاندماج في ذلك للحصول على معلومات حول مكان وجود حزمة SSIS.

أساسا كل ما يتم إرساله إلى وحدة التحكم التي يمكنك الحصول عليها، وهناك معالجات الأحداث التي يمكنك إرفاقها للحصول على معلومات أثناء معالجة الحزمة.

فيما يلي رابط قد يساعدك على الذهاب مع هذا النهج:http://www.programminghelp.com/database/sqlserver/sql-server-integration-services-calling-ssis-package-in-c/

هل التطبيق يستهلك الصف عد تطبيق .NET؟ عندما يتعلق الأمر بمشاركة المعلومات بين التطبيقات، هناك الكثير من الممارسات المقبولة. قد تكون يجب أن نلقي نظرة عليها. وللحكوك الخاصة، إذا كان تطبيق .NET الذي يستهلك رقم الصف التالي لحساب التقدم المحرز، فقد يكون يمكنك تخزين المعلومات آخر غير جدول DB، مثل نظام الملفات، خدمة الويب، متغيرات بيئة Windows، سجل ( مثل سجل الأحداث Windows)، إلخ هو بعض التي جاءت إلى ذهني الآن. أعتقد أن تحديث متغير بيئة Windows مع نموذج عدد الصفوف مع مكون البرنامج النصي سيكون حلا جيدا بما فيه الكفاية. تماما مثل استخدام متغير عالمي لمشاركة البيانات بين وظيفتين داخل البرنامج. :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top