Informix LOAD FROM file dengan header

Saya menggunakan perintah Informix LOAD FROM untuk memasukkan data secara massal dari file CSV ke tabel DB, seperti:

LOAD FROM "file.csv" DELIMITER ";" INSERT INTO table_name(col1, col2, col3)

Masalahnya, baris pertama setiap file CSV berisi header kolom. Apakah ada cara untuk memberi tahu Informix bahwa baris pertama harus diabaikan?


person andreask    schedule 12.02.2015    source sumber


Jawaban (2)


TIDAK; tidak ada cara untuk memberi tahu Informix standar Pernyataan LOAD untuk melewati baris header. Perhatikan juga bahwa ini tidak akan menghapus tanda kutip dari sekitar bidang dalam format CSV dan sebaliknya menangani hal-hal seperti yang diharapkan secara resmi oleh format CSV (meskipun, karena Anda memiliki nilai yang dipisahkan titik koma dan bukan nilai yang dipisahkan koma, sulit untuk mengetahui aturan mana yang diikuti — berhati-hatilah terhadap perlakuan garis miring terbalik juga).

Anda mungkin dapat menggunakan utilitas Informix DB-Load (dbload) sebagai gantinya; itu tergantung pada apakah data Anda hanya menggunakan ; sebagai pengganti pembatas | default Informix, atau apakah Anda memiliki lebih banyak semantik CSV seperti tanda kutip di sekitar bidang yang perlu dihapus. Jika Anda ingin menjadi lebih eksotik, Informix High-Performance Loader (HPL) dapat menanganinya secara asli atau dilatih untuk menanganinya.

Alternatifnya, Anda dapat mempertimbangkan untuk menggunakan* SQLCMD< saya /a> program (disebut sqlcmd lebih lama dari Microsoft johnny-come-lately dengan nama yang sama) yang memungkinkan Anda menentukan:

LOAD FROM "file.csv" DELIMITER ";" SKIP 1 INSERT INTO table_name(col1, col2, col3);

SQLCMD juga memiliki opsi FORMAT CSV (di antara format lain) yang mungkin relevan atau tidak. Ini menangani hal-hal seperti menghapus kutipan dari sekitar bidang yang didukung penuh oleh standar CSV.

Anda harus menginstal Informix ClientSDK dan kompiler C (dan sistem pengembangan C lainnya) untuk membangun SQLCMD.

* Karena SQLCMD adalah program saya karena saya yang menulisnya, rekomendasi apa pun untuk menggunakannya pada dasarnya bias; Anda telah diperingatkan.


Anda juga dapat mempertimbangkan 'tabel eksternal' (CREATE EXTERNAL TABLE), tapi saya tidak yakin ini lebih baik daripada pernyataan LOAD baik dengan format yang didukungnya atau dengan kemampuan untuk melewati baris data pertama.

person Jonathan Leffler    schedule 12.02.2015
comment
Terimakasih atas klarifikasinya! File yang saya gunakan tidak terlalu mengikuti format CSV standar, tetapi karena hanya berisi angka dan beberapa tanggal, saya tidak mengkhawatirkan masalah format. Bagaimanapun, saya pasti akan melihat SQLCMD, terima kasih atas petunjuknya! - person andreask; 12.02.2015

Ketika saya memuat file CSV menggunakan LOAD FROM ke Informix, saya biasanya memuat ke tabel sementara yang semuanya merupakan kolom karakter yang kemudian saya kerjakan. Anda cukup menghapus baris header. Pada dasarnya Anda hanya memasukkan seluruh file ke dalam tabel temp yang lebih mudah untuk dikerjakan.

person SupermanKelly    schedule 20.01.2017