Zapytanie o plik CSV

30

Czy ktoś wie o prostym narzędziu, które otworzy plik CSV i umożliwi wykonywanie podstawowych zapytań SQLesque? Jak rodzaj graficznego narzędzia, które jest łatwe w użyciu.

Wiem, że mógłbym napisać mały skrypt do importu CSV do bazy danych SQLite, ale ponieważ wyobrażam sobie, że ktoś inny pomyślał o tym przede mną, chciałem tylko zapytać, czy istnieje. To pytanie nasuwa pytanie, że denerwują mnie ograniczone możliwości filtrowania w programie Excel.

Być może jakieś inne narzędzie do manipulacji wizualizacją danych zapewni podobną funkcjonalność.

Preferowany jest darmowy lub OSS, ale jestem otwarty na wszelkie sugestie.

EDYTOWAĆ:

Naprawdę wolałbym kilka jasnych samouczków, jak wykonać poniższe czynności, zamiast po prostu „uczynić z arkusza wpis ODBC” lub „pisać programy przy użyciu plików ODBC” lub innych pomysłów na aplikacje. Uwaga: nie mogę korzystać z MS Access.

Jeszcze inna EDYCJA:

Nadal jestem otwarty na rozwiązania wykorzystujące SQLite. Moja platforma to na wpół starożytny laptop Win2k z P4. Jest dość wolny, więc rozwiązanie wymagające niewielkich zasobów jest idealne i prawdopodobnie wygra.

J. Polfer
źródło
Dla pewności: nadal jesteś otwarty na rozwiązania wykorzystujące SQLite? (Na przykład za pomocą poleceń .separator i .import?) A na jakiej platformie jesteś?
Arjan
Właśnie z ciekawości: Dlaczego nie możesz użyć MS Access?
Ludwig Weinzierl
@ Arjan - Nadal jestem otwarty na rozwiązania wykorzystujące SQLite. Moja platforma to pół-starożytny lappy Win2k z P4. Jest dość wolny, więc rozwiązanie wymagające niewielkich zasobów jest idealne i prawdopodobnie wygra.
J. Polfer,
2
@ fretje - Nie możesz mieć żadnego doświadczenia z SQLite. Łącznie 1 MB w kodzie źródłowym. Jest stosowany w telefonach komórkowych. Plik wykonywalny Win32 (silnik i wszystkie) ma rozmiar 300 KB.
J. Polfer,
1
@sheepsimulator: Wiem, że jest lekki, ale moja uwaga nadal jest ważna ... Dostęp ODBC do plików tekstowych jest zasadniczo włączony do systemu operacyjnego, podczas gdy w SQLite nadal musisz najpierw coś zainstalować i zaimportować plik csv do bazy danych. Instalowanie niczego to nadal mniej niż instalowanie czegoś bardzo małego, prawda?
fretje

Odpowiedzi:

13

Czy próbowałeś LogParser ?

Parser dziennika to potężne, wszechstronne narzędzie, które zapewnia uniwersalny dostęp do zapytań do danych tekstowych, takich jak pliki dziennika, pliki XML i pliki CSV, a także kluczowe źródła danych w systemie operacyjnym Windows®, takie jak dziennik zdarzeń, rejestr, system plików i Active Directory®. Poinformujesz Log Parser, jakie informacje potrzebujesz i jak chcesz je przetwarzać. Wyniki zapytania mogą być sformatowane niestandardowo w wynikach tekstowych lub mogą być utrwalone w bardziej specjalistycznych celach, takich jak SQL, SYSLOG lub wykres.

Większość oprogramowania jest zaprojektowana do wykonywania ograniczonej liczby określonych zadań. Log Parser jest inny ... liczba sposobów jego wykorzystania jest ograniczona tylko potrzebami i wyobraźnią użytkownika. Świat jest twoją bazą danych dzięki Log Parser.

Poradnik (i kolejny ) na temat korzystania z SQL jak język zapytań z plików CSV ja znaleźć za pomocą Google .

Przykładowe zapytanie:

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
źródło
Wsparcie na forum i na wiele twoich pytań odpowiemy na forums.iis.net/default.aspx?GroupID=51, który jest oficjalnym forum
logparserów
2
Więcej przykładów na codinghorror.com/blog/archives/000369.html Nicea; szkoda, że ​​to tylko Windows.
Arjan
34

Myślę, że baza danych OpenOffice.org może robić, co chcesz. Działa to w ten sposób.

  1. Uruchom Open Office.org Database, pokazuje „ Database Wizard

  2. Wybierz „ Połącz z istniejącą bazą danych: tekst

    wprowadź opis zdjęcia tutaj

  3. Określ ścieżkę do plików tekstowych, a także szczegóły, takie jak znak separatora itp.

    wprowadź opis zdjęcia tutaj

  4. Twórz i wykonuj zapytania

    wprowadź opis zdjęcia tutaj

Jeśli kiedykolwiek pracowałeś z Microsoft Access, GUI będzie ci znane.


Jeśli możesz obejść się bez GUI, zawsze istnieją tradycyjne polecenia UNIX. Często ich używam do robienia prostych zapytań do (małych) plików CSV. Oto jak to działa:

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
źródło
Wow, świetna odpowiedź! +1
theycallmemorty
To wygląda jak sztuczka. Zobaczę, czy mogę OO Base na tym starzejącym się lappy.
J. Polfer,
+1. Fajne! Nie zawracałem sobie głowy odkrywaniem OO. Zawsze myślałem, że MS O ma przewagę!
Swanand
chory! jaka jest wydajność dużych plików. Jestem w bioinformatyce i mam ogromne śmieci rozdzielane tabulatorami
user2751
@ 1alstew1: W przypadku dużych plików trzymam się z dala od obu metod i korzystam z prawdziwej bazy danych. Pamiętaj też, aby użyć importu wsadowego (LOAD), aby pobrać dane do bazy danych, jest to znacznie szybsze niż INSERT.
Ludwig Weinzierl
13

Za pomocą ODBC można wyszukiwać pliki tekstowe:

Dostęp do plików tekstowych za pomocą dostawcy danych ODBC

Zauważ , że nie potrzebujesz MS Access, aby to zadziałało, samouczek w powyższym linku używa tylko MS Access do utworzenia pliku tekstowego, ale ponieważ masz już plik tekstowy, przewiń w dół do połowy i rozpocznij samouczek, w którym widzisz tytuł Dostęp do pliku tekstowego .

Aktualizacja : Sam utworzyłem DSN w pliku .csv, aby móc utworzyć ten samouczek krok po kroku ... oto nadchodzi:

  • Upewnij się, że plik .csv znajduje się we własnym katalogu bez żadnych innych elementów.
  • Otwórz „Administratora źródeł danych ODBC” (start - panel sterowania - narzędzia administracyjne - źródła danych (ODBC)).
  • Przejdź do zakładki Plik DSN i kliknij „Dodaj ...”.
  • Wybierz „Microsoft Text Driver (* .txt, * .csv) z listy i kliknij„ Dalej> ”.
  • Podaj nazwę źródła danych pliku (np. „Test”) i kliknij „Dalej>”.
  • Kliknij „Zakończ” (po tym pojawi się okno dialogowe, w którym pola „Nazwa źródła danych” i „Opis” są rzeczywiście wyszarzone. To normalne. Nie martw się.
  • Odznacz pole „Użyj bieżącego katalogu”. Przycisk „Wybierz katalog” zostanie włączony.
  • Kliknij przycisk „Wybierz katalog” i przejdź do folderu, w którym umieściłeś plik .csv w pierwszym kroku.
  • Kliknij przycisk „Opcje >>”.
  • Kliknij przycisk „Definiuj format ...”.
  • Z lewej listy „Tabele” wybierz plik .csv i kliknij przycisk „Zgadnij”. (Spowoduje to przeanalizowanie pliku csv i utworzenie odpowiedniego pola dla każdej kolumny w pliku .csv).
  • Przejdź przez wygenerowane kolumny (F1, F2, ...) na właściwej liście, nadaj im sensowne nazwy i ustaw odpowiedni typ danych (czasem zgadywanie nie zawsze jest właściwe).
  • Po prawidłowym skonfigurowaniu kliknij „OK” (2 razy).

W tym momencie powinieneś mieć plik DSN, dzięki któremu możesz uzyskać dostęp do pliku .csv przez ODBC. Jeśli przejrzysz folder, w którym znajduje się plik .csv, zobaczysz plik schema.ini, który zawiera właśnie utworzoną konfigurację. Jeśli masz wiele plików .csv, każdy z nich odpowiada tabeli, a każda tabela będzie miała blok [ nazwa pliku .csv] w pliku schema.ini, w którym zdefiniowane są różne kolumny ... Możesz także utworzyć / zmienić ten schemat plik .ini bezpośrednio w edytorze tekstu zamiast GUI opisanego powyżej.

Co do twojego dodatkowego pytania „jak połączyć się z tym dostawcą ODBC za pomocą narzędzia do wysyłania zapytań”:
Mam narzędzie, które sam napisałem dawno temu, i które nie kwalifikuje się do publikacji. Ale szybkie wyszukiwanie w Google przyszło z odbc-view , darmowym narzędziem, które robi to, co chcesz.
Pobrałem i zainstalowałem narzędzie.
Po uruchomieniu narzędzia:

  • Kliknij „DataSource ...”.
  • Wybierz źródło danych pliku, które wcześniej utworzyłeś (np. „Test”).
  • W okienku zapytania wpisz „wybierz * z [ nazwa pliku .csv]”.
  • Kliknij „Wykonaj”.

Teraz powinieneś zobaczyć zawartość pliku .csv w dolnym okienku.
Mam nadzieję, że to pomoże ... Daj mi znać, jak się masz lub jeśli potrzebujesz dalszej pomocy.

fretje
źródło
@ fretje - Wiem, że do działania nie potrzebuję MS Access, sam tego próbowałem. Zetknąłem się z dwoma problemami: 1. Chcę mieć GUI lub narzędzie CLI, za pomocą którego mogę wysyłać zapytania do CSV-DB, kiedy skończę. W cytowanym powyżej tutorialu nie wymieniono żadnej z nich, zakłada się, że chcesz uzyskać dostęp do tej bazy danych ODBC, pisząc aplikację .NET. 2. Z komputerem, na którym używałbym tego rozwiązania, nie sądzę, że moja konfiguracja ODBC jest wystarczająca, aby zastosować się do tego rozwiązania. Nie mogłem podać nazwy DSN podczas tworzenia dostawcy danych ODBC, pole było wyszarzone. Może problem z konfiguracją systemu.
J. Polfer,
@ fretje - jeśli możesz wyjaśnić, jak połączyć się z tym dostawcą ODBC za pomocą narzędzia do zapytań, byłoby miło; Nie wiem jak to zrobić. Trochę szukałem odpowiedzi na wszystko.
J. Polfer,
8

Lubię używać R, aby szybko uzyskiwać dostęp do plików csv. Chociaż język nie jest bezpośrednio SQL, możesz wykonywać te wszystkie czynności za pomocą prostych poleceń w języku R. R zapewnia także możliwość tworzenia ładnych wykresów i wiele innych możliwości.

chrześcijanin
źródło
5

Zawsze możesz odczytać plik do Excela i użyć Excela jako źródła danych za pośrednictwem ODBC i uruchamiać na nim zapytania.

m.floryan
źródło
Mogę? To brzmi jak czarna magia. Czy możesz znaleźć link do samouczka?
J. Polfer,
2
@sheepsimulator: Excel po prostu otwiera pliki csv ... kiedy już masz plik Excela, możesz zapytać go za pomocą ODBC, tak jak możesz zapytać o pliki tekstowe (zobacz moją odpowiedź poniżej).
fretje
5

Odkryłem, że najprostszym sposobem na osiągnięcie tego jest użycie wbudowanej funkcji importu CSV programu SQLite:

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

Teraz masz działającą bazę danych, którą możesz przeszukiwać w dowolny sposób. Uznałem również, że wydajność powyższego jest dobra, właśnie zaimportowałem trzy miliony wierszy w 10-15 sekund.

Markus Amalthea Magnuson
źródło
3

Znalazłem małą, nie graficzną aplikację, która to robi: csvsql .

Dokumentacja jest tutaj .

Stefan Thyberg
źródło
Jest to DOKŁADNIE typ aplikacji, której szukam, chociaż byłoby miło, gdyby miał GUI. Niestety, naprawdę nie mam teraz dobrego sposobu na skompilowanie go dla pudełka Win2k. Wrócę do ciebie. Ponadto autor nie używał automake ani niczego podobnego, więc kompilacja będzie wymagała trochę jiggerypokery.
J. Polfer,
Było bardzo trudno znaleźć i była to jedyna rzecz, którą mogłem znaleźć blisko tego, co opisałeś. Być może pomysł, aby ktoś napisał aplikację, która może importować pliki tekstowe i uruchamiać na nich zapytania SQL przy użyciu na przykład SQL Lite?
Stefan Thyberg,
1
sqlite3(aplikacja wiersza poleceń, która czyta bazy danych SQLite) ma wbudowaną obsługę importowania plików - zobacz jej polecenia .separator i .import na stronie sqlite.org/sqlite.html
Arjan
1
Tak, widziałem to kilka razy w odpowiedziach, ale myślałem bardziej o pełnoprawnej aplikacji przypominającej notatnik z oknem zapytania.
Stefan Thyberg
3

Możesz rzucić okiem na bezpłatne narzędzie q - Text as a Database , które umożliwia wykonywanie SQL bezpośrednio na plikach csv, w tym sprzężeniach, grupowaniu i innych konstrukcjach SQL. Obejmuje również automatyczne wykrywanie nazw i typów kolumn.

Jest to narzędzie wiersza poleceń, które pasuje do sposobu działania Linuksa (np. Pipowanie ze standardowego wejścia w razie potrzeby, specjalne flagi do dostosowywania zachowania itp.).

Wykorzystuje sqlite za kulisami, dzięki czemu jest bardzo lekki i łatwy w użyciu.

Pełne ujawnienie - to moje własne narzędzie typu open source. Mam nadzieję, że uznasz to za przydatne

Harel Ben-Attia

Harel Ben Attia
źródło
To narzędzie jest absolutnie niesamowite!
Dawid Ferenczy Rogožan
2

Narzędzie, które, jak sądzę, może ułatwić to w przyszłości, to Resolver One .

Jest to arkusz kalkulacyjny, który generuje kod Pythona, który można łatwo modyfikować. Dla tych, którzy są programistami i czasami potrzebują „ustąpić”, aby rozwiązać problemy w arkuszach kalkulacyjnych, wydaje się to intuicyjnym sposobem rozwiązania problemów w arkuszach kalkulacyjnych w języku, który znają.

Daje mi to pretekst do używania Pythona. Python mnie uszczęśliwia.

J. Polfer
źródło
2

Sterownik JDBC H2 zapewnia bardzo przydatną funkcję csvread, umożliwiającą wykonywanie następujących czynności:

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

Istnieją różne sposoby korzystania z tego sterownika bez konieczności zagłębiania się w pisanie kodu, aby go użyć.

Osobiście wolę Squirrel SQL Client, który daje przyjemny GUI do uruchamiania zapytań. Aby z niego skorzystać, wystarczy wskazać już wymienioną H2 In-Memoryścieżkę klasy Driver na pobrany sterownik H2. Po skonfigurowaniu odpowiedniego aliasu za pomocą sterownika możesz uruchomić dowolny dowolny SQL. Wyniki są wyświetlane w ładnej tabeli i wszelkiego rodzaju innych funkcjach importowania, eksportowania itp.

Alternatywnie możesz użyć Groovy, aby napisać szybki skrypt, aby załadować i użyć sterownika w razie potrzeby. Zobacz ten przykładowy post na blogu, aby dowiedzieć się, jak to zrobić.

Wygląda na to, że ktoś rozszerzył powyższy skrypt i przekształcił go w ładne narzędzie wiersza poleceń do uruchamiania zapytań, patrz gcsvsql. Dzięki temu możesz uruchamiać następujące polecenia:

gcsvsql "select * from people.csv where age > 40"
lstg
źródło
2

Może chcesz spróbować narzędzia Q . Jest bardzo lekki, wymaga tylko Python 2.5 lub nowszego.

agrrd
źródło
2

Napisałem program wiersza poleceń do wykonywania dowolnego kodu SQL na plikach csv, w tym sprzężeń wieloplikowych, o nazwie gcsvsql. Możesz przeczytać o tym tutaj:

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

Tutaj jest projekt Google Code: http://code.google.com/p/gcsvsql/

Jest napisany w Javie / Groovy i będzie działał wszędzie tam, gdzie dostępna jest Java.

Edycja: Aktywny projekt przeniesiony do github. https://github.com/jdurbin/durbinlib

James Durbin
źródło
1

Dwie kolejne opcje dla tego zadania: querycsv i fsql . Querycsv to Python i używa narzędzia sqlite3. Fsql to Perl i używa DBD :: CSV .

Nelson
źródło
0

Chociaż nie jest darmowy, najlepszym programem do tego, jaki znalazłem, jest Zapytanie o plik . W przeciwieństwie do innych rozwiązań opartych na wierszu polecenia lub wymagających zaimportowania / skonfigurowania pliku przed uzyskaniem do niego dostępu, funkcja File Query pozwala otworzyć plik (nawet GB w trybie zwykłym edytorem tekstu i automatycznie przeanalizuje układ, i pozwala wykonywać prawie wszystkie zapytania z prostych dialogów.

Jest to trochę drogie, ale jeśli musisz coś zrobić tylko raz, zawsze możesz skorzystać z 30-dniowego okresu próbnego za darmo. Mają też świetne przewodniki, a nawet filmy, które pomogą Ci zacząć.

Jeffrey Harmon
źródło
0

możesz użyć WHS. Na przykład mam 4 pliki w katalogu „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=,

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

Teraz wystarczy dwukrotnie kliknąć Hello.js, a wiersz po wierszu wyświetli się polecenie sql. Zobacz dokumentację WHS, aby wyświetlić wszystkie wyniki zapytania.

Oleg
źródło