นําเข้าข้อมูลไปยังคลังสินค้าของคุณโดยใช้ BCP API (พรีวิว)

นําไปใช้กับ: < / c0 >< c1 / >คลังสินค้าใน Microsoft Fabric

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 ที่คล้ายกัน และคุณต้องการรักษาข้อตกลงไฟล์การคัดลอกจํานวนมากที่เข้ากันได้

โฟลว์ทั่วไป:

  1. เตรียมตารางเป้าหมายในคลังสินค้าของคุณ
  2. เตรียมไฟล์ต้นฉบับ (เช่น CSV) ด้วยลําดับคอลัมน์ที่ตรงกับเป้าหมาย หรือใช้ไฟล์รูปแบบ
  3. เรียกใช้ bcp ... in กับตําแหน่งข้อมูล SQL และฐานข้อมูลคลังสินค้าของคุณ
  4. ปรับแต่งตัวเลือก เช่น ขนาดแบทช์และตัวคั่นตามขนาดและรูปแบบไฟล์

ตัวอย่าง:

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 จํานวนมาก

โฟลว์ทั่วไป:

  1. เปิดการเชื่อมต่อ SQL ด้วย สายอักขระการเชื่อมต่อ คลังสินค้า โดยใช้การรับรองความถูกต้องของ Microsoft Entra
  2. สร้างSqlBulkCopyอินสแตนซ์และตั้งค่าDestinationTableName
  3. (ไม่บังคับ) เพิ่มการแม็ปคอลัมน์หากชื่อคอลัมน์ต้นทางและเป้าหมายหรือใบสั่งแตกต่างกัน
  4. ตั้งค่าคุณสมบัติที่เกี่ยวข้องกับประสิทธิภาพ เช่น BatchSize และBulkCopyTimeout
  5. โทร 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แต่โดยตรงในโค้ดแอปพลิเคชัน

โฟลว์ทั่วไป:

  1. เปิดการเชื่อมต่อ JDBC ด้วย สายอักขระการเชื่อมต่อ คลังสินค้า โดยใช้การรับรองความถูกต้องของ Microsoft Entra
  2. สร้างSQLServerBulkCopyอินสแตนซ์และตั้งค่าsetDestinationTableName
  3. (ไม่บังคับ) กําหนดค่า SQLServerBulkCopyOptions และการแม็ปคอลัมน์
  4. ระบุข้อมูลต้นฉบับเป็น ResultSet, RowSetหรือ ISQLServerBulkRecord.
  5. การโทร 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 คลังข้อมูล ละเว้นตัวเลือกเหล่านี้และใช้ลักษณะการทํางานของบริการเริ่มต้น:

  • CheckConstraints
  • TableLock
  • KeepNulls
  • FireTriggers

ข้อควรพิจารณาเกี่ยวกับประสิทธิภาพการทำงาน

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

ขนาดของชุดงาน

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

สําหรับการโหลดที่มากขึ้น ให้ใช้แบทช์ที่ใหญ่ขึ้น เป้าหมายในทางปฏิบัติคือประมาณ 150 MB ถึง 1 GB ต่อชุด

จุดเริ่มต้นที่ดีสําหรับปริมาณงานจํานวนมากคือ 250 MB ถึง 500 MB ต่อชุด จากนั้นปรับตามปริมาณงานและขีดจํากัดหน่วยความจําไคลเอ็นต์

คุณภาพการเชื่อมต่อการอัปโหลดไคลเอ็นต์

คัดลอกข้อมูลจํานวนมากจากไคลเอ็นต์ไปยังปลายทางคลังสินค้า หากแบนด์วิดท์การอัปโหลดมีจํากัดหรือเวลาแฝงของเครือข่ายสูง ปริมาณการประมวลผลการนําเข้าอาจลดลงแม้ว่าจะมีทรัพยากรคลังสินค้าก็ตาม

เพื่อประสิทธิภาพสูงสุด ให้เรียกใช้แอปพลิเคชันไคลเอ็นต์ในภูมิภาค Azure เดียวกันกับคลังสินค้า และใช้เส้นทางเครือข่ายแบนด์วิดท์สูงและเวลาแฝงต่ํา

เปรียบเทียบ BCP API กับ COPY INTO

  • ใช้ BCP API เมื่อมีการสร้างหรือเก็บข้อมูลในระดับไคลเอ็นต์/แอปพลิเคชัน และจําเป็นต้องนําเข้าโดยตรง
  • ใช้ COPY INTO เมื่อคุณสามารถจัดเตรียมไฟล์ในที่เก็บข้อมูลและต้องการเส้นทางฝั่งเซิร์ฟเวอร์หลักสําหรับการนําเข้าปริมาณงานสูงสุด