Convert CSV sang SQL

Hello anh em, lâu rồi mình không viết bài trên cái trang này, hôm nay trong lúc không có task từ bên phía khách hàng mình viết bài này để anh em nghiên cứu và áp dụng.

Chuyện là hôm trước mình có nhận 1 task từ khách hàng đó là chuyển file CSV sang file SQL, cũng không hiểu để làm gì, tuy nhiên cũng đã có giải pháp cho nó ở thời điểm đó.

Phương án ban đầu

Trước câu hỏi, ai có thể convert CSV sang SQL? của ông CTO thì không thấy ai lên tiếng, tự nhiên có 1 thằng dev nó bảo, tao nghĩ là cái này đã có tool rồi rồi sau đó nó gửi cho team cái link này convertcsv.com/csv-to-sql.htm sau đó nó gửi kèm 1 file SQL mà nó vừa convert cho. Ok xong cuối cùng cũng đã có giải pháp giờ thì ai làm?

Trong thời điểm đó mình không có task để làm, nên ông CTO bảo mày dùng tools này để convert được không? Mình ok ngay vì rất hiếm khi từ chối, ai bảo họ trả tiền theo giờ làm gì 😀

Rồi mình tải file zip của thanh niên đó về và giải nén ra thì ối dồi ôi, có tới 9480 files vậy thì convert tới bao giờ?

Mà mình có tìm package của PHP để giải quyết vấn đề này thì không thấy đâu, chắc dễ quá không ai làm hay sao ý.

Vấn đề mình gặp phải

Mình định chỉ dùng cái trang đó để convert files ra thôi, thấy cũng ok, việc không có thì làm túc tắc vậy, và lúc bấy giờ trong đầu mình suy nghĩ, để mà ngồi viết script thì không biết bao giờ xong, vậy thì ngồi làm luôn có khi lại ngon, vì đằng nào script đó viết rồi cũng không dùng tới nữa. Không nghĩ ngợi nhiều như các task khác mình lao vào làm luôn và cũng convert được 500 files, trong vòng hơn 2 tiếng.

Vừa convert vừa nghĩ, mình là dev, mà dev là phục vụ cuộc sống vậy tại sao mình phải khổ thế này cơ chứ? Rồi mình lại nghĩ, làm éo gì có việc ngồi convert rồi tính tiền cũng được.

Rồi được 1 lúc thằng Techlead hỏi, mày có phương án gì khác không? Vì trước đó mình có kêu, phải có phương án gì chứ? 9k files thế này về lâu dài chắc éo ổn. Mà mình convert và chạy thử files SQL đã convert thì chúng nó không work vì lý do là trùng tên cột, tên cột có ký tự đặc biệt. Sau đó thằng Techlead đã vứt cho mình 1 đoạn script bằng NodeJs ( cái NodeJs này thì mình hiện tại chưa dùng nhiều ) convert thử thì còn tệ hơn dùng cái tool kia.

Giải pháp

Thôi làm cả hơn 2 tiếng mới đc 500 files vậy thì tính ra cũng mất kha khá thời gian để convert hết 9k files đó, vậy là mình quyết định dùng script của techlead, nhưng nó lại cùi quá dùng npm package nên mình không chỉnh sửa gì nhiều, mà có sửa cũng đếch biết sửa như dùng PHP, nên mình tự viết cho nó ok.

Thế là mình mang PHP thần thánh ra viết, bắt đầu từ câu lệnh tạo bảng, rồi tới câu lệnh insert dữ liệu, xử lý trùng tên cột, kiểu dữ liệu …

Và sản phẩm cuối cùng đã hoàn thiện sau 4 tiếng sau đó, chạy ngon lành, mình cũng đã xử lý các thứ và import thử file SQL, work ngon lành anh em ak.

Đây là link repo nhé: https://github.com/binjuhor/csvtosql anh em có task tương tự thì ném file CSV vào trong thư mục CSV rồi chạy file index.php là được. Có thời gian mình lại update thêm cho nó thành composer package cho anh em dùng.

Tổng kết

Nếu convert dưới 500 files thì chắc dùng tool ok, nhưng 9k files như mình thì khuyên là nên dùng script vì nó nhanh hơn rất nhiều, mà dùng script thì mới có case study để viết bài cho anh em chứ.

Anh em sài thử và cho mình ý kiến nhé, nếu có đóng góp vui lòng cứ tạo issue trên github, có thời gian mình sẽ vào xử lý.

Trả lời

Email của bạn sẽ không được hiển thị công khai.

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.