CSV dosyasını sorgulama


30

CSV dosyasını açan ve üzerinde temel SQLesque sorguları yapmanıza izin veren basit bir araç bilen var mı? Bir grafik aracı gibi kullanımı kolay bir araç.

CSV'nin bir SQLite veritabanına aktarılması için küçük bir senaryo yazabileceğimi biliyorum, ama benden önce başka birinin düşündüğünü düşündüğümden, sadece birinin olup olmadığını sormak istedim. Bu soruyu soran şey, Excel'in sınırlı filtreleme yeteneklerinden bıktığım.

Belki başka bir veri görselleştirme manipülasyon aracı da benzer işlevsellik sağlayacaktır.

Ücretsiz ya da OSS tercih edilir, ancak herhangi bir öneriye açığım.

DÜZENLE:

Yalnızca "sayfanızı ODBC girişi yapmak" veya "ODBC dosyalarını kullanarak programlar yazmak" veya uygulamalar hakkında daha fazla fikir vermek yerine, aşağıdakileri nasıl yapacağınıza ilişkin bazı açık dersleri tercih ederim. Not: MS Access kullanamıyorum.

Yine başka bir EDIT:

SQLite kullanan çözümlere hala açığım. Platformum, üzerinde P4 bulunan yarı antik bir Win2k dizüstü bilgisayarı. Oldukça yavaş, bu nedenle kaynak-ışıklı bir çözüm idealdir ve muhtemelen kazanacaktı.


Emin olmak için: SQLite kullanan çözümlere hala açıksınız? (.Separator ve .import komutlarını kullanmak gibi mi?) Peki hangi platformdasınız?
Arjan

Sadece meraktan: Neden MS Access'i kullanamıyorsun?
Ludwig Weinzierl

@ Arjan - Hala SQLite kullanan çözümlere açığım. Platformum, üzerinde P4 bulunan yarı antik bir Win2k lappy. Oldukça yavaş, bu nedenle kaynak-ışıklı bir çözüm idealdir ve muhtemelen kazanacaktı.
J. Polfer

2
@ fretje - SQLite ile ilgili deneyiminiz olmamalıdır. Kaynak kodda toplam 1 MB. Cep telefonlarında kullanılır. Win32 çalıştırılabilir (motor ve tüm) 300KB.
J. Polfer

1
@sheepsimulator: Hafif olduğunu biliyorum, ama benim açımdan hala geçerli ... Metin dosyalarına ODBC erişimi temel olarak işletim sistemine dahil edilirken, SQLite ile hala önce bir şey yüklemeniz ve csv dosyasını bir veritabanına almanız gerekir. Hiçbir şey yüklemek, hala çok küçük bir şeyi yüklemekten daha az değildir, değil mi?
fretje

Yanıtlar:


13

LogParser'ı denediniz mi?

Günlük ayrıştırıcısı, Günlük dosyaları, XML dosyaları ve CSV dosyaları gibi metin tabanlı verilere ve Olay Günlüğü, Kayıt Defteri gibi Windows® işletim sistemindeki önemli veri kaynaklarına evrensel veri erişimi sağlayan, çok yönlü bir araçtır. dosya sistemi ve Active Directory®. Log Parser'a hangi bilgilere ihtiyacınız olduğunu ve nasıl işlenmesini istediğinizi söylersiniz. Sorgunuzun sonuçları, metin tabanlı çıktıda özel olarak biçimlendirilebilir veya SQL, SYSLOG veya grafik gibi daha özel hedeflere yönelik olabilir.

Çoğu yazılım sınırlı sayıda belirli görevi yerine getirmek için tasarlanmıştır. Kütük Ayrıştırıcı farklıdır ... Kullanılabilecek yol sayısı yalnızca kullanıcının ihtiyaçları ve hayal gücü ile sınırlıdır. Dünya, Log Parser ile veritabanınızdır.

Google kullanırken bulduğum CSV dosyalarıyla SQL benzeri sorgu dilini kullanma hakkında bir eğitim (ve diğeri ) .

Örnek Sorgu:

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

Forum desteği ve sorularınızın birçoğu resmi logparser forumu olan forums.iis.net/default.aspx?GroupID=51 adresinde cevaplanacaktır
svandragt

2
Codinghorror.com/blog/archives/000369.html adresindeki diğer örnekler Nice; çok kötü, sadece Windows.
Arjan

34

Bence OpenOffice.org Veritabanı istediğinizi yapabilir. Bu şekilde çalışır.

  1. Açık Office.org Veritabanı'nı başlatın, " Veritabanı Sihirbazı " nı gösterir

  2. " Mevcut bir veritabanına bağlan: Metin " seçeneğini seçin

    görüntü tanımını buraya girin

  3. Metin dosyalarının yolunu ve ayırıcı karakter vb. Ayrıntıları belirtin.

    görüntü tanımını buraya girin

  4. Sorguları oluşturma ve yürütme

    görüntü tanımını buraya girin

Microsoft Access ile daha önce çalıştıysanız, GUI'yi tanıdık bulacaksınız.


Bir GUI olmadan yapabiliyorsanız her zaman geleneksel UNIX komutları vardır. Onları (küçük) CSV dosyalarına basit sorgular yapmak için çok kullanırım. İşte nasıl çalışıyor:

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`

Vay, harika cevap! +1
theycallmemorty

Bu sadece hile gibi görünüyor. O yaşlanma gecikmeli OO Üssü yapabilir miyim göreceğim.
J. Polfer

+1. Güzel! OO'yu keşfetmek için canınızı sıkmadı. Her zaman MS O'nun bir kenarı olduğunu düşündüm!
Swanand,

hasta! Büyük dosyalar için performans nasıl. Biyoinformatik içerisindeyim ve kocaman sekmeyle ayrılmış önemsizlerim var
user2751

@ 1alstew1: Büyük dosyalar için her iki yöntemden de uzak dururum ve gerçek bir veritabanı kullanırdım. Ayrıca veriyi veritabanınıza almak için toplu içe aktarma (LOAD) kullandığınızdan emin olun, INSERT'den çok daha hızlı.
Ludwig Weinzierl

13

ODBC'yi metin dosyalarını sorgulamak için kullanabilirsiniz:

ODBC Veri Sağlayıcısı'nı Kullanarak Metin Dosyalarına Erişim

Not Eğer iş bunun için MS Access gerekmez, yukarıdaki bağlantıda öğretici sadece metin dosyası oluşturmak için MS Access kullanır, ancak zaten bir metin dosyası olduğu gibi, yarıya kadar ilerleyin ve gördüğünüz öğretici başlatmak başlık bir metin dosyası erişme .

Güncelleme : Bu adım adım öğreticiyi oluşturabilmek için kendime bir .csv dosyası üzerinde DSN oluşturdum ... işte geliyor:

  • .Csv dosyanızın başka bir şey olmadan kendi dizininde olduğundan emin olun.
  • "ODBC Veri Kaynağı Yöneticisi" ni açın (başlat - kontrol paneli - yönetim araçları - Veri Kaynakları (ODBC)).
  • Dosya DSN sekmesine gidin ve "Ekle ..." üzerine tıklayın.
  • Listeden "Microsoft Metin Sürücüsü (* .txt, * .csv) seçin ve" İleri> "yi tıklayın.
  • Dosya veri kaynağınıza bir ad verin (ör. "Test") ve "İleri>" düğmesini tıklayın.
  • "Son" u tıklayın (Bundan sonra, "Veri kaynağı adı" ve "Açıklama" alanlarının gerçekten gri olduğu bir iletişim kutusu görünecektir. Bu normaldir. Endişelenmeyin.
  • "Geçerli Dizini Kullan" onay kutusunun işaretini kaldırın. "Dizin Seç" butonu etkin olacaktır.
  • "Dizin Seç" düğmesini tıklayın ve .csv dosyanızı ilk adımda yerleştirdiğiniz klasöre geçin.
  • "Seçenekler >>" düğmesine tıklayın.
  • "Format Tanımla ..." düğmesine tıklayın.
  • Soldaki "Tablolar" listesinden .csv dosyanızı seçin ve "Tahmin" düğmesine tıklayın. (Bu, csv dosyanızı analiz eder ve .csv dosyanızdaki her sütun için uygun bir alan oluşturur.)
  • Doğru listede üretilen sütunlara (F1, F2, ...) gidin, onlara anlamlı adlar verin ve uygun veri tipini ayarlayın (bazen tahmin her zaman doğru değildir).
  • Her şey doğru ayarlandıktan sonra "Tamam" ı (2 kez) tıklayın.

Bu noktada, .csv dosyanıza ODBC üzerinden erişebileceğiniz bir DSN dosyanız olmalıdır. .Csv dosyasının bulunduğu klasörü inceliyorsanız, az önce oluşturduğunuz config dosyasını içeren bir schema.ini dosyası görürsünüz. Birden fazla .csv dosyanız varsa, her biri bir tabloya karşılık gelir ve her tablo , farklı sütunların tanımlandığı schema.ini dosyasında bir [ dosyaadı .csv] bloğu içerecektir. Ayrıca bu şemayı da oluşturabilir / değiştirebilirsiniz .ini dosyası yukarıda açıklanan GUI'yi kullanmak yerine doğrudan bir metin editöründe.

"Sorgu aracını kullanarak bu ODBC sağlayıcısına nasıl bağlanacağım" sorusuna gelince,
uzun zaman önce kendime yazdığım ve yayın için uygun olmayan bir aracım var. Ancak hızlı bir Google araması , istediğinizi yapan ücretsiz bir araç olan odbc-view ile geldi .
Aracı indirip yükledim.
Aracı çalıştırdıktan sonra:

  • "Veri Kaynağı ..." üzerine tıklayın.
  • Daha önce oluşturduğunuz Dosya Veri Kaynağınızı seçin (örn. "Test").
  • Sorgu bölmesinde "[* dosya adı .csv]" * seçin .
  • "Çalıştır" düğmesine tıklayın.

.Csv dosyanızın içeriğini şimdi alt bölmede görmelisiniz.
Umarım bu yardımcı olur ... Nasıl olduğunuzu veya daha fazla yardıma ihtiyacınız olursa haberim olsun.


@ fretje - Bunun çalışması için MS Access'e ihtiyacım olmadığını biliyorum, kendim denedim. Bununla ilgili iki sorunla karşılaştım: 1. İşim bittiğinde CSV-DB'yi sorgulamak için kullanabileceğim bir GUI veya bir CLI yardımcı programına sahip olmak istiyorum. Yukarıda alıntı yaptığınız yazıda bunların hiçbiri listelenmiyor, bir .NET uygulaması yazarak bu ODBC veritabanına erişmek istediğinizi varsayar. 2. Bu çözümü kullanacağım PC ile ODBC kurulumumun bu çözümü izlemenin yeterli olduğunu sanmıyorum. DSN'mi ODBC veri sağlayıcısı oluşturma zamanında adlandıramadım, kutu gridi. Belki bir sistem kurulum problemi.
J. Polfer

@ fretje - bir sorgu aracı kullanarak bu ODBC sağlayıcısına nasıl bağlanacağınızı açıklayabilirseniz, bu iyi olurdu; Bunu nasıl yapacağımı bilmiyorum. Her şeyi bir araya getirmek için cevap arıyordum.
J. Polfer

8

Csv dosyalarına hızlı bir şekilde erişmek için R'yi kullanmayı seviyorum . Dil doğrudan SQL olmasa da, tüm bunları R'de basit komutlarla yapabilirsiniz, ayrıca R size güzel grafikler yapma ve birçok başka güç sağlama yeteneği sunar.


5

Dosyayı her zaman Excel'de okuyabilir ve ODBC üzerinden Excel'i veri kaynağınız olarak kullanabilir ve sorguları çalıştırabilirsiniz.


Yapabilirim? Kara kara büyü gibi geliyor. Bir öğretici için bir link bulabilir misiniz?
J. Polfer

2
@sheepsimulator: Excel sadece csv dosyalarını açar ... bir excel dosyasına sahip olduğunuzda, tıpkı metin dosyalarını sorgulayabileceğiniz gibi ODBC ile sorgulayabilirsiniz (aşağıdaki cevaba bakınız).
fretje

5

Bunu başarmanın en basit yolunun sadece SQLite'nin yerleşik CSV içe aktarma işlevselliğini kullanmak olduğunu buldum:

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

Artık istediğiniz şekilde sorgulayabileceğiniz çalışan bir veritabanınız var. Ayrıca yukarıdakilerin performansını iyi buldum, 10-15 saniyede üç milyon satır ithal ettim.


3

Bunu yapan küçük, grafiksel olmayan bir uygulama buldum : csvsql .

Belgeler burada .


Bu TAM bir GUI olsaydı iyi olurdu, ancak aradığım uygulamanın türü. Ne yazık ki, şu anda Win2k kutusu için derlemek için gerçekten iyi bir yolum yok. Sana geri dönüş yapacağız. Ayrıca, yazar otomatik yapmayı ya da böyle güzel bir şey kullanmadı, bu nedenle derleme yapmak biraz çalkalama gerektiriyor.
J. Polfer

Bulması çok zordu ve anlattıklarına yakın bulabildiğim tek şey buydu. Belki de birinin metin dosyalarını içe aktaran ve örneğin SQL Lite kullanarak SQL sorguları çalıştırabilen bir uygulama yazması için bir fikir?
Stefan Thyberg

1
sqlite3(SQLite veritabanlarını okur komut satırı uygulaması) yerleşik destek ithalat dosyalarına - onun .separator ve üzümlerinin ithalatı komutları bkz sqlite.org/sqlite.html
Arjan

1
Evet, cevaplarda birkaç kez bahsettiğimi gördüm ama daha çok bir sorgu penceresi olan tam teşekküllü not defteri benzeri bir uygulama düşünüyordum.
Stefan Thyberg

3

Ücretsiz bir araç olan q - Text'i Veri Tabanı Olarak inceleyebilirsiniz ; bu, birleştirme, gruplama ve diğer SQL yapıları da dahil olmak üzere SQL'in doğrudan csv dosyalarında çalıştırılmasını sağlar. Ayrıca sütun adlarının ve sütun türlerinin otomatik olarak algılanmasını da içerir.

Linux işletim biçimiyle eşleşen bir komut satırı aracıdır (örneğin, gerektiğinde stdin'den borulama, davranışı özelleştirmek için özel bayraklar, vb.).

Perde arkasında sqlite kullanır, çok hafif ve kullanımı kolaydır.

Tam açıklama - Bu kendi açık kaynak kodlu aracım. Umarım yararlı bulursunuz

Harel Ben-Attia


Bu araç kesinlikle harika!
Dawid Ferenczy Rogožan

2

Gelecekte bunu kolaylaştıracağını düşündüğüm bir araç Resolver One .

Kolayca değiştirilebilen Python kodunu üreten bir elektronik çizelgedir. Geliştiriciler ve zaman zaman çizelgelerdeki sorunları çözmek için "aşağıya inmek" zorunda olanlar için, bu aşina oldukları bir dilde elektronik çizelge-esque sorunlarını çözmenin sezgisel bir yoluna benziyor.

Ve bana Python'u kullanmak için bir bahane veriyor. Python beni mutlu ediyor.


2

H2 JDBC sürücüsü, aşağıdaki gibi şeyleri yapmanızı sağlayan çok kullanışlı bir csvread işlevi sağlar:

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

Kullanmak için kod yazmaya gerek kalmadan bu sürücüyü kullanmanın çeşitli yolları vardır.

Şahsen, sorguları çalıştırmak için size güzel bir GUI sağlayan Squirrel SQL İstemcisini tercih ediyorum . Tek yapmanız gereken, listelenen H2 In-MemorySürücü sınıf yolunu indirdiğiniz H2 sürücüye yönlendirmektir. Sürücüyü kullanarak uygun bir takma ad ayarladıktan sonra, istediğiniz rastgele SQL'i çalıştırabilirsiniz. Sonuçlar güzel bir tabloda ve içe aktarma, dışa aktarma vb.

Alternatif olarak, sürücüyü gerektiği gibi yüklemek ve kullanmak için hızlı bir komut dosyası yazmak için Groovy kullanabilirsiniz. Nasıl olduğunu öğrenmek için bu örnek blog yayınına bakın .

Görünüşe göre birisi yukarıdaki groovy betiğini genişletti ve sorguları çalıştırmak için hoş bir komut satırı aracı haline getirdi, gcsvsql'ye bakın. Bununla, aşağıdaki gibi komutları çalıştırabilirsiniz:

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

2

Q aracını denemek isteyebilirsiniz . Çok hafiftir, sadece Python 2.5 veya daha yenisini gerektirir.




0

Ücretsiz olmasa da, bunun için bulduğum en iyi program Dosya Sorgusu. . Komut satırı tabanlı veya dosyaya erişmeden önce içe aktarılması / ayarlanması gereken diğer çözümlerin aksine, Dosya Sorgusu bir dosya açmanıza izin verir (normal bir metin düzenleyici gibi açılan GB'ler bile) ve mizanpajı sizin için otomatik olarak ayrıştırır, ve neredeyse bütün sorgulamalarınızı basit diyaloglardan yapmanıza izin verin.

Biraz pahalı, ancak bir kez bir şey yapmanız gerekiyorsa, 30 günlük deneme sürümünü her zaman ücretsiz kullanabilirsiniz. Ayrıca , başlamanıza yardımcı olacak harika rehberleri ve hatta videoları da var .


0

WHS kullanabilirsiniz. Örneğin, 'C: \ Users \ user837 \ Desktop \ t4' dizininde 4 dosya var: 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=,

ve 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();
}

Şimdi sadece Hello.js üzerine çift tıklayın ve sql reqult satır satır göreceksiniz. Tüm sorgu sonuçlarını görüntülemek için WHS belgelerine bakın.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.