Meminta file CSV

30

Adakah yang tahu tentang alat sederhana yang akan membuka file CSV dan membiarkan Anda melakukan pertanyaan SQLesque yang mendasarinya? Seperti alat grafis, yang mudah digunakan.

Saya tahu saya bisa menulis skrip kecil untuk melakukan impor CSV ke dalam database SQLite, tetapi karena saya membayangkan orang lain memikirkan hal ini sebelum saya, saya hanya ingin menanyakan apakah ada. Apa yang mendorong pertanyaan ini adalah saya merasa frustrasi dengan kemampuan penyaringan terbatas Excel.

Mungkin beberapa alat manipulasi visualisasi data lainnya akan menyediakan fungsionalitas serupa.

Gratis atau OSS lebih disukai, tetapi saya terbuka untuk saran.

EDIT:

Saya benar-benar lebih suka beberapa tutorial yang jelas tentang bagaimana melakukan di bawah ini bukan hanya "membuat lembar Anda entri ODBC" atau "menulis program menggunakan file ODBC", atau lebih banyak ide pada aplikasi untuk digunakan. Catatan: Saya tidak bisa menggunakan MS Access.

EDIT lain:

Saya masih terbuka untuk solusi menggunakan SQLite. Platform saya adalah laptop Win2k semi-kuno, dengan P4 di atasnya. Ini cukup lambat, jadi solusi sumber daya cahaya sangat ideal dan kemungkinan akan menang.

J. Polfer
sumber
Hanya untuk memastikan: Anda masih terbuka untuk solusi menggunakan SQLite? (Seperti menggunakan perintah .separator dan .import?) Dan di platform apa Anda?
Arjan
Karena penasaran: Mengapa Anda tidak bisa menggunakan MS Access?
Ludwig Weinzierl
@ Arjan - Saya masih terbuka untuk solusi menggunakan SQLite. Platform saya adalah lappy Win2k semi-kuno, dengan P4 di atasnya. Ini cukup lambat, jadi solusi sumber daya cahaya sangat ideal dan kemungkinan akan menang.
J. Polfer
2
@ fretje - Anda tidak boleh memiliki pengalaman dengan SQLite. Total 1MB dalam kode sumber. Ini digunakan pada ponsel. Executable Win32 (mesin dan semua) adalah 300KB.
J. Polfer
1
@sheepsimulator: Saya tahu ini ringan, tapi maksud saya masih berdiri ... Akses ODBC ke file teks pada dasarnya tergabung dalam OS, sementara dengan SQLite Anda masih harus menginstal sesuatu terlebih dahulu dan mengimpor file csv ke dalam database. Menginstal tidak ada yang masih kurang dari menginstal sesuatu yang sangat kecil, bukan?
fretje

Jawaban:

13

Sudahkah Anda mencoba LogParser ?

Log parser adalah alat yang kuat dan serbaguna yang menyediakan akses permintaan universal ke data berbasis teks seperti file log, file XML dan file CSV, serta sumber data utama pada sistem operasi Windows® seperti Event Log, Registry, sistem file, dan Active Directory®. Anda memberi tahu Log Parser informasi apa yang Anda butuhkan dan bagaimana Anda ingin memprosesnya. Hasil kueri Anda dapat diformat khusus dalam output berbasis teks, atau mereka dapat bertahan untuk target yang lebih khusus seperti SQL, SYSLOG, atau bagan.

Sebagian besar perangkat lunak dirancang untuk menyelesaikan sejumlah tugas tertentu. Log Parser berbeda ... jumlah cara yang dapat digunakan hanya dibatasi oleh kebutuhan dan imajinasi pengguna. Dunia adalah basis data Anda dengan Log Parser.

Sebuah tutorial (dan satu lagi ) menggunakan SQL seperti permintaan bahasa dengan file CSV Saya menemukan menggunakan google .

Contoh Pertanyaan:

logparser -i:CSV "SELECT TOP 10 Time, Count INTO c:\logparser\test\Chart.GIF 
FROM c:\logparser\test\log.csv ORDER by Time DESC" -charttype:bar3d
svandragt
sumber
Dukungan forum dan banyak pertanyaan Anda akan dijawab di forums.iis.net/default.aspx?GroupID=51 yang merupakan forum
pencatat
2
Lebih banyak contoh di codinghorror.com/blog/archives/000369.html Nice; Sayang sekali hanya Windows.
Arjan
34

Saya pikir Database OpenOffice.org dapat melakukan apa yang Anda inginkan. Ini berfungsi seperti ini.

  1. Mulai Open Office.org Database, ini menunjukkan " Database Wizard "

  2. Pilih " Sambungkan ke database yang ada: Teks "

    masukkan deskripsi gambar di sini

  3. Tentukan path ke file teks serta detail seperti karakter pemisah dll.

    masukkan deskripsi gambar di sini

  4. Buat dan jalankan Pertanyaan

    masukkan deskripsi gambar di sini

Jika Anda pernah bekerja dengan Microsoft Access, Anda akan menemukan GUI familier.


Jika Anda dapat melakukannya tanpa GUI selalu ada perintah UNIX tradisional. Saya sering menggunakannya untuk melakukan pertanyaan sederhana ke file CSV (kecil). Inilah cara kerjanya:

clause      operation   command
-------------------------------
from             join     `join`
where     restriction     `grep`
order by           --     `sort`
group by  restriction      `awk`
having    restriction     `grep`
select     projection      `cut`
distinct  restriction     `uniq`
limit     restriction     `head`
offset    restriction     `tail`
Ludwig Weinzierl
sumber
Wow, jawaban yang bagus! +1
theycallmemorty
Ini seperti triknya saja. Saya akan melihat apakah saya bisa OO Base ke lappy penuaan ini.
J. Polfer
+1. Keren! Tidak repot-repot menjelajahi OO. Selalu berpikir MS O memiliki keunggulan!
Swanand
sakit! bagaimana kinerja untuk file besar. Saya di bioinformatika dan memiliki sampah tab-delimited besar
user2751
@ 1alstew1: Untuk file besar saya akan menjauh dari kedua metode dan menggunakan database nyata. Pastikan juga untuk menggunakan impor batch (LOAD) untuk mendapatkan data ke dalam basis data Anda, ini jauh lebih cepat daripada INSERT.
Ludwig Weinzierl
13

Anda dapat menggunakan ODBC untuk meminta file teks:

Mengakses File Teks menggunakan Penyedia Data ODBC

Perhatikan bahwa Anda tidak memerlukan MS Access agar ini berfungsi, tutorial di tautan di atas hanya menggunakan MS Access untuk membuat file teks, tetapi karena Anda sudah memiliki file teks, gulir ke bawah setengah, dan mulai tutorial di mana Anda melihat judul Mengakses File Teks .

Pembaruan : Saya membuat DSN pada file .csv sendiri untuk dapat membuat tutorial langkah demi langkah ... ini dia:

  • Pastikan file .csv Anda berada di direktori sendiri tanpa ada yang lain.
  • Buka "ODBC Data Source Administrator" (panel kontrol - mulai - alat administratif - Sumber Data (ODBC)).
  • Buka tab File DSN dan klik "Tambah ...".
  • Pilih "Microsoft Text Driver (* .txt, * .csv) dari daftar dan klik" Next> ".
  • Beri nama untuk sumber data file Anda (mis. "Test") dan klik "Next>".
  • Klik "Selesai" (Setelah ini, sebuah dialog akan muncul di mana bidang "Nama sumber data" dan "Deskripsi" memang diklik. Ini normal. Tidak perlu khawatir.
  • Hapus centang pada kotak centang "Gunakan Direktori Saat Ini". Tombol "Pilih Direktori" akan diaktifkan.
  • Klik tombol "Pilih Direktori" dan arahkan ke folder tempat Anda meletakkan file .csv di langkah pertama.
  • Klik pada tombol "Opsi >>".
  • Klik tombol "Tentukan Format ...".
  • Di daftar "Tabel" di sebelah kiri, pilih file .csv Anda dan klik tombol "Tebak". (Ini akan menganalisis file csv Anda dan membuat bidang yang sesuai untuk setiap kolom dalam file .csv Anda.)
  • Pergi melalui kolom yang dihasilkan (F1, F2, ...) di daftar yang tepat, beri mereka nama yang bermakna dan atur tipe data yang sesuai (kadang-kadang menebak tidak selalu benar).
  • Setelah semuanya diatur dengan benar, klik "OK" (2 kali).

Pada titik ini Anda harus memiliki file DSN yang dengannya Anda dapat mengakses file .csv Anda melalui ODBC. Jika Anda memeriksa folder di mana file .csv ditempatkan, Anda akan melihat file schema.ini, yang berisi konfigurasi yang baru saja Anda buat. Ketika Anda memiliki banyak file .csv, masing-masing berkorespondensi dengan sebuah tabel dan setiap tabel akan memiliki blok [ nama file .csv] di file schema.ini di mana kolom yang berbeda didefinisikan ... Anda juga dapat membuat / mengubah skema itu File .ini langsung dalam editor teks sebagai pengganti menggunakan GUI yang dijelaskan di atas.

Adapun pertanyaan tambahan Anda "bagaimana menghubungkan ke penyedia ODBC ini menggunakan alat permintaan":
Saya memiliki alat yang saya tulis sendiri sejak lama yang tidak memenuhi syarat untuk publikasi. Tapi pencarian Google cepat datang dengan odbc-view , alat freeware yang melakukan apa yang Anda inginkan.
Saya mengunduh dan menginstal alat ini.
Setelah memulai alat:

  • Klik pada "DataSource ...".
  • Pilih Sumber Data File Anda yang Anda buat sebelumnya (mis. "Test").
  • Di panel permintaan, ketik "select * from [ filename .csv]".
  • Klik "Jalankan".

Anda harus melihat konten file .csv Anda di panel bawah sekarang.
Semoga ini bisa membantu ... Beri tahu saya bagaimana Anda melakukannya atau jika Anda memerlukan bantuan lebih lanjut.

fretje
sumber
@ fretje - Saya tahu saya tidak perlu MS Access untuk ini berfungsi, saya mencobanya sendiri. Saya mengalami dua masalah dengan ini: 1. Saya ingin memiliki GUI, atau utilitas CLI yang dapat saya gunakan untuk meminta CSV-DB ketika saya selesai. Tutorial yang Anda kutip di atas tidak mencantumkan semua itu, mengasumsikan Anda ingin mengakses database ODBC ini dengan menulis aplikasi .NET. 2. Dengan PC saya akan menggunakan solusi ini, saya tidak berpikir setup ODBC saya cukup untuk mengikuti solusi ini. Saya tidak bisa memberi nama DSN saya pada waktu pembuatan penyedia data ODBC, kotak itu diklik. Mungkin masalah pengaturan sistem.
J. Polfer
@ fretje - jika Anda bisa menjelaskan cara menyambung ke penyedia ODBC ini menggunakan alat kueri, itu akan menyenangkan; Saya tidak tahu bagaimana melakukannya. Sedang mencari jawaban untuk semua.
J. Polfer
8

Saya suka menggunakan R untuk mengakses file csv dengan cara cepat. Meskipun bahasanya tidak langsung SQL, Anda bisa melakukan semua itu dengan perintah sederhana di R. R juga memberi Anda kemampuan untuk membuat grafik yang bagus dan banyak kekuatan lainnya.

Kristen
sumber
5

Anda selalu dapat membaca file ke dalam Excel dan menggunakan Excel sebagai sumber data Anda melalui ODBC dan menjalankan kueri terhadapnya.

m.floryan
sumber
Saya bisa? Ini kedengarannya seperti sihir hitam. Bisakah Anda menemukan tautan untuk tutorial?
J. Polfer
2
@sheepsimulator: Excel hanya membuka file csv ... setelah Anda memiliki file excel, Anda dapat menanyakannya dengan ODBC sama seperti Anda dapat meminta file teks (lihat jawaban saya di bawah).
fretje
5

Saya menemukan bahwa cara paling sederhana untuk mencapai ini adalah dengan hanya menggunakan fungsionalitas impor CSV bawaan SQLite:

  1. sqlite3 mydatabase.sqlite
  2. sqlite> .mode csv
  3. sqlite> .import mydata.csv <tablename>

Sekarang Anda memiliki database yang berfungsi yang dapat Anda query sesuka Anda. Saya juga menemukan kinerja di atas baik, saya hanya mengimpor tiga juta baris dalam 10-15 detik.

Markus Amalthea Magnuson
sumber
3

Saya menemukan aplikasi kecil non-grafis yang melakukan ini: csvsql .

Dokumentasi ada di sini .

Stefan Thyberg
sumber
Ini adalah persis jenis aplikasi yang saya cari, walaupun alangkah baiknya jika memiliki GUI. Sayangnya, saya benar-benar tidak memiliki cara yang baik sekarang untuk mengkompilasinya untuk kotak Win2k. Akan kembali padamu. Juga, penulis tidak menggunakan automake atau sesuatu yang bagus seperti itu sehingga untuk mengkompilasi akan memerlukan beberapa jiggerypokery.
J. Polfer
Sangat sulit untuk menemukan dan itu adalah satu-satunya hal yang dapat saya temukan dekat dengan apa yang Anda gambarkan. Mungkin ide seseorang untuk menulis aplikasi yang dapat mengimpor file teks dan menjalankan SQL-queries pada mereka menggunakan, misalnya, SQL Lite?
Stefan Thyberg
1
sqlite3(aplikasi command-line yang membaca database SQLite) memiliki dukungan built-in untuk mengimpor file - lihat perintah .separator dan .import di sqlite.org/sqlite.html
Arjan
1
Ya, saya melihatnya disebutkan beberapa kali dalam jawaban, tetapi saya lebih memikirkan aplikasi seperti notepad dengan jendela permintaan.
Stefan Thyberg
3

Anda dapat melihat alat gratis q - Teks sebagai Database , yang memungkinkan mengeksekusi SQL langsung pada file csv, termasuk bergabung, pengelompokan dan konstruksi SQL lainnya. Juga termasuk deteksi otomatis nama kolom dan jenis kolom.

Ini adalah alat baris perintah yang cocok dengan cara operasi Linux (misalnya Perpipaan dari stdin jika diperlukan, bendera khusus untuk menyesuaikan perilaku, dll.).

Menggunakan sqlite di belakang layar, sehingga sangat ringan dan mudah digunakan.

Pengungkapan penuh - Ini alat open source saya sendiri. Semoga bermanfaat

Harel Ben-Attia

Harel Ben Attia
sumber
Alat ini benar-benar luar biasa!
Dawid Ferenczy Rogožan
2

Alat yang saya temukan bahwa, saya pikir, dapat membuat ini lebih mudah di masa depan adalah Penyelesai Satu .

Ini spreadsheet yang menghasilkan kode Python yang mudah dimodifikasi. Bagi mereka yang merupakan pengembang, dan kadang-kadang perlu "mundur" untuk menyelesaikan masalah dalam spreadsheet, ini sepertinya cara intuitif untuk memecahkan masalah spreadsheet-esque dalam bahasa yang mereka kenal.

Dan itu memberi saya alasan untuk menggunakan Python. Python membuatku senang.

J. Polfer
sumber
2

Driver H2 JDBC menyediakan fungsi csvread yang sangat berguna, memungkinkan Anda untuk melakukan hal-hal seperti berikut:

select * from csvread(test1.csv) test1 
inner join csvread(test2.csv2) test2
on test1.id = test2.foreignkey

Ada berbagai cara untuk menggunakan driver ini tanpa harus mempelajari kode penulisan untuk menggunakannya.

Secara pribadi, saya lebih suka Squirrel SQL Client yang memberi Anda GUI yang bagus untuk menjalankan kueri. Untuk menggunakannya, Anda hanya perlu mengarahkan H2 In-Memoryclasspath Driver yang sudah terdaftar ke driver H2 yang telah Anda unduh. Setelah Anda menyiapkan alias yang sesuai menggunakan driver Anda dapat menjalankan SQL acak apa pun yang Anda inginkan. Hasilnya ditampilkan dalam tabel yang bagus dan segala macam fitur lain untuk mengimpor, mengekspor, dll.

Atau, Anda dapat menggunakan Groovy untuk menulis skrip cepat untuk memuat dan menggunakan driver sebagaimana diperlukan. Lihat contoh blogpost ini untuk mengetahui caranya.

Tampaknya seseorang telah memperluas skrip groovy di atas dan membuatnya menjadi alat baris perintah yang bagus untuk menjalankan kueri, lihat gcsvsql. Dengan ini, Anda dapat menjalankan perintah seperti berikut:

gcsvsql "select * from people.csv where age > 40"
lstg
sumber
2

Anda mungkin ingin mencoba Q alat . Ini sangat ringan, hanya membutuhkan Python 2.5 atau lebih baru.

agrrd
sumber
2

Saya telah menulis program baris perintah untuk mengeksekusi SQL sewenang-wenang pada file csv, termasuk multi-file joins, disebut gcsvsql. Anda dapat membacanya di sini:

http://bayesianconspiracy.blogspot.com/2010/03/gcsvsql.html

Ada proyek Google Code untuk itu di sini: http://code.google.com/p/gcsvsql/

Itu ditulis dalam Java / Groovy, dan akan berjalan di mana saja Java tersedia.

Sunting: Proyek aktif dipindahkan ke github. https://github.com/jdurbin/durbinlib

James Durbin
sumber
1

Dua opsi lagi untuk tugas ini: querycsv dan fsql . Querycsv adalah Python dan menggunakan sqlite3. Fsql adalah Perl dan menggunakan DBD :: CSV .

Nelson
sumber
0

Meskipun tidak gratis, program terbaik yang saya temukan untuk ini adalah File Query . Tidak seperti solusi lain yang berbasis baris perintah, atau mengharuskan mengimpor / mengatur file sebelum mengaksesnya, File Query memungkinkan Anda membuka file (bahkan GB inup seperti editor teks biasa, dan secara otomatis akan mengurai tata letak untuk Anda, dan membiarkan Anda melakukan hampir semua permintaan Anda dari dialog sederhana.

Agak mahal, tetapi jika Anda hanya perlu melakukan sesuatu sekali, Anda selalu dapat menggunakan uji coba 30 hari secara gratis. Mereka juga memiliki panduan hebat dan bahkan video untuk Anda mulai.

Jeffrey Harmon
sumber
0

Anda bisa menggunakan WHS. Sebagai contoh, saya memiliki 4 file di direktori 'C: \ Users \ user837 \ Desktop \ t4': 1.txt

id;sex_ref;sale
1;1;10
2;2;30
3;1;20

2.txt

sex_id;name
1;male
2;female

schema.ini

[1.txt]
Format=Delimited(;)
ColNameHeader=True
MaxScanRows=50
DecimalSymbol=,
[2.txt]
Format=Delimited(;)
ColNameHeader=True
MaxScanRows=50
DecimalSymbol=,

dan Hello.js

WScript.Echo("Hello World!");
var cn = new ActiveXObject("ADODB.Connection");
cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Users\\user837\\Desktop\\t4\";Extended Properties=\"text;HDR=NO;FMT=Delimited\"");

var rs = cn.Execute("select * from 1.txt as t1 left join 2.txt as t2 on t1.sex_ref = t2.sex_id");

while (!rs.EOF) 
{
    WScript.Echo(           rs.Fields("id").Value
                  + "###" + rs.Fields("sex_ref").Value
                  + "###" + rs.Fields("name").Value
                );
    rs.moveNext();
}

Sekarang cukup klik dua kali pada Hello.js dan Anda akan melihat sql reqult baris demi baris. Lihat dokumentasi WHS untuk melihat semua hasil permintaan.

Oleg
sumber