Запит CSV-файлу


30

Хтось знає про простий інструмент, який відкриє файл CSV і дозволить виконувати основні запити SQLesque на ньому? Як графічний інструмент сортування, той, який простий у використанні.

Я знаю, що міг би написати невеликий сценарій для імпорту CSV в базу даних SQLite, але оскільки я уявляю, що хтось ще думав про це до себе, я просто хотів запитати, чи існує такий. Що спонукає це питання - це я засмучений обмеженими можливостями фільтрування Excel.

Можливо, якийсь інший інструмент маніпулювання візуалізацією даних забезпечив би подібну функціональність.

Безкоштовно або OSS є кращим, але я відкритий для будь-яких пропозицій.

Редагувати:

Я дійсно вважаю за краще кілька чітких підручників щодо того, як це зробити нижче, а не просто "зробити свій лист записом ODBC" або "написати програми за допомогою файлів ODBC", або більше ідей щодо програм, які потрібно використовувати. Примітка: я не можу використовувати доступ MS.

Ще одне редагування:

Я досі відкритий для рішень із використанням SQLite. Моя платформа - напівдавній ноутбук Win2k, на якому є P4. Це досить повільно, тому рішення, що відрізняється ресурсами, є ідеальним і, швидше за все, отримає виграш.


Просто для впевненості: ви все ще відкриті для рішень за допомогою SQLite? (На кшталт використання команд .separator та .import?) І на якій платформі ви працюєте?
Ар’ян

Просто з цікавості: чому ви не можете використовувати MS Access?
Ludwig Weinzierl

@ Arjan - Я все ще відкритий для рішень із використанням SQLite. Моя платформа - напівдавній лаптоп Win2k, на якому розміщено P4. Це досить повільно, тому рішення, що відрізняється ресурсами, є ідеальним і, швидше за все, отримає виграш.
Дж. Полфер

2
@ fretje - Ви не повинні мати жодного досвіду роботи з SQLite. 1 Мб у вихідному коді. Він використовується на мобільних телефонах. Виконаний файл Win32 (двигун і все) - 300 КБ.
Дж. Полфер

1
@sheepsimulator: Я знаю, що це світло, але моя суть все ще стоїть ... ODBC доступ до текстових файлів в основному вбудований в ОС, тоді як із SQLite вам все-таки потрібно встановити щось спочатку і імпортувати файл CSV в базу даних. Встановлення нічого все ще менше, ніж встановлення чогось дуже маленького, чи не так?
fretje

Відповіді:


13

Ви пробували LogParser ?

Аналізатор журналів - це потужний універсальний інструмент, який забезпечує універсальний доступ до запитів до текстових даних, таких як файли журналів, XML-файли та файли CSV, а також до основних джерел даних в операційній системі Windows®, таких як Журнал подій, Реєстр, файлову систему та Active Directory®. Ви повідомляєте Log Parser, яка інформація вам потрібна і як ви хочете її обробляти. Результати вашого запиту можуть бути відформатовані на замовлення у текстовому виведенні, або вони можуть міститись у таких спеціальних цілях, як SQL, SYSLOG або діаграма.

Більшість програмного забезпечення розроблені для виконання обмеженої кількості конкретних завдань. Log Parser відрізняється ... кількість способів його використання обмежена лише потребами та уявою користувача. Світ - це ваша база даних з Log Parser.

Навчальний посібник (та ще один ) щодо використання мови запитів SQL з файлами CSV, які я знайшов за допомогою google .

Приклад запиту:

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

Підтримка форуму та багато ваших запитань відповідуть на forums.iis.net/default.aspx?GroupID=51, який є офіційним форумом
реєстраторів

2
Більше прикладів на сайті codinghorror.com/blog/archives/000369.html Ніцца; шкода, що це тільки Windows.
Ар'ян

34

Я думаю, що база даних OpenOffice.org може робити все, що завгодно. Це працює так.

  1. Запустіть відкриту базу даних Office.org, вона показує " Майстер баз даних "

  2. Виберіть " Підключитися до існуючої бази даних: Текст "

    введіть тут опис зображення

  3. Вкажіть шлях до текстових файлів, а також деталі, такі як символ роздільника тощо.

    введіть тут опис зображення

  4. Створення та виконання запитів

    введіть тут опис зображення

Якщо ви коли-небудь працювали з Microsoft Access, ви знайдете GUI знайомий.


Якщо ви не можете без GUI, завжди є традиційні команди UNIX. Я їх багато використовую, щоб робити прості запити до (малих) CSV-файлів. Ось як це працює:

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`

Ух, чудова відповідь! +1
називаютьмоморті

Це виглядає як лише трюк. Я побачу, чи зможу я базуватись на цьому старечому лапі.
Дж. Полфер

+1. Класно! Не потрудився дослідити ОО. Завжди думав, що у MS O є край!
Swanand

хворий! як працює продуктивність великих файлів. Я перебуваю в біоінформатиці і маю величезну розмежувану вкладку
user2751

@ 1alstew1: Для великих файлів я тримаюся подалі від обох методів і використовую реальну базу даних. Також обов'язково використовуйте пакетний імпорт (LOAD) для отримання даних у вашу базу даних, це набагато швидше, ніж INSERT.
Людвіг Вайнцерль,

13

Ви можете використовувати ODBC для запиту текстових файлів:

Доступ до текстових файлів за допомогою постачальника даних ODBC

Зауважте, що для цього вам не потрібен MS Access, підручник у наведеному вище посиланні просто використовує MS Access для створення текстового файлу, але, оскільки у вас вже є текстовий файл, прокрутіть наполовину та запустіть підручник там, де ви бачите назва Доступ до текстового файлу .

Оновлення : я створив DSN для .csv-файлу сам, щоб мати можливість створити цей покроковий посібник ... ось він:

  • Переконайтесь, що ваш .csv файл знаходиться у власному каталозі без нічого іншого.
  • Відкрийте «Адміністратор джерела даних ODBC» (старт - панель управління - адміністративні засоби - Джерела даних (ODBC)).
  • Перейдіть на вкладку Файл DSN і натисніть "Додати ...".
  • Виберіть у списку "Текстовий драйвер Microsoft (* .txt, * .csv) та натисніть" Далі> ".
  • Укажіть ім’я джерела даних вашого файлу (наприклад, "тест") та натисніть "Далі>".
  • Натисніть "Готово" (Після цього з'явиться діалогове вікно, де поля "Ім'я джерела даних" та "Опис" дійсно затьмарені. Це нормально. Нічого страшного.
  • Зніміть прапорець "Використовувати поточний каталог". Кнопка "Вибрати каталог" буде включена.
  • Натисніть кнопку "Вибрати каталог" і перейдіть до папки, в яку ви розмістили .csv файл на першому кроці.
  • Натисніть кнопку «Параметри >>».
  • Натисніть кнопку "Визначити формат ...".
  • У лівому списку "Таблиці" виберіть файл .csv і натисніть кнопку "Відгадайте". (Це проаналізує ваш файл csv та створить відповідне поле для кожного стовпця у вашому файлі .csv.)
  • Пройдіть через створені стовпці (F1, F2, ...) у правому списку, дайте їм значущі імена та встановіть відповідний тип даних (іноді здогадки не завжди вірні).
  • Після того, як все налаштовано правильно, натисніть «ОК» (2 рази).

У цей момент у вас повинен бути файл DSN, за допомогою якого ви можете отримати доступ до файлу .csv через ODBC. Якщо ви оглянете свою папку, де розміщено файл .csv, ви побачите файл schema.ini, який містить щойно створений вами конфігурацію. Якщо у вас є кілька файлів .csv, кожен відповідає таблиці, і кожна таблиця буде мати файл [ ім'я .csv] у файлі schema.ini, у якому визначені різні стовпці ... Ви також можете створити / змінити цю схему .ini файл безпосередньо в текстовому редакторі замість описаного вище графічного інтерфейсу.

Що стосується вашого додаткового запитання "як підключитися до цього постачальника ODBC за допомогою інструменту запитів": у
мене є інструмент, який я давно написав сам, який не підходить для публікації. Але швидкий пошук у Google придумав odbc-view , безкоштовний інструмент, який робить все, що ви хочете.
Я завантажив і встановив інструмент.
Після запуску інструменту:

  • Клацніть на "DataSource ...".
  • Виберіть джерело даних, яке ви створили раніше (наприклад, "тест").
  • На панелі запитів введіть "select * from [ filename .csv]".
  • Натисніть «Виконати».

Ви повинні бачити вміст файлу .csv на нижній панелі зараз.
Сподіваюсь, це допоможе ... Повідомте мене, як ви робите, чи вам потрібна подальша допомога.


@ fretje - Я знаю, що мені не потрібен MS Access, щоб це працювало, я спробував це сам. У мене виникли дві проблеми з цим: 1. Я хочу мати графічний інтерфейс або утиліту CLI, з якою я можу використовувати запит на CSV-DB, коли закінчу. У підручнику, який ви цитували вище, нічого з цього не вказано, він передбачає, що ви хочете отримати доступ до цієї бази даних ODBC, написавши додаток .NET. 2. За допомогою ПК я б використовував це рішення, я не вважаю, що моє налаштування ODBC є достатнім для виконання цього рішення. Я не зміг назвати свій DSN під час створення провайдера даних ODBC, поле було зашмаровано. Можливо, проблема налаштування системи.
Дж. Полфер

@ fretje - якщо ви можете пояснити, як підключитися до цього постачальника ODBC за допомогою інструменту запиту, це було б добре; Я не знаю, як це зробити. Ніби не шукав відповіді на лову.
Дж. Полфер

8

Мені подобається використовувати R для швидкого доступу до файлів CSV. Хоча мова не є безпосередньо SQL, ви можете виконувати всі ці речі за допомогою простих команд в R. R, також надає вам можливість робити приємні графіки та багато інших потужностей.


5

Ви завжди можете прочитати файл в Excel і використовувати Excel як джерело даних через ODBC та запускати запити проти нього.


Я можу? Це звучить як чорна магія. Чи можете ви знайти посилання для підручника?
Дж. Полфер

2
@sheepsimulator: Excel просто відкриває файли CSV ... коли у вас є файл Excel, ви можете запитувати його за допомогою ODBC так само, як ви можете запитувати текстові файли (див. мою відповідь нижче).
fretje

5

Я виявив, що найпростіший спосіб досягти цього - просто використовувати вбудований функціонал імпорту CSV SQLite:

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

Тепер у вас є робоча база даних, яку ви можете запитувати, як завгодно. Я також вважаю, що ефективність вищезазначеного є хорошою, я просто імпортував три мільйони рядків за 10-15 секунд.


3

Я знайшов невеликий, не графічний додаток, який робить це: csvsql .

Документація тут .


Це ТОЧНО той тип програми, який я шукаю, хоча було б добре, якби у нього був графічний інтерфейс. На жаль, зараз я не маю гарного способу скласти його для вікна Win2k. Звернемось до вас. Крім того, автор не використовував автоматичне чи подібне приємне, тому для отримання компіляції знадобиться деяка джиггерипокерія.
Дж. Полфер

Це було дуже важко знайти, і це було єдине, що я міг знайти близько до того, що ви описали. Можливо, ідея комусь написати програму, яка може імпортувати текстові файли та запускати на них SQL-запити, використовуючи, наприклад, SQL Lite?
Стефан Тіберг

1
sqlite3(додаток командного рядка, який читає бази даних SQLite) має вбудовану підтримку для імпорту файлів - див. його команди .separator та .import на sqlite.org/sqlite.html
Arjan

1
Так, я бачив, як це згадувалося декілька разів у відповідях, але я думав більше про повноцінну програму, схожу на блокнот із вікном запиту.
Стефан Тіберг

3

Ви можете подивитися на безкоштовний інструмент q - Text як базу даних , що дозволяє виконувати SQL безпосередньо на файлах csv, включаючи приєднання, групування та будь-яку іншу конструкцію SQL. Також включає автоматичне виявлення назв стовпців та типів стовпців.

Це інструмент командного рядка, який відповідає способу роботи Linux (наприклад, Piping від stdin, якщо це необхідно, спеціальні прапорці для налаштування поведінки тощо).

Використовує sqlite за кадром, тому дуже легкий і простий у використанні.

Повне розкриття інформації - Це мій власний інструмент з відкритим кодом. Сподіваюся, вам здається корисним

Харел Бен-Аттіа


Цей інструмент абсолютно приголомшливий!
Dawid Ferenczy Rogožan

2

Інструмент, який я виявив, що, думаю, може полегшити це в майбутньому - Resolver One .

Це електронна таблиця, яка генерує код Python, який легко змінюється. Для тих, хто є розробниками, і періодично їм потрібно "відступити", щоб вирішити проблеми в електронних таблицях, це здається інтуїтивним способом вирішення проблем, пов’язаних з електронними таблицями, на мові, з якою вони знайомі.

І це дає мені привід використовувати Python. Python робить мене щасливим.


2

Драйвер H2 JDBC забезпечує дуже корисну функцію csvread, що дозволяє робити такі дії:

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

Існують різні способи використання цього драйвера, не заглиблюючись у написання коду, щоб використовувати його.

Особисто я віддаю перевагу Squirrel SQL Client, який надає вам приємний графічний інтерфейс для запуску запитів. Щоб використовувати його, все, що вам потрібно зробити, - вказати вже перелічений H2 In-Memoryшлях драйвера до завантаженого драйвера H2. Після того, як ви встановите відповідний псевдонім за допомогою драйвера, ви можете запускати будь-який випадковий SQL, який ви хочете. Результати відображаються в приємній таблиці та всіляких інших функціях для імпорту, експорту тощо.

Крім того, ви можете використовувати Groovy для написання швидкого сценарію для завантаження та використання драйвера при необхідності. Дивіться цей приклад блогу, щоб дізнатися, як це зробити.

Здається, хтось розширив вищевказаний скрипт і перетворив його на хороший інструмент командного рядка для запуску запитів, див. Gcsvsql. За допомогою цього ви можете запускати такі команди, як:

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


2

Я написав програму командного рядка для виконання довільного SQL у файлах csv, включаючи багатофайлові приєднання, звані gcsvsql. Про це ви можете прочитати тут:

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

Тут існує проект Google Code: http://code.google.com/p/gcsvsql/

Він написаний на Java / Groovy, і працюватиме в будь-якому місці, де Java буде доступна.

Редагувати: Активний проект переміщено до github. https://github.com/jdurbin/durbinlib



0

Хоча це не безкоштовно, найкраща програма, яку я знайшов для цього, - це File Query . На відміну від інших рішень, що базуються на командному рядку або потребують імпорту / налаштування файлу перед тим, як отримати доступ до нього, File Query дозволяє відкрити файл (навіть ГБ, вбудований як звичайний текстовий редактор, і автоматично розбере макет для вас, і нехай ви робите майже всі запити з простих діалогів.

Це трохи дорого, але якщо вам потрібно зробити щось лише один раз, ви завжди можете просто скористатися 30-денною пробною версією безкоштовно. Вони також мають чудові путівники та навіть відео для початку роботи.


0

можна використовувати WHS. Наприклад, у мене в каталозі 'C: \ Users \ user837 \ Desktop \ t4' є 4 файли: 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=,

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

Тепер просто двічі клацніть на Hello.js, і ви побачите sql reqult рядок за рядком. Перегляньте документацію WHS, щоб переглянути всі результати запитів.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.