Database Bulk Copy

Database Bulk Copy

SQL Bulk Copy เป็นส่วนที่ช่วยในการ Insert ข้อมูลขนาดใหญ่ลงตารางได้รวดเร็วมากขึ้น ถ้าเป็นเมื่อก่อนในการจะ Insert ข้อมูลขนาดใหญ่ลงตารางแต่ละครั้งนั้นเราจะเขียน Code ให้ทำการอ่านข้อมูลแล้วค่อย Insert ทีละรายการเองจนกว่าจะครบทุกรายการ แต่การ Insert ทีละรายการเองด้วยข้อมูลขนาดใหญ่นั้นก็ส่งผลความล่าช้าในการ Insert เช่นกัน ทาง AtlasX จึงมีตัวช่วยในการ Insert ข้อมูลขนาดใหญ่นี้ที่ชื่อว่า BulkCopy มาใช้งาน

Note

AtlasX Version Support

  • AtlasX Web Service v1.1.1 เป็นต้นไป
  • AtlasX Engine v1.2.0 เป็นต้นไป

ตัวอย่างการใช้งาน

  1. ทำการ Inject IDbDataAccessService เข้ามาในฟังก์ชัน Constuctor
using AtlasX.Engine.Connector.Services; <em>// <-- namespace ของ IDbDataAccessService</em>
using AtlasX.Engine.Extensions; <em>// <-- นำมาใช้แปลง List เป็น DataTable</em>
using CsvHelper; <em>// <-- นำมาช่วยอ่านไฟล์ CSV, เวอร์ชัน 15.0.5</em>
...

namespace MyWebService.Controllers
{
  [Route("api/[controller]")]
  [ApiController]
  public class MyBulkCopyController : ControllerBase
  {
    private readonly IDbDataAccessService _dbDataAccessService;
    private readonly IWebHostEnvironment _hostingEnvironment;

    public MyBulkCopyController(
      IDbDataAccessService dbDataAccessService, <em>// <-- Inject DbDataAccessService</em>
      IWebHostEnvironment hostingEnvironment
    )
    {
      _dbDataAccessService = dbDataAccessService;
      _hostingEnvironment = hostingEnvironment;
    }
  }

  ...

}
  1. อ่านไฟล์ CSV แล้วแปลงเป็น DataTable (สามารถใช้วิธีอื่นได้)
// สร้างพาทของไฟล์ CSV ที่มีข้อมูล 100,000 รายการ
string filePath = _hostingEnvironment.ContentRootPath;
filePath = Path.Join(filePath, "Data", "yellow_tripdata_2019-12_100000.csv");

List<YellowTripData> csvData;
DataTable dataTable = null;


using (var reader = new StreamReader(filePath, Encoding.UTF8))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
  // อ่านข้อมูลในไฟล์ CSV แล้วสร้างเป็น List
  csvData = csv.GetRecords<YellowTripData>().ToList();
  // แปลง List เป็น DataTable
  dataTable = csvData.ToDataTable<YellowTripData>();
}
  1. เรียกใช้งานฟังก์ชัน BulkCopy()
string destinationTableName = "TEST_BULK_COPY";
_dbDataAccessService.BulkCopy(destinationTableName, dataTable);

อื่น ๆ

  • ชื่อฟิลด์และประเภทข้อมูล(Data Type) แต่ละคอลัมน์ในตารางและโมเดลไฟล์ CSV ต้องตรงกัน
  • สามารถทำ Column Mapping เพื่อเลือกเอาเฉพาะ Column ที่ต้องการ Insert ลงตารางได้