โปรแกรมเมอร์ควรใช้ SSIS หรือไม่และถ้าเป็นเช่นนั้นเพราะเหตุใด [ปิด]


94

ในฐานะนักพัฒนา. NET ฉันควรชอบแพ็คเกจ SSIS มากกว่าการเขียนโค้ดด้วยเหตุผลใด เรามีตันของแพคเกจในการผลิตที่ฉันกำลังทำงานและพวกเขากำลังฝันร้ายทั้ง "เขียน" (บางทีวาด?) และการบำรุงรักษา แต่ละแพคเกจดูเหมือนชามสปาเก็ตตี้หลากสีที่มีสคริปต์ C # และ VB.NET ผสมกันในจุดที่นามธรรมพังทลาย หากต้องการทราบว่า "Execute SQL Task" หรือ "Foreach Loop" ทำอะไรบ้างฉันต้องดับเบิลคลิกที่สิ่งที่ถูกสาปและเรียกดูโครงสร้างของค่าและนิพจน์ตามตัวอักษรซึ่งกระจัดกระจายไปตามแท็บต่างๆ

ฉันเปิดใจจึงอยากทราบว่านักพัฒนาที่ดีคนอื่น ๆพบว่า SSIS มีประสิทธิผลมากกว่าการเขียนโค้ดหรือไม่ หากคุณพบว่า SSIS มีประสิทธิผลมากขึ้นโปรดบอกฉันว่าทำไม


4
ไม่รู้ว่ามันเป็นอย่างไร แต่ SSIS เร็วกว่ารหัสคู่มือที่ฉันเขียนไว้สำหรับสร้างคลังข้อมูลมาก เป็นเครื่องมือที่ออกแบบมาสำหรับงาน - พยายามแบ่งงานออกเป็นแพ็กเกจย่อยที่ดำเนินการจากแพ็คเกจหลัก
Mr Shoubs

1
ลิงก์ไปยังคำถามที่คล้ายกัน: stackoverflow.com/q/690123/327165
Ilya Berdichevsky

5
เพิ่งมาเจอเรื่องนี้ ฉันกำลังดำเนินการเพื่อรักษาแพ็คเกจ SSIS ที่มีปัญหาและเขียนตัวถอดรหัสเพื่อแยกงานที่เป็นประโยชน์จากพวกเขาลงในโปรแกรม C # code.google.com/p/csharp-dessist
Ted Spence

5
จากประสบการณ์ของฉัน SSIS อาจเจ็บปวดหากคุณมีสคริปต์ "ยาว" และ / หรือ "ซับซ้อน" หรือหลายสคริปต์ การดีบักแอปคอนโซลเป็นวิธีที่ง่ายกว่า ใน SSIS คุณไม่สามารถดีบักสคริปต์ของคุณเองได้ ข้อความแสดงข้อผิดพลาดที่เกิดขึ้นเนื่องจากสคริปต์เป็นความลับและคุณไม่สามารถเห็นบรรทัดที่แน่นอนที่ทำให้เกิดข้อผิดพลาด IMO หากสามารถตอบสนองความต้องการของโครงการด้วยส่วนประกอบ SSIS มาตรฐาน SSIS อาจเป็นหนทางที่จะไป แต่สำหรับสิ่งนั้นคุณจำเป็นต้องทราบข้อ จำกัด ของส่วนประกอบ SSIS เช่นวิดีโอนี้แสดงให้คุณเห็นว่าทำไม "ส่งงานเมล" ถึงแทบไม่มีประโยชน์ - youtube.com/watch?v=IlUzkMPYDSk
Steam

3
คำถามนี้มีคำตอบ 7 ข้อดังนั้นจึงไม่ได้เรียกร้องให้มีการอภิปรายโต้แย้งการสำรวจหรือการอภิปรายเพิ่มเติม ทำไมไม่เปิดไว้
Michael Freidgeim

คำตอบ:


94

ฉันใช้ SSIS ทุกวันเพื่อดูแลและจัดการคลังข้อมูลขนาดใหญ่และคิวบ์ ฉันเป็นธุรกิจอัจฉริยะและคลังข้อมูล 100% เป็นเวลาสองปี ก่อนหน้านั้นฉันเป็นนักพัฒนาแอปพลิเคชัน. NET มาเป็นเวลา 10 ปี

ค่าของ SSIS เป็นเสมือนเครื่องมือเวิร์กโฟลว์ในการย้ายข้อมูลจากจุดหนึ่งไปยังอีกจุดหนึ่งโดยอาจมีการเปลี่ยนแปลงที่ จำกัด และการแตกแขนงตามเงื่อนไขไปพร้อมกัน หากแพ็กเกจของคุณมีสคริปต์จำนวนมากแสดงว่าทีมของคุณกำลังใช้ SSIS สำหรับงานที่ไม่ถูกต้องหรือไม่พอใจกับ SQL หรือซื้อเข้ามาในโฆษณา แพคเกจ SSIS นั้นยากที่จะดีบัก ส่วนประกอบของสคริปต์เป็นฝันร้ายอย่างแท้จริงและควรใช้เฉพาะในการจัดรูปแบบการวนซ้ำหรือเป็นทางเลือกสุดท้าย

  1. ทำให้แพ็กเกจของคุณง่ายงาน sql และงานโฟลว์ข้อมูล
  2. ทำงานนอก SSIS ให้ได้มากที่สุดโดยเฉพาะใน SQL
  3. เก็บตัวแปรของคุณไว้ในขอบเขตส่วนกลางเดียว
  4. เก็บ SQL ของคุณไว้ในตัวแปรหรือจัดเก็บกระบวนงานอย่าอยู่ในบรรทัด
  5. เก็บค่าตัวแปรของคุณไว้ในที่เก็บคอนฟิกูเรชันโดยเฉพาะอย่างยิ่งฐานข้อมูล SQL

1
ด้วยปัญหาที่ฉันมีกับ SSIS ฉันจะได้รับคำตอบที่มีอคติมากขึ้น (ราวกับว่าคุณไม่สามารถบอกได้จากโทนเสียงของคำถามของฉัน:)) คำตอบที่ดีเควิน
Charles

6
คุณทำงานกับ. NET เป็นเวลา 10 ปีได้อย่างไรหากเปิดตัวในปี 2545
Brady Holt

7
[quote] Microsoft เริ่มต้นการพัฒนาบน. NET Framework ในช่วงปลายทศวรรษ 1990 โดยเดิมใช้ชื่อว่า Next Generation Windows Services (NGWS) ในช่วงปลายปี 2000 รุ่นเบต้าแรกของ. NET 1.0 ได้รับการเผยแพร่ [/ quote] นั่นคือวิธีที่เขาอาจทำงานกับเบต้า
nitefrog

คำถามนี้ได้รับคำตอบในปี 2010 ดังนั้นให้ถอด BI สองปีออกจากนั้นอีก 10 ปีให้ปี 1998 สองปีก่อนที่จะเปิดตัวเบต้าที่คุณพูดถึง ไม่งั้นตอบดี! :)
finoutlook

ใช่ขอบเขตทั่วโลกมีความหมาย หากคุณทำให้ท้องถิ่นและต้องการเข้าถึงที่อื่นแสดงว่าคุณมีปัญหา คุณไม่สามารถเปลี่ยนขอบเขตของ local เป็น global ได้ คุณต้องคลิกและลบเป็นจำนวนมากแทน หากคุณมีคนในพื้นที่ 10-15 คนสิ่งนี้จะกลายเป็นความเจ็บปวด
Steam

52

ฉันลองใช้ SSIS หลายครั้งและยอมแพ้กับมัน IMO มันง่ายกว่ามากที่จะทำทั้งหมดที่ฉันต้องการใน C # SSIS ซับซ้อนเกินไปมี gotchas มากเกินไปและมันก็ไม่คุ้ม การใช้เวลาในการพัฒนาทักษะ C # จะดีกว่าการใช้เวลาในการเรียนรู้ SSIS เท่ากันคุณจะได้รับผลตอบแทนจากการฝึกอบรมมากขึ้น

นอกจากนี้การค้นหาและบำรุงรักษาฟังก์ชันการทำงานในโซลูชัน VS ยังทำได้ง่ายกว่ามาก การทดสอบหน่วยด้วย VS เป็นเรื่องง่าย สิ่งที่ฉันต้องทำคือตรวจสอบแหล่งที่มาใน Subversion และตรวจสอบว่าโหลดอย่างไร แพ็คเกจ SSIS สำหรับการทดสอบหน่วยมีส่วนเกี่ยวข้องอย่างมากที่จะนำมาใช้อย่างอ่อนโยน

นอกจากนี้ยังมีสถานการณ์ที่ SSIS ล้มเหลวในการเติมข้อมูลบางคอลัมน์ในบางแถวโดยไม่ต้องแจ้งให้ทราบล่วงหน้า เราใช้เวลาส่วนใหญ่ในการแก้ไขปัญหาและค้นหาว่าเกิดอะไรขึ้น การพัฒนาโซลูชันทางเลือกใน C # ใช้เวลาน้อยกว่าหนึ่งชั่วโมงและใช้งานได้โดยไม่มีปัญหาเป็นเวลาสองปี


ขอบคุณสำหรับคะแนนของคุณ Alex นี่คือตัวอย่างของสิ่งที่ฉันคิดว่าอาจเป็น gotcha - stackoverflow.com/questions/21616435/… .
Steam

2
มีรายการ C # / หัวข้อการเขียนโปรแกรมทั้งหมดที่นักพัฒนา ETL ต้องรู้หรือไม่? เช่น. LINQ, SqlDataReader, DataTable เป็นต้นฉันก็รู้สึกว่า SSIS ไม่ดีสำหรับงานที่ซับซ้อน หากคุณมีโปรเจ็กต์ / งาน "คัดลอกวาง" ที่ง่าย SSIS อาจเป็นเครื่องมือที่ดีที่สุด
Steam

@blasto คุณได้ลอง Rhino ETL: ayende.com/blog/3102/rhino-etl-2-0
AK

อเล็กซ์คำตอบของเจอโรมยังแนะนำ Rhino ETL มันดูคลุมเครือสำหรับฉัน ดังนั้นฉันจึงลังเลที่จะใช้เนื่องจากไม่มีเอกสารการสนับสนุนและแบบฝึกหัด นอกจากนี้ดูเหมือนว่ามีนักพัฒนาเพียงคนเดียวเท่านั้นที่ทำงานกับมัน นั่นทำให้ความมั่นใจในเครื่องมือลดลง ฉันจะลองทำเพื่อความสนุกหรือเพราะความอยากรู้อยากเห็น แต่ฉันไม่สามารถใช้สิ่งนี้กับโครงการจริงได้ ขอบคุณ.
Steam

หากมีใครต้องการบทช่วยสอนเกี่ยวกับ Rhino ETL (พร้อม C # บริสุทธิ์) นี่คือหนึ่ง - codeproject.com/Articles/34556/Write-ETL-jobs-in-pure-C
Steam

14

ในความคิดของฉัน - SSIS มีไว้สำหรับการดำเนินการ ETL เท่านั้นและไม่ควรมีตรรกะนอกขอบเขตนั้น


8
ETL = Extract Transform Load
Christoph

3
นั่นเป็นสิ่งที่ฉันรู้สึกมาก ในกรณีของเราเรากำลังใช้ SSIS เพื่อทำสิ่งต่างๆเช่นอีเมล (หรือ SFTP) CSV ที่มีข้อมูลราคา การแยกสคริปต์ฝังตัว ฯลฯ ค่อนข้างน่ากลัว หากเพิ่งย้ายข้อมูลบางส่วนไปพร้อมกับ SSIS มันอาจจะไม่เลวร้ายนัก
Charles

1
ฉันคิดว่าคำตอบของคุณอาจมีความลึกซึ้งมากกว่านี้
Steam

3
T ใน ETL ไม่เกี่ยวข้องกับตรรกะบางอย่างได้หรือไม่? แค่คิด ...
cs0815

หากเกี่ยวข้องกับการสร้าง / กำหนดเส้นทางข้อมูลเท่านั้น แต่ฉันจะหลีกเลี่ยงตรรกะทางธุรกิจใด ๆ
Christoph

11

ฉันมีประสบการณ์ที่โชคร้ายในการทำงานในโครงการที่เราคิดว่า SSIS จะเป็นทางออกที่ดีพอที่จะรวบรวมและรวมข้อมูลจากหลายแหล่ง สิ่งที่น่าเสียดายคือมันใช้งานได้ดีในตอนแรก แต่แล้วข้อกำหนดก็เปลี่ยนไปและในที่สุดเราก็รู้ว่ามันเป็นเครื่องมือที่ไม่ถูกต้อง

บางทีเราอาจจะใช้มันไม่ถูกต้อง แต่เรามีปัญหามากถ้าเราเคยเปลี่ยนสคีมาของเราและในที่สุดเราก็ใช้นิยาม ORM ของเราซ้ำจากส่วนหน้าเพื่อเขียนเครื่องมือที่กำหนดเองใน C # เพื่อทำสิ่งนี้ เนื่องจากเรามีโมเดลข้อมูลอยู่แล้วสิ่งนี้จึงง่ายอย่างน่าประหลาดใจ เห็นได้ชัดว่า YMMV และฉันไม่ได้เป็นผู้เชี่ยวชาญ SSIS แต่ในกรณีเดียวนี้ SSIS ทำให้เกิดการทำงานซ้ำซ้อนและปวดหัวเมื่อเพียงแค่พับแขนเสื้อขึ้นและ 'handcoding' มันง่ายกว่าที่คิด

ดังนั้นฉันจะคิดถึงความยืดหยุ่นมากเมื่อพิจารณา SSIS


7
ฉันแบ่งปันความรู้สึกเดียวกัน ง่ายต่อการ refactor code ... ไม่มากนักกับ Visual DSL
Charles

ลุคคุณช่วยให้โครงร่างข้อกำหนดโครงการของคุณกับเราได้ไหม ขอบคุณ.
Steam

@blasto เราพยายามรวมข้อมูลจากหลายฐานข้อมูลและใช้ยูทิลิตี้การจับคู่สตริงที่สร้างขึ้นในความน่าจะเป็นเพื่อรวมข้อมูลจากระบบต่างๆ (โดยพื้นฐานแล้วฐานข้อมูล CRM) เมื่อ 5 ปีก่อนผมจึงจำรายละเอียดไม่ได้ทั้งหมด
ลูกา

หากคุณเป็นร้านค้า. net และเกี่ยวข้องกับการย้ายข้อมูลเพื่อวัตถุประสงค์ในการจัดเก็บข้อมูล SSIS จะช่วยคุณได้ก็ต่อเมื่อคุณรู้จักมันดีพอ ฉันเคยเห็นหลายคนที่เป็น. net กูรู แต่ไม่เข้าใจ SSIS อย่างสมบูรณ์ (และฉันก็ไม่โทษพวกเขา) SSIS ต้องใช้คนที่รู้ดีพอมิฉะนั้นคุณจะต้องเขียนแพ็คเกจที่ไม่มีประสิทธิภาพและไม่สามารถทำในสิ่งที่ถูกต้องได้
rvphx

6

SSIS มีสถานที่และสถานที่นั้นไม่ใช่การเขียนโปรแกรมทั่วไปหรือใช้แทนโพรซีเดอร์ที่จัดเก็บไว้ มันมาจากโรงเรียน ETL (Extract, Transform และ Load) และนั่นคือจุดเริ่มต้นของมัน

ชื่อเก่า (DTS, Data Transformation Services) และชื่อใหม่ (SSIS, Sql Server Integration Services) ทำให้ชัดเจนว่าเป็นบริการ (หรือชุดบริการ) ที่ออกแบบมาเพื่อจัดการข้อมูลเพื่อรวมฐานข้อมูล SQL Server เข้ากับกระบวนการขนาดใหญ่


ฉันไม่เห็นว่าคำตอบนี้ควรได้รับคะแนนโหวตมากขนาดนี้อย่างไร ไม่ได้กล่าวถึงสาเหตุที่ SSIS ไม่สามารถให้พลังของภาษาโปรแกรมแก่คุณได้ มันไม่สมเหตุสมผลสำหรับฉัน ตัวอย่างหนึ่งที่ SSIS ไม่ตรงกับภาษาการเขียนโปรแกรมคือการดีบัก เห็นได้ชัดว่า SSIS 2012 เปลี่ยนแปลงสิ่งนั้น ดังนั้นอาจเป็นได้ว่าเครื่องมือกำลังจะเป็นมิตรกับโปรแกรมเมอร์มากขึ้น
Steam

>> ตัวอย่างหนึ่งที่ SSIS ไม่ตรงกับภาษาการเขียนโปรแกรม ... ฉันยอมรับ - ไม่ใช่ภาษาโปรแกรม เป็นเครื่องมือ ETL ที่ดี
DaveE

4

หากคุณต้องการย้ายข้อมูลโดยใช้โปรแกรมคุณอาจต้องการดู Rhino ETL

ฉันกำลังทำงานกับเฟรมเวิร์กของตัวเองFluent ETLเนื่องจากฉันพบว่า SSIS มีส่วนเกี่ยวข้องกับงานข้อมูลง่ายๆที่เกี่ยวข้องกับการพัฒนาเช่นการโหลดข้อมูลการทดสอบหน่วยจากไฟล์ CSV


แรด ETL คลุมเครือและมีเพียง 24 คำถามในดังนั้น ณ ตอนนี้ - stackoverflow.com/questions/tagged/rhino-etl ฉันคิดว่า C # จะดีพอสำหรับ ETL ถ้าคุณมีความรู้และประสบการณ์
Steam

1
มีทางเลือกยอดนิยมสำหรับ Rhino ETL หรือไม่?
Steam

3

SSIS ไม่ใช่โปรแกรม thigns จำนวนมากทำใน SSIS ได้เร็วขึ้นและคุณจะได้รับความคืบหน้าโดยละเอียดและข้อมูลข้อผิดพลาดที่ดีมากในฐานะผู้ดูแลระบบซึ่งเป็นสิ่งที่ดีมากในสถานการณ์ที่ SSIS มีไว้เพื่อแก้ปัญหาเพราะบางครั้งเกิดข้อผิดพลาดและผู้ดูแลระบบต้องการจำนวนมาก ข้อมูล.

ดังที่กล่าวไว้ SSIS ไม่ได้เป็นประโยชน์อย่างแท้จริงหากคุณไม่มีสิ่งที่อธิบายได้ด้วยตนเอง - พวกเขามีไว้สำหรับบางสิ่งบางอย่างการเข้าสู่โปรแกรมทั่วไปมากเกินไปทำให้พวกเขาห่วย


2
คุณช่วยยกตัวอย่างให้เราได้ไหมว่า SSIS สามารถเร่งการพัฒนาในสถานการณ์หนึ่งและช้าในสถานการณ์อื่น ๆ ได้อย่างไร
Steam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.