Truy vấn tệp CSV


30

Có ai biết một công cụ đơn giản sẽ mở ra một tệp CSV và cho phép bạn thực hiện các truy vấn SQLesque cơ bản trên nó không? Giống như một công cụ đồ họa sắp xếp, một công cụ dễ sử dụng.

Tôi biết tôi có thể viết một tập lệnh nhỏ để thực hiện nhập CSV vào cơ sở dữ liệu SQLite, nhưng vì tôi tưởng tượng người khác nghĩ về điều này trước tôi, tôi chỉ muốn hỏi xem có tồn tại không. Điều khiến cho câu hỏi này khiến tôi cảm thấy thất vọng với khả năng lọc hạn chế của Excel.

Có lẽ một số công cụ thao tác trực quan hóa dữ liệu khác sẽ cung cấp chức năng tương tự.

Miễn phí hoặc OSS được ưa thích, nhưng tôi sẵn sàng cho bất kỳ đề xuất nào.

CHỈNH SỬA:

Tôi thực sự thích một số hướng dẫn rõ ràng về cách thực hiện bên dưới thay vì chỉ "tạo trang tính của bạn thành mục ODBC" hoặc "viết chương trình bằng tệp ODBC" hoặc thêm ý tưởng về ứng dụng để sử dụng. Lưu ý: Tôi không thể sử dụng MS Access.

Một EDIT khác:

Tôi vẫn đang mở cho các giải pháp sử dụng SQLite. Nền tảng của tôi là một máy tính xách tay Win2k bán cổ, có P4 trên đó. Nó khá chậm, vì vậy một giải pháp ánh sáng tài nguyên là lý tưởng và có khả năng sẽ giành chiến thắng.


Chỉ cần chắc chắn: bạn vẫn đang mở cho các giải pháp bằng SQLite? (Giống như sử dụng các lệnh .separator và .import?) Và bạn đang dùng nền tảng nào?
Arjan

Vì tò mò: Tại sao bạn không thể sử dụng MS Access?
Ludwig Weinzierl

@ Arjan - Tôi vẫn đang mở cho các giải pháp bằng SQLite. Nền tảng của tôi là một Win2k bán cổ xưa, với P4 trên đó. Nó khá chậm, vì vậy một giải pháp ánh sáng tài nguyên là lý tưởng và có khả năng sẽ giành chiến thắng.
J. POLFER

2
@ fretje - Bạn không được có bất kỳ kinh nghiệm nào với SQLite. Tổng số 1MB trong mã nguồn. Nó được sử dụng trên điện thoại di động. Win32 thực thi (động cơ và tất cả) là 300KB.
J. Polfer

1
@sheepsimulator: Tôi biết nó nhẹ, nhưng quan điểm của tôi vẫn là ... Truy cập ODBC vào các tệp văn bản về cơ bản được tích hợp trong HĐH, trong khi với SQLite, bạn vẫn phải cài đặt một cái gì đó trước tiên và nhập tệp csv vào cơ sở dữ liệu. Cài đặt không có gì vẫn ít hơn cài đặt một cái gì đó rất nhỏ, phải không?
fretje

Câu trả lời:


13

Bạn đã thử LogParser chưa?

Trình phân tích cú pháp nhật ký là một công cụ mạnh mẽ, linh hoạt, cung cấp quyền truy cập truy vấn phổ biến vào dữ liệu dựa trên văn bản như tệp nhật ký, tệp XML và tệp CSV, cũng như các nguồn dữ liệu chính trên hệ điều hành Windows® như Nhật ký sự kiện, Sổ đăng ký, hệ thống tệp và Active Directory®. Bạn nói với Log Parser những thông tin bạn cần và cách bạn muốn nó được xử lý. Kết quả truy vấn của bạn có thể được định dạng tùy chỉnh trong đầu ra dựa trên văn bản hoặc chúng có thể được duy trì cho các mục tiêu đặc biệt hơn như SQL, SYSLOG hoặc biểu đồ.

Hầu hết các phần mềm được thiết kế để thực hiện một số lượng hạn chế các nhiệm vụ cụ thể. Log Parser thì khác ... số cách nó có thể được sử dụng chỉ bị giới hạn bởi nhu cầu và trí tưởng tượng của người dùng. Thế giới là cơ sở dữ liệu của bạn với Log Parser.

Một hướng dẫn (và một hướng dẫn khác ) về cách sử dụng ngôn ngữ truy vấn như SQL với các tệp CSV mà tôi tìm thấy bằng cách sử dụng google .

Ví dụ truy vấn:

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

Hỗ trợ diễn đàn và nhiều câu hỏi của bạn sẽ được trả lời tại forum.iis.net/default.aspx?groupID=51 , đây là diễn đàn logparser chính thức
svandragt

2
Các ví dụ khác tại mã hóa kinh dị.com / blog / archives / 000369.html Nice; quá tệ, chỉ có Windows.
Arjan

34

Tôi nghĩ rằng cơ sở dữ liệu OpenOffice.org có thể làm những gì bạn muốn. Nó hoạt động như thế này.

  1. Bắt đầu mở Office.org Database, nó hiển thị "Trình hướng dẫn cơ sở dữ liệu "

  2. Chọn " Kết nối với cơ sở dữ liệu hiện có: Văn bản "

    nhập mô tả hình ảnh ở đây

  3. Chỉ định đường dẫn đến tệp văn bản cũng như các chi tiết như ký tự phân cách, v.v.

    nhập mô tả hình ảnh ở đây

  4. Tạo và thực hiện Truy vấn

    nhập mô tả hình ảnh ở đây

Nếu bạn đã từng làm việc với Microsoft Access, bạn sẽ thấy GUI quen thuộc.


Nếu bạn có thể làm mà không cần GUI thì luôn có các lệnh UNIX truyền thống. Tôi sử dụng chúng rất nhiều để thực hiện các truy vấn đơn giản đối với các tệp CSV (nhỏ). Đây là cách nó làm việc:

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`

Wow, câu trả lời tuyệt vời! +1
theycallmemorty

Điều này trông giống như chỉ là mẹo. Tôi sẽ xem liệu tôi có thể OO Base vào sự già nua này không.
J. Polfer

+1. Mát mẻ! Không thèm khám phá OO. Luôn nghĩ rằng MS O có lợi thế!
Swanand

đau ốm! làm thế nào là hiệu suất cho các tập tin lớn. Tôi đang ở trong tin sinh học và có rất nhiều rác được phân định bằng tab
user2751

@ 1alstew1: Đối với các tệp lớn, tôi tránh xa cả hai phương thức và sử dụng cơ sở dữ liệu thực. Ngoài ra, hãy đảm bảo sử dụng nhập hàng loạt (LOAD) để nhận dữ liệu vào cơ sở dữ liệu của bạn, nó nhanh hơn nhiều so với INSERT.
Ludwig Weinzierl

13

Bạn có thể sử dụng ODBC để truy vấn các tệp văn bản:

Truy cập tệp văn bản bằng cách sử dụng nhà cung cấp dữ liệu ODBC

Lưu ý rằng bạn không cần MS Access để làm việc này, hướng dẫn trong liên kết trên chỉ sử dụng MS Access để tạo tệp văn bản, nhưng khi bạn đã có tệp văn bản, hãy cuộn xuống giữa chừng và bắt đầu hướng dẫn nơi bạn thấy tiêu đề Truy cập một tệp văn bản .

Cập nhật : Tôi đã tự tạo DSN trên tệp .csv để có thể tạo hướng dẫn từng bước này ... ở đây có:

  • Hãy chắc chắn rằng tệp .csv của bạn nằm trong thư mục riêng của nó mà không có gì khác.
  • Mở "Quản trị viên nguồn dữ liệu ODBC" (bảng điều khiển khởi động - công cụ quản trị - Nguồn dữ liệu (ODBC)).
  • Chuyển đến tab Tệp DSN và nhấp vào "Thêm ...".
  • Chọn "Trình điều khiển văn bản của Microsoft (* .txt, * .csv) từ danh sách và nhấp vào" Tiếp theo> ".
  • Đặt tên cho nguồn dữ liệu tệp của bạn (ví dụ: "kiểm tra") và nhấp vào "Tiếp theo>".
  • Nhấp vào "Kết thúc" (Sau đó, một hộp thoại sẽ xuất hiện trong đó các trường "Tên nguồn dữ liệu" và "Mô tả" thực sự bị mờ đi. Điều này là bình thường. Không phải lo lắng.
  • Bỏ chọn hộp kiểm "Sử dụng thư mục hiện tại". Nút "Chọn thư mục" sẽ được bật.
  • Nhấp vào nút "Chọn thư mục" và cagivate vào thư mục mà bạn đã đặt tệp .csv của mình trong bước đầu tiên.
  • Nhấp vào nút "Tùy chọn >>".
  • Nhấp vào nút "Xác định định dạng ...".
  • Trong danh sách "Bảng" bên trái, chọn tệp .csv của bạn và nhấp vào nút "Đoán". (Điều này sẽ phân tích tệp csv của bạn và tạo trường thích hợp cho từng cột trong tệp .csv của bạn.)
  • Đi qua các cột được tạo (F1, F2, ...) trong danh sách bên phải, đặt cho chúng các tên có ý nghĩa và đặt loại dữ liệu phù hợp (đôi khi việc đoán không phải lúc nào cũng đúng).
  • Khi mọi thứ đã được thiết lập đúng, nhấp vào "OK" (2 lần).

Tại thời điểm này, bạn nên có một tệp DSN mà bạn có thể truy cập tệp .csv của mình thông qua ODBC. Nếu bạn kiểm tra thư mục của mình nơi đặt tệp .csv, bạn sẽ thấy tệp lược đồ chứa tệp cấu hình bạn vừa tạo. Khi bạn có nhiều tệp .csv, mỗi tệp tương ứng với một bảng và mỗi bảng sẽ có một khối [ tên tệp .csv] trong tệp lược đồ trong đó các cột khác nhau được xác định ... Bạn cũng có thể tạo / thay đổi lược đồ đó Tập tin .ini trực tiếp trong trình soạn thảo văn bản thay vì sử dụng GUI được mô tả ở trên.

Đối với câu hỏi thêm của bạn "cách kết nối với nhà cung cấp ODBC này bằng công cụ truy vấn":
Tôi có một công cụ mà tôi đã tự viết từ lâu không đủ điều kiện để xuất bản. Nhưng một tìm kiếm nhanh của Google đã đưa ra odbc-view , một công cụ phần mềm miễn phí thực hiện những gì bạn muốn.
Tôi đã tải xuống và cài đặt công cụ.
Sau khi khởi động công cụ:

  • Nhấp vào "Nguồn dữ liệu ...".
  • Chọn Nguồn dữ liệu tệp mà bạn đã tạo trước đó (ví dụ: "kiểm tra").
  • Trong khung truy vấn, gõ "select * from [ filename .csv]".
  • Nhấp vào "Thực thi".

Bây giờ bạn sẽ thấy nội dung của tệp .csv của bạn ở khung bên dưới.
Hy vọng điều này sẽ giúp ... Hãy cho tôi biết bạn làm như thế nào hoặc nếu bạn cần hỗ trợ thêm.


@ fretje - Tôi biết tôi không cần MS Access để làm việc này, tôi đã tự mình thử. Tôi gặp hai vấn đề với điều này: 1. Tôi muốn có GUI hoặc tiện ích CLI mà tôi có thể sử dụng để truy vấn CSV-DB khi tôi hoàn thành. Hướng dẫn mà bạn đã trích dẫn ở trên không liệt kê bất kỳ điều nào trong số đó, nó giả sử bạn muốn truy cập cơ sở dữ liệu ODBC này bằng cách viết một ứng dụng .NET. 2. Với PC tôi sẽ sử dụng giải pháp này, tôi không nghĩ rằng thiết lập ODBC của tôi là đủ để thực hiện theo giải pháp này. Tôi không thể đặt tên DSN của mình tại thời điểm tạo nhà cung cấp dữ liệu ODBC, hộp bị mờ đi. Có thể một vấn đề thiết lập hệ thống.
J. Polfer

@ fretje - nếu bạn có thể giải thích cách kết nối với nhà cung cấp ODBC này bằng công cụ truy vấn, điều đó sẽ rất tuyệt; Tôi không biết làm thế nào để làm điều đó. Đã tìm kiếm một câu trả lời bắt tất cả.
J. Polfer

8

Tôi thích sử dụng R để truy cập các tệp csv một cách nhanh chóng. Mặc dù ngôn ngữ không trực tiếp SQL, bạn có thể thực hiện tất cả những điều đó bằng các lệnh đơn giản trong R. R cũng cung cấp cho bạn khả năng tạo các biểu đồ đẹp và nhiều sức mạnh khác.


5

Bạn luôn có thể đọc tệp vào Excel và sử dụng Excel làm nguồn dữ liệu của mình thông qua ODBC và chạy các truy vấn đối với tệp đó.


Tôi có thể? Điều này nghe giống như ma thuật đen. Bạn có thể tìm thấy một liên kết cho một hướng dẫn?
J. Polfer

2
@sheepsimulator: Excel chỉ mở tệp csv ... khi bạn có tệp excel, bạn có thể truy vấn tệp đó bằng ODBC giống như bạn có thể truy vấn tệp văn bản (xem câu trả lời của tôi bên dưới).
fretje

5

Tôi thấy rằng cách đơn giản nhất để đạt được điều này là chỉ sử dụng chức năng nhập CSV tích hợp của SQLite:

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

Bây giờ bạn có một cơ sở dữ liệu làm việc mà bạn có thể truy vấn theo cách bạn muốn. Tôi cũng thấy hiệu suất của những thứ trên là tốt, tôi chỉ nhập ba triệu hàng trong vòng 10 - 15 giây.


3

Tôi tìm thấy một ứng dụng nhỏ, không có đồ họa thực hiện việc này: csvsql .

Tài liệu ở đây .


Đây chính xác là loại ứng dụng tôi đang tìm kiếm, mặc dù nó sẽ rất tuyệt nếu có GUI. Đáng buồn thay, tôi thực sự không có cách nào tốt để biên dịch nó cho hộp Win2k. Tôi sẽ gửi lại cho bạn. Ngoài ra, tác giả đã không sử dụng automake hoặc bất cứ thứ gì hay ho như thế, vì vậy để biên dịch sẽ đòi hỏi một số trò đùa.
J. Polfer

Nó rất khó tìm và đó là thứ duy nhất tôi có thể tìm thấy gần với những gì bạn mô tả. Có lẽ một ý tưởng cho ai đó để viết một ứng dụng có thể nhập tệp văn bản và chạy các truy vấn SQL trên chúng bằng cách sử dụng, ví dụ, SQL Lite?
Stefan Thyberg

1
sqlite3(ứng dụng dòng lệnh đọc cơ sở dữ liệu SQLite) có hỗ trợ tích hợp để nhập tệp - xem các lệnh .separator và .import
Arjan

1
Vâng, tôi đã thấy nó được đề cập nhiều lần trong các câu trả lời nhưng tôi đã suy nghĩ nhiều hơn về một ứng dụng giống như notepad đầy đủ với một cửa sổ truy vấn.
Stefan Thyberg

3

Bạn có thể xem công cụ miễn phí q - Văn bản dưới dạng Cơ sở dữ liệu , cho phép thực thi SQL trực tiếp trên các tệp csv, bao gồm các phép nối, nhóm và bất kỳ cấu trúc SQL nào khác. Cũng bao gồm tự động phát hiện tên cột và loại cột.

Đây là một công cụ dòng lệnh phù hợp với cách vận hành của Linux (ví dụ: Piping từ stdin nếu cần, các cờ đặc biệt để tùy chỉnh hành vi, v.v.).

Sử dụng sqlite phía sau hậu trường, vì vậy trọng lượng rất nhẹ và dễ sử dụng.

Tiết lộ đầy đủ - Đó là công cụ nguồn mở của riêng tôi. Hi vọng bạn tìm được thứ hữu dụng

Harel Ben-Attia


Công cụ này là hoàn toàn tuyệt vời!
Dawid Ferenczy Rogožan

2

Một công cụ mà tôi thấy rằng, tôi nghĩ, có thể làm cho việc này dễ dàng hơn trong tương lai là Resolver One .

Đó là một bảng tính tạo mã Python có thể dễ dàng sửa đổi. Đối với những người là nhà phát triển và đôi khi cần phải "từ chức" để giải quyết các vấn đề trong bảng tính, đây có vẻ như là một cách trực quan để giải quyết các vấn đề bí ẩn trong bảng tính bằng ngôn ngữ mà họ quen thuộc.

Và nó cho tôi một cái cớ để sử dụng Python. Python làm tôi hạnh phúc.


2

Trình điều khiển JDBC H2 cung cấp chức năng csvread rất hữu ích, cho phép bạn thực hiện những việc như sau:

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

Có nhiều cách khác nhau để sử dụng trình điều khiển này mà không cần phải đi sâu vào viết mã để sử dụng nó.

Cá nhân, tôi thích Máy khách SQL Squirrel cung cấp cho bạn một GUI đẹp để chạy các truy vấn. Để sử dụng tất cả những gì bạn cần làm là trỏ H2 In-Memoryđường dẫn Trình điều khiển đã được liệt kê vào trình điều khiển H2 mà bạn đã tải xuống. Khi bạn đã thiết lập một bí danh phù hợp bằng trình điều khiển, bạn có thể chạy bất kỳ SQL ngẫu nhiên nào bạn muốn. Kết quả được hiển thị trong một bảng đẹp và tất cả các loại tính năng khác để nhập, xuất, v.v.

Ngoài ra, bạn có thể sử dụng Groovy để viết một tập lệnh nhanh để tải và sử dụng trình điều khiển khi cần thiết. Xem ví dụ blogpost này để tìm hiểu làm thế nào.

Dường như ai đó đã mở rộng tập lệnh Groovy ở trên và biến nó thành một công cụ dòng lệnh tốt để chạy các truy vấn, xem gcsvsql. Với điều này, bạn có thể chạy các lệnh như sau:

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


2

Tôi đã viết một chương trình dòng lệnh để thực thi SQL tùy ý trên các tệp csv, bao gồm các phép nối nhiều tệp, được gọi là gcsvsql. Bạn có thể đọc nó ở đây:

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

Có một dự án Google Code cho nó ở đây: http://code.google.com.vn/p/gcsvsql/

Nó được viết bằng Java / Groovy và sẽ chạy bất cứ nơi nào có sẵn Java.

Chỉnh sửa: Dự án hoạt động chuyển sang github. https://github.com/jdurbin/durbinlib



0

Mặc dù không miễn phí, chương trình tốt nhất tôi tìm thấy cho việc này là Truy vấn tệp . Không giống như các giải pháp khác dựa trên dòng lệnh hoặc yêu cầu nhập / thiết lập tệp trước khi truy cập, Truy vấn tệp cho phép bạn mở tệp (ngay cả GB nhập vào như trình soạn thảo văn bản thông thường và sẽ tự động phân tích bố cục cho bạn, và cho phép bạn thực hiện hầu hết tất cả các truy vấn của mình từ các hộp thoại đơn giản.

Nó hơi tốn kém, nhưng nếu bạn chỉ cần làm một lần, bạn luôn có thể sử dụng bản dùng thử 30 ngày miễn phí. Họ cũng có những hướng dẫn tuyệt vời và thậm chí cả video để giúp bạn bắt đầu.


0

bạn có thể sử dụng WHS. Ví dụ: tôi có 4 tệp trong thư mục '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

lược đồ.ini

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

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

Bây giờ chỉ cần nhấp đúp chuột vào Hello.js và bạn sẽ thấy sql constlt theo từng dòng. Xem tài liệu WHS để xem tất cả các kết quả truy vấn.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.