Database Bulk Copy
SQL Bulk Copy เป็นส่วนที่ช่วยในการ Insert ข้อมูลขนาดใหญ่ลงตารางได้รวดเร็วมากขึ้น ถ้าเป็นเมื่อก่อนในการจะ Insert ข้อมูลขนาดใหญ่ลงตารางแต่ละครั้งนั้นเราจะเขียน Code ให้ทำการอ่านข้อมูลแล้วค่อย Insert ทีละรายการเองจนกว่าจะครบทุกรายการ แต่การ Insert ทีละรายการเองด้วยข้อมูลขนาดใหญ่นั้นก็ส่งผลความล่าช้าในการ Insert เช่นกัน ทาง AtlasX จึงมีตัวช่วยในการ Insert ข้อมูลขนาดใหญ่นี้ที่ชื่อว่า BulkCopy มาใช้งาน
Note
AtlasX Version Support
AtlasX Web Servicev1.1.1 เป็นต้นไปAtlasX Enginev1.2.0 เป็นต้นไป
ตัวอย่างการใช้งาน
- ทำการ 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;
}
}
...
}- อ่านไฟล์ 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>();
}- เรียกใช้งานฟังก์ชัน
BulkCopy()
string destinationTableName = "TEST_BULK_COPY";
_dbDataAccessService.BulkCopy(destinationTableName, dataTable);อื่น ๆ
- ชื่อฟิลด์และประเภทข้อมูล(Data Type) แต่ละคอลัมน์ในตารางและโมเดลไฟล์ CSV ต้องตรงกัน
- สามารถทำ Column Mapping เพื่อเลือกเอาเฉพาะ Column ที่ต้องการ Insert ลงตารางได้