ETL: การแยกข้อมูลจาก 200 ตาราง - การไหลของข้อมูล SSIS หรือ T-SQL แบบกำหนดเอง


12

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

โปรดทราบว่าเรามีฐานข้อมูลแหล่งข้อมูลประมาณ 225 รายการด้วยสคีมาเดียวกัน

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

จากมุมมองการบำรุงรักษาสิ่งนี้ทำให้ฉันกลายเป็นปัญหาใหญ่ ถ้าฉันต้องการทำการเปลี่ยนแปลงกวาดบางอย่างกับรหัสการแยกฉันจะต้องแก้ไขกระแสข้อมูลที่แตกต่างกัน 200 รายการ

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

จากการทดสอบของฉันสิ่งนี้ยังไม่เร็วเท่ากับการใช้กระแสข้อมูล SSIS กับแหล่ง OLEDB และปลายทาง ดังนั้นฉันสงสัยว่าฉันมีทางเลือกประเภทใด ความคิดจนถึงขณะนี้รวมถึง:

  1. การใช้EZAPIเพื่อสร้างแพ็คเกจ SSIS แบบเป็นโปรแกรมด้วยการไหลของข้อมูลอย่างง่าย ตารางและคอลัมน์ที่จะแยกจะมาจากตารางเมทาดาทาที่กล่าวถึงก่อนหน้านี้
  2. ซื้อซอฟต์แวร์ภายนอก (ส่วนประกอบการไหลของข้อมูลแบบไดนามิก)

วิธีที่ดีที่สุดในการเข้าถึงสิ่งนี้คืออะไร? เมื่อพูดถึงการเขียนโปรแกรม. NET ฉันเป็นผู้เริ่มต้นดังนั้นเวลาที่ต้องใช้ในการเพิ่มระดับความรู้พื้นฐานก็เป็นเรื่องที่น่ากังวลเช่นกัน


1
เนื่องจากฐานข้อมูล 225 ทั้งหมดมีสคีมาเหมือนกันจึงเป็นไปได้หรือไม่ที่จะรักษามุมมองที่รวบรวมข้อมูลจากฐานข้อมูล 225 ทั้งหมดและชี้แพคเกจ SSIS ที่นั่น แม้ว่าสิ่งนี้อาจดูเหมือนเป็นเครื่องมือการปิดบังและไม่จำเป็นต้องทำงานได้อย่างน่าอัศจรรย์ แต่ฟังดูง่ายกว่าที่จะจัดการมากกว่า 225 แพ็กเกจ SSIS (แม้ว่าคุณจะจัดการระบบอัตโนมัติที่นั่น) คุณสามารถไปครึ่งทางและสร้างมุมมองสำหรับฐานข้อมูลแต่ละชุดเช่นฐานข้อมูล 1-25, 26-50, 51-75 และอื่น ๆ
Aaron Bertrand

ฐานข้อมูลอยู่ในเซิร์ฟเวอร์หลายตัวซึ่งฉันคิดว่ามันซับซ้อนกว่า ฉันได้ลองสร้างมุมมองของตารางที่แตกต่างกันในกล่องพัฒนากับ 225 ฐานข้อมูลและการอ่านข้อมูลนั้นช้ามาก
8kb

1
คุณต้องการให้มุมมองอ้างอิงฐานข้อมูลบนเซิร์ฟเวอร์เดียวกันเท่านั้น และอีกครั้งมุมมองเดียวกับ 225 ตารางทั้งหมดจะไม่ทำงานอย่างน่าอัศจรรย์ แต่ฉันคิดว่าคุณยังสามารถแบ่งและพิชิตและไม่มีกระแสข้อมูล 225
Aaron Bertrand

คำตอบ:


12

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

EzAPI นั้นสนุก แต่ถ้าคุณยังใหม่กับ. NET และ SSIS, โอเคไม่คุณไม่ต้องการมัน ฉันคิดว่าคุณจะใช้เวลามากขึ้นในการเรียนรู้เกี่ยวกับโมเดลวัตถุ SSIS และอาจเกี่ยวข้องกับ COM มากกว่าการทำงานให้เสร็จ

เนื่องจากฉันขี้เกียจฉันจะเสียบ BIML เป็นตัวเลือกฟรีที่คุณไม่ได้ระบุไว้ จากคำตอบสำหรับ SO /programming/13809491/generating-several-similar-ssis-packages-file-data-source-to-db/13809491/generating-seimal

  • Bimlเป็นสัตว์ร้ายที่น่าสนใจ ความหลากหลายจะยินดีที่จะขายใบอนุญาตให้คุณหมอก แต่มันไม่จำเป็น สิ่งที่คุณต้องมีคือBIDSHelperจากนั้นเรียกดูผ่านBimlScriptและค้นหาสูตรอาหารที่ตรงกับความต้องการของคุณ เมื่อคุณมีแล้วให้คลิกที่ปุ่มเมนูตามบริบทใน BIDSHelper และหวือมันสร้างแพคเกจ

ฉันคิดว่ามันอาจเป็นแนวทางสำหรับคุณเช่นกัน คุณกำหนด BIML ของคุณที่อธิบายถึงวิธีการทำงานของแพ็คเกจของคุณจากนั้นสร้างแพ็คเกจ ในสถานการณ์ที่คุณอธิบายที่คุณทำการเปลี่ยนแปลงและมีการแก้ไขแพคเกจ N ไม่คุณแก้ไขคำนิยามของปัญหาและแพคเกจที่สร้างใหม่

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

ข้อควรพิจารณาเกี่ยวกับการออกแบบ SSIS

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

จากนั้นใช้แพคเกจหลักเพื่อจัดการกระแสงานของเด็ก ฉันรู้ว่าคุณอยู่ในปี 2005 แต่การเปิดตัว SSIS ของ SQL Server 2012 เป็นชุดนอนของแมว ฉันชอบรูปแบบการปรับใช้โครงการและการรวมอย่างแน่นหนาซึ่งอนุญาตระหว่างแพ็คเกจ

TSQL กับ SSIS (เรื่องราวของฉัน)

สำหรับวิธีการบริสุทธิ์ TSQL ในงานก่อนหน้าพวกเขาใช้งาน 73 ขั้นตอนในการจำลองข้อมูล Informix ทั้งหมดของพวกเขาลงใน SQL Server โดยทั่วไปแล้วจะใช้เวลาประมาณ 9 ชั่วโมง แต่สามารถยืดได้ถึง 12 หรือมากกว่านั้น หลังจากที่พวกเขาซื้อ SAN ใหม่มันก็ลงไปประมาณ 7+ ชั่วโมง กระบวนการตรรกะเดียวกันที่เขียนใหม่ใน SSIS เป็นเวลา 2 ชั่วโมงที่สอดคล้องกัน ปัจจัยที่สำคัญที่สุดในการขับรถในเวลานั้นคือการขนานที่ "ฟรี" ที่เราใช้กับ SSIS งานตัวแทนทำงานทั้งหมดของงานเหล่านั้นในอนุกรม แพคเกจหลักโดยทั่วไปแบ่งตารางออกเป็นหน่วยการประมวลผล (5 ชุดขนานของงานแบบอนุกรมของ "run replicate table 1", table 2, etc) ที่ฉันพยายามแบ่ง buckets ออกเป็นหน่วยงานขนาดเท่ากันเสมือน สิ่งนี้อนุญาตให้ตารางอ้างอิงการค้นหา 60 หรือมากกว่านั้นได้รับการบรรจุอย่างรวดเร็วและจากนั้นการประมวลผลจะชะลอตัวลงเมื่อเข้าสู่ "

ข้อดีอื่น ๆ สำหรับฉันที่ใช้ SSIS คือฉันได้รับการกำหนดค่า "ฟรี" การเข้าสู่ระบบและการเข้าถึงไลบรารี. NET สำหรับข้อมูลตารางที่ฉันต้องการทุบตีลงในรูกลม ฉันคิดว่ามันจะง่ายกว่าที่จะรักษา (ผ่านการบำรุงรักษา) แพ็คเกจ SSIS กว่าวิธี TSQL บริสุทธิ์โดยอาศัยลักษณะกราฟิกของสัตว์ร้าย

เช่นเคยไมล์สะสมของคุณอาจแตกต่างกันไป


BIML ดูน่าสนใจมาก ฉันยังพิจารณาที่จะสร้างการไหลของข้อมูลเป็นแพ็คเกจแยกต่างหากจากนั้นให้เรียกมันผ่านแพ็คเกจหลัก คุณคิดว่ามันดีกว่านี้ไหม นอกจากนี้อยากรู้อยากเห็นถ้าคุณมีความคิดเห็นเกี่ยวกับวิธีการ T-SQL มันช้ากว่า แต่ฉันได้ทำการทดสอบแล้วและมันจะใช้ได้
8kb

ฉันมีการปรับปรุงการตอบสนองของฉันกับความคิดเกี่ยวกับการออกแบบและ TSQL วิธี ETL บริสุทธิ์
billinkc

0

คุณพูดถึงว่าคุณมี 200 ตารางแหล่งข้อมูลและฐานข้อมูล 225 ฉันสมมติว่า 200 source tables นั้นนับจากทุกตารางจากฐานข้อมูลทั้งหมด 225 รายการ (เพราะถ้าคุณมี 200 ตารางในแต่ละฐานข้อมูลที่จะทำให้ตารางรวมของคุณนับเป็น 45000) คุณยังกล่าวถึงว่า schema ของฐานข้อมูลเหมือนกันสำหรับฐานข้อมูล 225

คุณสามารถสร้างแพคเกจ SSIS สำหรับเพียง 1 ฐานข้อมูลก่อนแล้วเมื่อคุณกำหนดเวลางานของคุณคุณก็สามารถเปลี่ยนสายอักขระการเชื่อมต่อฐานข้อมูลโดยใช้การกำหนดค่าแพคเกจ (ถ้า SQL 2005 ของคุณคุณจะใช้รูปแบบการปรับใช้แพคเกจ) ตามที่กล่าวไว้ในการตอบสนองก่อนหน้า SQL 2012 มีวิธีใหม่ในการกำหนดค่า paremeters ของคุณโดยใช้รูปแบบการปรับใช้โครงการ

คุณสามารถรับข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าแพ็คเกจด้วย SSIS ได้ที่นี่ http://www.sql-server-performance.com/2007/package-configuration-2005/

คุณสามารถรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้พารามิเตอร์โครงการได้จากที่นี่ /programming/15206184/how-to-configure-ssis-2012-project-to-run-under-different-environment-configat

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