หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
BCP API มีเส้นทางการนําเข้าฝั่งไคลเอ็นต์โดยตรงเพื่อโหลดข้อมูลลงใน Warehouse โดยไม่ต้องจัดเตรียมไฟล์ในที่จัดเก็บข้อมูลภายนอก
Important
คุณลักษณะนี้อยู่ในแสดงตัวอย่าง
เครื่องมือ BCP (ยูทิลิตี้ bcp),คลาส .NET SqlBulkCopyและคลาส Java SQLServerBulkCopy เป็นวิธีการนําเข้าที่ใช้ในปริมาณงานพูล SQL เฉพาะของ SQL Server, Azure SQL และ Azure Synapse อินเทอร์เฟซเหล่านี้ใช้ BCP API และโปรโตคอลโหลดจํานวนมาก TDS ซึ่งโดยทั่วไปจะมีประสิทธิภาพมากกว่าคําสั่งแบบแถวต่อแถว INSERT สําหรับการนําเข้าปริมาณมาก
Important
สําหรับปริมาณงานการนําเข้าสูงสุดในสถานการณ์การผลิตที่คุณสามารถจัดเตรียมไฟล์ได้ก่อน ให้ใช้ คัดลอกลงใน
ใช้ BCP API เมื่อข้อมูลอยู่ในระดับไคลเอ็นต์หรือแอปพลิเคชันของคุณอยู่แล้ว และคุณต้องการนําเข้าโดยตรงไปยังตารางคลังสินค้าผ่านการเชื่อมต่อ SQL
เมื่อใดที่ควรใช้ BCP API
ใช้ BCP API สําหรับสถานการณ์การนําเข้าโดยตรง เช่น
- บริการแอปพลิเคชันที่เก็บข้อมูลไว้ในหน่วยความจําและเขียนเป็นชุด
- สคริปต์การดําเนินงานและรันบุ๊กที่โหลดไฟล์ผ่านระบบอัตโนมัติของบรรทัดคําสั่ง
- เครื่องมือการรวมข้อมูลที่ใช้ความหมายการคัดลอกจํานวนมากของ SQL
- เครื่องมือไคลเอ็นต์หรือการผสานรวมที่มีอยู่ซึ่งใช้ความหมายของ BCP API อยู่แล้วและไม่สามารถปรับโครงสร้างใหม่เป็น
COPY INTOรูปแบบการแสดงละครได้ - ปริมาณงานไมโครแบทช์ที่ไคลเอ็นต์ส่งแบทช์ขนาดเล็กบ่อยครั้งโดยตรงผ่านการเชื่อมต่อ SQL ของคลังสินค้า
Prerequisites
- ใช้การรับรองความถูกต้องของ Microsoft Entra ID การรับรองความถูกต้อง SQL (ชื่อผู้ใช้และรหัสผ่าน) ไม่ได้รับการสนับสนุนในคลังสินค้า
ตัวเลือกที่ 1: ใช้ bcp.exe สําหรับการนําเข้าตามสคริปต์
ใช้ ยูทิลิตี้ bcp เมื่อคุณต้องการการนําเข้าบรรทัดคําสั่งที่ทําซ้ําได้จากสคริปต์ งานตามกําหนดการ หรือ runbook ตัวเลือกนี้เหมาะอย่างยิ่งสําหรับการนําเข้าตามไฟล์ที่คุณต้องการควบคุมตัวคั่นการเข้ารหัสขนาดแบทช์และเอาต์พุตข้อผิดพลาดอย่างชัดเจน
นอกจากนี้ยังแนะนําให้ใช้ตัวเลือกนี้เมื่อไฟล์ต้นฉบับถูกสร้างขึ้นโดย bcp ... out SQL Server, Azure SQL หรือจุดสิ้นสุด SQL ที่คล้ายกัน และคุณต้องการรักษาข้อตกลงไฟล์การคัดลอกจํานวนมากที่เข้ากันได้
โฟลว์ทั่วไป:
- เตรียมตารางเป้าหมายในคลังสินค้าของคุณ
- เตรียมไฟล์ต้นฉบับ (เช่น CSV) ด้วยลําดับคอลัมน์ที่ตรงกับเป้าหมาย หรือใช้ไฟล์รูปแบบ
- เรียกใช้
bcp ... inกับตําแหน่งข้อมูล SQL และฐานข้อมูลคลังสินค้าของคุณ - ปรับแต่งตัวเลือก เช่น ขนาดแบทช์และตัวคั่นตามขนาดและรูปแบบไฟล์
ตัวอย่าง:
bcp dbo.Sales in sales.csv -S <workspace-endpoint> -d <database> -G -U <user@domain.com> -c -t ,
ตัวเลือกที่เป็นประโยชน์จากเอกสารประกอบ bcp:
-
-Sตั้งค่าจุดสิ้นสุด SQL หรือ สายอักขระการเชื่อมต่อ คลังสินค้า -
-dตั้งค่าฐานข้อมูลปลายทาง -
-Gใช้การรับรองความถูกต้องของ Microsoft Entra นี่เป็นตัวเลือกการรับรองความถูกต้องที่รองรับเพียงตัวเลือกเดียวสําหรับสถานการณ์แสดงตัวอย่างนี้ -
-Uระบุชื่อหลักของผู้ใช้ Microsoft Entra ของคุณสําหรับรูปแบบการลงชื่อเข้าใช้แบบโต้ตอบ -
-cใช้รูปแบบข้อมูลอักขระ -
-tตั้งค่าเทอร์มิเนเตอร์ฟิลด์ (,ในตัวอย่างนี้) -
-bสามารถกําหนดขนาดแบทช์สําหรับโหลดขนาดใหญ่
สําหรับไวยากรณ์แบบเต็มและตัวเลือกเฉพาะแพลตฟอร์ม โปรดดู คัดลอกจํานวนมากด้วยยูทิลิตี้ bcp
ตัวเลือกที่ 2: ใช้ C# SqlBulkCopy
ใช้ Microsoft Data.SqlClient.SqlBulkCopy สําหรับบริการ .NET และแอปพลิเคชันที่เก็บข้อมูลไว้ในหน่วยความจําอยู่แล้ว (ตัวอย่างเช่น DataTable หรือ DbDataReader)
SqlBulkCopy สตรีมแถวอย่างมีประสิทธิภาพไปยังตารางปลายทางผ่านการเชื่อมต่อ SQL เดียว เป็นทางเลือกที่ดีกว่าการออกแถลงการณ์เป็นรายบุคคล INSERT จํานวนมาก
โฟลว์ทั่วไป:
- เปิดการเชื่อมต่อ SQL ด้วย สายอักขระการเชื่อมต่อ คลังสินค้า โดยใช้การรับรองความถูกต้องของ Microsoft Entra
- สร้าง
SqlBulkCopyอินสแตนซ์และตั้งค่าDestinationTableName - (ไม่บังคับ) เพิ่มการแม็ปคอลัมน์หากชื่อคอลัมน์ต้นทางและเป้าหมายหรือใบสั่งแตกต่างกัน
- ตั้งค่าคุณสมบัติที่เกี่ยวข้องกับประสิทธิภาพ เช่น
BatchSizeและBulkCopyTimeout - โทร
WriteToServerหรือWriteToServerAsyncเพื่อโหลดแบทช์
ตัวอย่าง:
using Microsoft.Data.SqlClient;
using var connection = new SqlConnection(connectionString);
await connection.OpenAsync();
using var bulk = new SqlBulkCopy(connection);
bulk.DestinationTableName = "dbo.Sales";
await bulk.WriteToServerAsync(dataTable);
ตัวเลือกการปรับแต่งทั่วไป ได้แก่ BatchSize, BulkCopyTimeoutและการแม็ปคอลัมน์ที่ชัดเจนซึ่ง Schema ต้นทางและเป้าหมายแตกต่างกัน
ตัวเลือกที่ 3: ใช้ Java SQLServerBulkCopy
ใช้ SQLServerBulkCopy ในบริการ Java ที่นําเข้าข้อมูลจากแหล่งข้อมูล JDBC หรือสตรีมข้อมูลในหน่วยความจํา มีพฤติกรรมการโหลดจํานวนมากคล้ายกับ bcp.exeแต่โดยตรงในโค้ดแอปพลิเคชัน
โฟลว์ทั่วไป:
- เปิดการเชื่อมต่อ JDBC ด้วย สายอักขระการเชื่อมต่อ คลังสินค้า โดยใช้การรับรองความถูกต้องของ Microsoft Entra
- สร้าง
SQLServerBulkCopyอินสแตนซ์และตั้งค่าsetDestinationTableName - (ไม่บังคับ) กําหนดค่า
SQLServerBulkCopyOptionsและการแม็ปคอลัมน์ - ระบุข้อมูลต้นฉบับเป็น
ResultSet,RowSetหรือISQLServerBulkRecord. - การโทร
writeToServerเพื่อนําเข้าข้อมูล
ตัวอย่าง:
try (SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(connectionString)) {
bulkCopy.setDestinationTableName("dbo.Sales");
bulkCopy.writeToServer(resultSet);
}
JDBC Bulk Copy API รองรับการเขียนจาก ResultSet, RowSetและ ISQLServerBulkRecord แหล่งที่มา
ข้อสังเกตเกี่ยวกับการสนับสนุนตัวเลือกการทําสําเนาจํานวนมาก
ส่วนนี้อธิบายว่าตัวเลือกการทําสําเนาจํานวนมากทั่วไปทํางานอย่างไรใน Fabric คลังข้อมูล ชื่อตัวเลือกจับคู่กับการตั้งค่าใน .NET SqlBulkCopyOptions, Java SQLServerBulkCopyOptionsและคําแนะนําการโหลดจํานวนมาก bcp ที่เกี่ยวข้อง
ตัวเลือกที่ไม่สามารถใช้งานได้
API ไคลเอ็นต์ทั่วไปยอมรับตัวเลือกต่อไปนี้ แต่สําเนาจํานวนมากใน Fabric คลังข้อมูล ละเว้นตัวเลือกเหล่านี้และใช้ลักษณะการทํางานของบริการเริ่มต้น:
CheckConstraintsTableLockKeepNullsFireTriggers
ข้อควรพิจารณาเกี่ยวกับประสิทธิภาพการทำงาน
ประสิทธิภาพการคัดลอกจํานวนมากขึ้นอยู่กับขนาดแบทช์และคุณภาพเครือข่ายการอัปโหลดไคลเอ็นต์เป็นอย่างมาก
ขนาดของชุดงาน
ขนาดแบทช์มีผลกระทบอย่างมากต่อปริมาณงาน แต่ละชุดงานมีค่าใช้จ่ายในการประมวลผลคงที่ ดังนั้นการส่งชุดงานขนาดเล็กมาก (ตัวอย่างเช่น หลายสิบหรือหลายร้อยแถว) สามารถลดประสิทธิภาพลงอย่างมากเมื่อโหลดชุดข้อมูลขนาดใหญ่
สําหรับการโหลดที่มากขึ้น ให้ใช้แบทช์ที่ใหญ่ขึ้น เป้าหมายในทางปฏิบัติคือประมาณ 150 MB ถึง 1 GB ต่อชุด
จุดเริ่มต้นที่ดีสําหรับปริมาณงานจํานวนมากคือ 250 MB ถึง 500 MB ต่อชุด จากนั้นปรับตามปริมาณงานและขีดจํากัดหน่วยความจําไคลเอ็นต์
คุณภาพการเชื่อมต่อการอัปโหลดไคลเอ็นต์
คัดลอกข้อมูลจํานวนมากจากไคลเอ็นต์ไปยังปลายทางคลังสินค้า หากแบนด์วิดท์การอัปโหลดมีจํากัดหรือเวลาแฝงของเครือข่ายสูง ปริมาณการประมวลผลการนําเข้าอาจลดลงแม้ว่าจะมีทรัพยากรคลังสินค้าก็ตาม
เพื่อประสิทธิภาพสูงสุด ให้เรียกใช้แอปพลิเคชันไคลเอ็นต์ในภูมิภาค Azure เดียวกันกับคลังสินค้า และใช้เส้นทางเครือข่ายแบนด์วิดท์สูงและเวลาแฝงต่ํา
เปรียบเทียบ BCP API กับ COPY INTO
- ใช้ BCP API เมื่อมีการสร้างหรือเก็บข้อมูลในระดับไคลเอ็นต์/แอปพลิเคชัน และจําเป็นต้องนําเข้าโดยตรง
- ใช้
COPY INTOเมื่อคุณสามารถจัดเตรียมไฟล์ในที่เก็บข้อมูลและต้องการเส้นทางฝั่งเซิร์ฟเวอร์หลักสําหรับการนําเข้าปริมาณงานสูงสุด