Запрос файла CSV

30

Кто-нибудь знает простой инструмент, который откроет CSV-файл и позволит вам выполнять базовые SQLesque-запросы к нему? Как своего рода графический инструмент, который прост в использовании.

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

Возможно, какой-то другой инструмент для манипулирования визуализацией данных предоставит аналогичные функции.

Бесплатно или OSS предпочтительнее, но я открыт для любых предложений.

РЕДАКТИРОВАТЬ:

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

Еще один РЕДАКТИРОВАТЬ:

Я все еще открыт для решений, использующих SQLite. Моя платформа - это полу-древний ноутбук Win2k с P4 на нем. Он довольно медленный, поэтому решение с ограниченным использованием ресурсов является идеальным и, вероятно, получит победу.

Дж. Полфер
источник
Просто чтобы быть уверенным: вы все еще открыты для решений, использующих SQLite? (Например, с помощью команд .separator и .import?) А на какой платформе вы находитесь?
Арджан
Просто из любопытства: почему вы не можете использовать MS Access?
Людвиг Вайнцерль
@ 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
svandragt
источник
Поддержка форума и многие ваши вопросы будут даны ответы на forum.iis.net/default.aspx?GroupID=51, который является официальным форумом
logparser
2
Больше примеров на codinghorror.com/blog/archives/000369.html Nice; Жаль, что это только Windows.
Арджан
34

Я думаю, что база данных OpenOffice.org может делать то, что вы хотите. Это работает так.

  1. Запустите Открыть базу данных Office.org, в ней отображается « Мастер баз данных »

  2. Выберите « Подключиться к существующей базе данных: Текст »

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

  3. Укажите путь к текстовым файлам, а также такие детали, как символ-разделитель и т. Д.

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

  4. Создание и выполнение запросов

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

Если вы когда-либо работали с Microsoft Access, вы найдете знакомый графический интерфейс.


Если вы можете обойтись без графического интерфейса, всегда есть традиционные команды 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
вспоминают
Это похоже на трюк. Я посмотрю, смогу ли я OO Base на эту стареющую лапу.
Дж. Полфер
+1. Круто! Не удосужился изучить ОО. Всегда думал, что MS O имеет преимущество!
Суонанд
болен! как производительность для больших файлов. Я в биоинформатике и у меня огромный мусор с разделителями табуляции
user2751
@ 1alstew1: для больших файлов я бы держался подальше от обоих методов и использовал бы настоящую базу данных. Также обязательно используйте пакетный импорт (LOAD) для загрузки данных в вашу базу данных, это намного быстрее, чем INSERT.
Людвиг Вайнцерль
13

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

Доступ к текстовым файлам с использованием ODBC Data Provider

Обратите внимание, что вам не нужен MS Access для этого, учебник по приведенной выше ссылке просто использует MS Access для создания текстового файла, но, поскольку у вас уже есть текстовый файл, прокрутите вниз наполовину и запустите учебник, где вы видите заголовок Доступ к текстовому файлу .

Обновление : я создал DSN для файла .csv сам, чтобы иметь возможность создать это пошаговое руководство ... вот оно:

  • Убедитесь, что ваш файл .csv находится в своем собственном каталоге, и ничего больше.
  • Откройте «Администратор источника данных ODBC» (Пуск - Панель управления - Инструменты администрирования - Источники данных (ODBC)).
  • Перейдите на вкладку File DSN и нажмите «Добавить ...».
  • Выберите «Текстовый драйвер Microsoft (* .txt, * .csv)» из списка и нажмите «Далее>».
  • Дайте имя для вашего источника данных файла (например, «тест») и нажмите «Далее>».
  • Нажмите «Готово» (После этого появится диалоговое окно, в котором поля «Имя источника данных» и «Описание» действительно неактивны. Это нормально. Не беспокойтесь.
  • Снимите флажок «Использовать текущий каталог». Кнопка «Выбрать каталог» будет включена.
  • Нажмите кнопку «Выбрать каталог» и откройте папку, в которую вы поместили файл .csv на первом шаге.
  • Нажмите на кнопку «Опции >>».
  • Нажмите на кнопку «Определить формат ...».
  • В левом списке «Таблицы» выберите файл .csv и нажмите кнопку «Угадай». (Это проанализирует ваш CSV-файл и создаст соответствующее поле для каждого столбца в вашем CSV-файле.)
  • Просмотрите сгенерированные столбцы (F1, F2, ...) в правом списке, дайте им значимые имена и установите соответствующий тип данных (иногда угадывание не всегда верно).
  • После того, как все настроено правильно, нажмите «ОК» (2 раза).

На этом этапе у вас должен быть файл DSN, с помощью которого вы можете получить доступ к вашему CSV-файлу через ODBC. Если вы проверите свою папку, в которой находится файл .csv, вы увидите файл schema.ini, который содержит только что созданную вами конфигурацию. Если у вас есть несколько файлов .csv, каждый из них соответствует таблице, и у каждой таблицы будет блок [ filename .csv] в файле schema.ini, в котором определены различные столбцы ... Вы также можете создать / изменить эту схему .ini файл непосредственно в текстовом редакторе вместо использования графического интерфейса, описанного выше.

Что касается вашего дополнительного вопроса «как подключиться к этому провайдеру ODBC с помощью инструмента запросов»: у
меня есть инструмент, который я написал сам давно, который не подходит для публикации. Но быстрый поиск в Google дал odbc-view , бесплатный инструмент, который делает то, что вы хотите.
Я скачал и установил инструмент.
После запуска инструмента:

  • Нажмите «Источник данных ...».
  • Выберите источник данных файла, который вы создали ранее (например, «тест»).
  • В области запросов введите «select * from [ filename .csv]».
  • Нажмите «Выполнить».

Вы должны увидеть содержимое вашего .csv файла в нижней панели.
Надеюсь, это поможет ... Дайте мне знать, как вы делаете, или если вам нужна дополнительная помощь.

fretje
источник
@ 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 и выполнять запросы к нему.

m.floryan
источник
Я могу? Это звучит как черная магия. Можете ли вы найти ссылку на учебник?
Дж. Полфер
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 box. Вернемся к вам. Кроме того, автор не использовал automake или что-то подобное, поэтому для компиляции потребуются некоторые jiggerypokery.
Дж. Полфер
Это было очень трудно найти, и это было единственное, что я мог найти близко к тому, что вы описали. Может быть, идея для кого-то написать приложение, которое может импортировать текстовые файлы и выполнять SQL-запросы к ним, используя, например, SQL Lite?
Стефан Тиберг
1
sqlite3(приложение командной строки, которое читает базы данных SQLite) имеет встроенную поддержку для импорта файлов - см. его команды .separator и .import по адресу sqlite.org/sqlite.html
Arjan
1
Да, я видел, что это упоминалось несколько раз в ответах, но я больше думал о полноценном приложении, похожем на блокнот, с окном запросов.
Стефан Тиберг
3

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

Это инструмент командной строки, который соответствует способу работы Linux (например, передача из stdin, если необходимо, специальные флаги для настройки поведения и т. Д.).

За кулисами использует sqlite, поэтому очень легкий и простой в использовании.

Полное раскрытие - это мой собственный инструмент с открытым исходным кодом. Надеюсь, вы найдете ее полезной

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

Харел Бен Аттиа
источник
Этот инструмент просто потрясающий!
Давид Ференци Рогожан
2

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

Это электронная таблица, которая генерирует код Python, который легко модифицируется. Для тех, кто является разработчиками и которым иногда приходится «уходить» для решения проблем в электронных таблицах, это кажется интуитивно понятным способом решения проблем, связанных с электронными таблицами, на языке, с которым они знакомы.

И это дает мне повод использовать Python. Python делает меня счастливым.

Дж. Полфер
источник
2

Драйвер JDBC H2 предоставляет очень полезную функцию 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 для написания быстрого скрипта для загрузки и использования драйвера по мере необходимости. Посмотрите этот пример блога, чтобы узнать, как.

Похоже, кто-то расширил вышеупомянутый скрипт groovy и превратил его в хороший инструмент командной строки для запуска запросов, см. Gcsvsql. При этом вы можете запускать команды, подобные следующим:

gcsvsql "select * from people.csv where age > 40"
lstg
источник
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

Джеймс Дурбин
источник
1

Еще две опции для этой задачи: querycsv и fsql . Querycsv является Python и использует sqlite3. Fsql является Perl и использует DBD :: CSV .

нельсон
источник
0

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

Это немного дорого, но если вам нужно сделать что-то один раз, вы всегда можете просто использовать 30-дневную пробную версию бесплатно. У них также есть отличные руководства и даже видео, чтобы вы начали.

Джеффри Хармон
источник
0

Вы можете использовать WHS. Например, у меня есть 4 файла в каталоге '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=,

и 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 для просмотра всех результатов запроса.

Олег
источник