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

32936
J. Polfer

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

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

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

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

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

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

Еще одно редактирование:

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

28
Просто чтобы быть уверенным: вы все еще открыты для решений, использующих SQLite? (Например, с помощью команд .separator и .import?) А на какой платформе вы находитесь? Arjan 14 лет назад 0
Просто из любопытства: почему вы не можете использовать MS Access? Ludwig Weinzierl 14 лет назад 0
@ Arjan - я все еще открыт для решений, использующих SQLite. Моя платформа - это полу-древняя Win2k-лапа с P4 на ней. Он довольно медленный, поэтому решение с ограниченным использованием ресурсов является идеальным и, вероятно, получит победу. J. Polfer 14 лет назад 0
SQLite может иметь в своем названии «Lite» ... не думаю, что установка полной базы данных будет легче, чем прямой доступ к текстовому файлу через ODBC (текстовые драйверы MS ODBC должны быть в вашей win2k-установке по умолчанию, я думаю, в противном случае вы можете установить MDAC: http://msdn.microsoft.com/en-us/data/aa937729.aspx). fretje 14 лет назад 0
@ fretje - Вы не должны иметь никакого опыта работы с SQLite. Всего 1 МБ в исходном коде. Он используется на мобильных телефонах. Исполняемый файл Win32 (двигатель и все) составляет 300 КБ. J. Polfer 14 лет назад 2
@sheepsimulator: Я знаю, что это легко, но моя точка зрения остается неизменной ... Доступ ODBC к текстовым файлам в основном включен в ОС, в то время как с SQLite вам все равно сначала нужно что-то установить и импортировать файл CSV в базу данных. Установка ничего не менее, чем установка чего-то очень маленького, не так ли? fretje 14 лет назад 1

16 ответов на вопрос

33
Ludwig Weinzierl

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

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

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

    enter image description here

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

    enter image description here

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

    enter image description here

Если вы когда-либо работали с 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 theycallmemorty 14 лет назад 0
Это похоже на трюк. Я посмотрю, смогу ли я OO Base на эту стареющую лапу. J. Polfer 14 лет назад 0
+1. Здорово! Не удосужился изучить ОО. Всегда думал, что MS O имеет преимущество! Swanand 14 лет назад 0
болен! как производительность для больших файлов. Я нахожусь в биоинформатике и имею огромный мусор с разделителями табуляции user2751 14 лет назад 0
@ 1alstew1: для больших файлов я бы держался подальше от обоих методов и использовал бы настоящую базу данных. Также обязательно используйте пакетный импорт (LOAD) для загрузки данных в вашу базу данных, это намного быстрее, чем INSERT. Ludwig Weinzierl 14 лет назад 0
@ Людвиг Я имел в виду в основном для язычников - мог отправить файл и SQL с ним. У этих людей есть openoffice, но они не собираются использовать клиент БД. Спасибо user2751 14 лет назад 0
Я думал, что ОП попросил * простой инструмент * ;-). Не могу сказать, что oo.org - это просто. fretje 14 лет назад 0
@ user2751 Я могу подтвердить, что производительность (на окнах) для больших файлов невелика, лучше использовать Log Parser. Tao 10 лет назад 0
Отличный ответ, хотя - чистый и простой в использовании, и кросс-ОС (в отличие от парсера журнала, который хорош, но только для окон)! Tao 10 лет назад 0
Набор команд Unix интересен. Какие-нибудь примеры объединения тех команд, которые соответствуют реальным запросам SQL? Приятно видеть реальные практические примеры, а не только список команд. David 8 лет назад 0
13
fretje

Вы можете использовать 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, каждый из них соответствует таблице, и у каждой таблицы будет блок [ имя файла .csv] в файле schema.ini, в котором определены различные столбцы ... Вы также можете создать / изменить эту схему .ini файл непосредственно в текстовом редакторе вместо использования графического интерфейса, описанного выше.

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

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

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

@ fretje - я знаю, что для этого не нужен MS Access, я попробовал сам. С этим я столкнулся с двумя проблемами: 1. Мне нужен GUI или утилита CLI, с помощью которой я могу делать запросы к CSV-DB, когда я закончу. В приведенном выше учебнике ничего из этого не указано, предполагается, что вы хотите получить доступ к этой базе данных ODBC, написав приложение .NET. 2. С ПК, на котором я бы использовал это решение, я не думаю, что моей настройки ODBC достаточно, чтобы следовать этому решению. Я не смог назвать свой DSN во время создания провайдера данных ODBC, поле было серым. Возможно проблема с настройкой системы. J. Polfer 14 лет назад 0
@ fretje - если вы можете объяснить, как подключиться к этому провайдеру ODBC с помощью инструмента запросов, это было бы неплохо; Я не знаю, как это сделать. Был своего рода поиском всеобъемлющего ответа. J. Polfer 14 лет назад 0
12
svandragt

Вы пробовали 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 
Поддержка форума и ответы на многие ваши вопросы вы найдете по адресу http://forums.iis.net/default.aspx?GroupID=51, который является официальным форумом logparser. svandragt 14 лет назад 0
Дополнительные примеры на http://www.codinghorror.com/blog/archives/000369.html Nice; Жаль, что это только Windows. Arjan 14 лет назад 2
8
Christian

Мне нравится использовать R для быстрого доступа к CSV-файлам. Хотя язык не является непосредственно SQL, вы можете делать все эти вещи с помощью простых команд в R. R также предоставляет вам возможность создавать красивые графики и многое другое.

5
m.floryan

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

Я могу? Это звучит как черная магия. Можете ли вы найти ссылку на учебник? J. Polfer 14 лет назад 0
@sheepsimulator: Excel просто открывает CSV-файлы ... как только у вас есть Excel-файл, вы можете запросить его с ODBC точно так же, как вы можете запрашивать текстовые файлы (см. мой ответ ниже). fretje 14 лет назад 2
3
Stefan Thyberg

Я нашел небольшое неграфическое приложение, которое делает это: csvsql .

Документация здесь .

Это * ИМЕННО * тип приложения, которое я ищу, хотя было бы неплохо, если бы у него был графический интерфейс. К сожалению, сейчас у меня действительно нет хорошего способа скомпилировать его для Win2k box. Вернемся к вам. Кроме того, автор не использовал Automake или что-то подобное, поэтому для компиляции потребуются некоторые jiggerypokery. J. Polfer 14 лет назад 0
Это было очень трудно найти, и это было единственное, что я мог найти близко к тому, что вы описали. Может быть, идея для кого-то написать приложение, которое может импортировать текстовые файлы и выполнять SQL-запросы к ним, используя, например, SQL Lite? Stefan Thyberg 14 лет назад 0
`sqlite3` (приложение командной строки, которое читает базы данных SQLite) имеет встроенную поддержку для импорта файлов - см. его команды .separator и .import по адресу http://www.sqlite.org/sqlite.html. Arjan 14 лет назад 1
Да, я видел, что это упоминалось несколько раз в ответах, но я думал больше о полноценном приложении, похожем на блокнот, с окном запросов. Stefan Thyberg 14 лет назад 1
2
J. Polfer

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

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

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

2
lstg

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

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

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

Я написал программу командной строки для выполнения произвольного 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

2
Harel Ben Attia

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

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

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

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

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

Похожие вопросы