Consultar un archivo CSV

30

¿Alguien sabe de una herramienta simple que abrirá un archivo CSV y le permitirá hacer consultas SQLesque básicas sobre él? Como una especie de herramienta gráfica, una que es fácil de usar.

Sé que podría escribir un pequeño script para importar el CSV a una base de datos SQLite, pero como me imagino que alguien más pensó en esto antes que yo, solo quería preguntar si existía. Lo que está provocando esta pregunta es que me siento frustrado con las capacidades limitadas de filtrado de Excel.

Quizás alguna otra herramienta de manipulación de visualización de datos proporcionaría una funcionalidad similar.

Se prefiere gratis u OSS, pero estoy abierto a cualquier sugerencia.

EDITAR:

Realmente preferiría algunos tutoriales claros sobre cómo hacer lo siguiente en lugar de simplemente "hacer de su hoja una entrada ODBC" o "escribir programas usando archivos ODBC", o más ideas sobre aplicaciones para usar. Nota: No puedo usar MS Access.

Otra edición más:

Todavía estoy abierto a soluciones con SQLite. Mi plataforma es una laptop Win2k semi antigua, con un P4. Es bastante lento, por lo que una solución de recursos livianos es ideal y probablemente obtendría la victoria.

J. Polfer
fuente
Solo para estar seguro: ¿todavía está abierto a soluciones con SQLite? (Como usar los comandos .separator y .import?) ¿Y en qué plataforma estás?
Arjan
Solo por curiosidad: ¿Por qué no puedes usar MS Access?
Ludwig Weinzierl
@ Arjan: sigo abierto a las soluciones que utilizan SQLite. Mi plataforma es una laca Win2k semi antigua, con un P4. Es bastante lento, por lo que una solución de recursos livianos es ideal y probablemente obtendría la victoria.
J. Polfer el
2
@ fretje: no debe tener ninguna experiencia con SQLite. 1 MB en total en el código fuente. Se usa en teléfonos celulares. El ejecutable Win32 (motor y todo) es de 300 KB.
J. Polfer el
1
@sheepsimulator: Sé que es ligero, pero mi punto sigue en pie ... El acceso ODBC a los archivos de texto está básicamente incorporado en el sistema operativo, mientras que con SQLite todavía tiene que instalar algo primero e importar el archivo csv a una base de datos. Instalar nada es aún menos que instalar algo muy pequeño, ¿no?
fretje

Respuestas:

13

¿Has probado LogParser ?

El analizador de registros es una herramienta potente y versátil que proporciona acceso de consulta universal a datos basados ​​en texto, como archivos de registro, archivos XML y archivos CSV, así como fuentes de datos clave en el sistema operativo Windows®, como el registro de eventos, el registro, el sistema de archivos y Active Directory®. Le dice a Log Parser qué información necesita y cómo desea que se procese. Los resultados de su consulta pueden formatearse de manera personalizada en resultados basados ​​en texto, o pueden persistirse en más destinos especializados como SQL, SYSLOG o un gráfico.

La mayoría del software está diseñado para realizar un número limitado de tareas específicas. Log Parser es diferente ... la cantidad de formas en que se puede usar está limitada solo por las necesidades y la imaginación del usuario. El mundo es su base de datos con Log Parser.

Un tutorial (y otro más ) sobre el uso del lenguaje de consulta similar a SQL con archivos CSV que encontré usando google .

Consulta de ejemplo:

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
fuente
Foro de apoyo y muchas de sus preguntas serán contestadas en forums.iis.net/default.aspx?GroupID=51 que es el foro oficial LogParser
svandragt
2
Más ejemplos en codinghorror.com/blog/archives/000369.html Nice; Lástima que solo sea Windows.
Arjan
34

Creo que la base de datos OpenOffice.org puede hacer lo que quieras. Funciona así.

  1. Inicie Open Office.org Database, muestra el " Asistente de base de datos "

  2. Seleccione " Conectarse a una base de datos existente: Texto "

    ingrese la descripción de la imagen aquí

  3. Especifique la ruta a los archivos de texto, así como detalles como el carácter separador, etc.

    ingrese la descripción de la imagen aquí

  4. Crear y ejecutar consultas

    ingrese la descripción de la imagen aquí

Si alguna vez trabajó con Microsoft Access, le resultará familiar la GUI.


Si puede prescindir de una GUI, siempre hay los comandos UNIX tradicionales. Los uso mucho para hacer consultas simples a archivos (pequeños) CSV. Así es como funciona:

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
fuente
Wow, gran respuesta! +1
conmemoran el
Esto parece solo el truco. Veré si puedo OO Base en este viejo lappy.
J. Polfer el
+1. ¡Guay! No me molesté en explorar OO. Siempre pensé que MS O tenía la ventaja!
Swanand
¡enfermos! cómo es el rendimiento para archivos grandes. Estoy en la bioinformática y tienen gran delimitado por tabuladores basura
user2751
@ 1alstew1: para archivos grandes, me mantendría alejado de ambos métodos y usaría una base de datos real. También asegúrese de utilizar la importación por lotes (LOAD) para obtener los datos en su base de datos, es mucho más rápido que INSERT.
Ludwig Weinzierl
13

Puede usar ODBC para consultar archivos de texto:

Acceso a archivos de texto utilizando el proveedor de datos ODBC

Tenga en cuenta que no necesita MS Access para que esto funcione, el tutorial en el enlace anterior solo usa MS Access para crear el archivo de texto, pero como ya tiene un archivo de texto, desplácese hacia abajo hasta la mitad e inicie el tutorial donde vea el título Acceso a un archivo de texto .

Actualización : Creé un DSN en un archivo .csv para poder crear este tutorial paso a paso ... aquí viene:

  • Asegúrese de que su archivo .csv esté en su propio directorio sin nada más.
  • Abra el "Administrador de fuente de datos ODBC" (inicio - panel de control - herramientas administrativas - Fuentes de datos (ODBC)).
  • Vaya a la pestaña DSN de archivo y haga clic en "Agregar ...".
  • Elija "Microsoft Text Driver (* .txt, * .csv) de la lista y haga clic en" Siguiente> ".
  • Dé un nombre a la fuente de datos de su archivo (por ejemplo, "prueba") y haga clic en "Siguiente>".
  • Haga clic en "Finalizar" (después de esto, aparecerá un cuadro de diálogo donde los campos "Nombre de fuente de datos" y "Descripción" están atenuados. Esto es normal. No se preocupe.
  • Desmarca la casilla de verificación "Usar el directorio actual". El botón "Seleccionar directorio" estará habilitado.
  • Haga clic en el botón "Seleccionar directorio" y navegue hasta la carpeta en la que colocó su archivo .csv en el primer paso.
  • Haga clic en el botón "Opciones >>".
  • Haga clic en el botón "Definir formato ...".
  • En la lista de "Tablas" de la izquierda, seleccione su archivo .csv y haga clic en el botón "Adivinar". (Esto analizará su archivo csv y creará un campo apropiado para cada columna en su archivo .csv).
  • Ir a través de las columnas generadas (F1, F2, ...) en la lista correcta, darles nombres significativos y establecer el tipo de datos apropiado (a veces la suposición no siempre es correcta).
  • Una vez que todo esté configurado correctamente, haga clic en "Aceptar" (2 veces).

En este punto, debe tener un DSN de archivo con el que puede acceder a su archivo .csv a través de ODBC. Si inspecciona su carpeta donde está ubicado el archivo .csv, verá un archivo schema.ini, que contiene la configuración que acaba de crear. Cuando tiene varios archivos .csv, cada uno corresponde con una tabla y cada tabla tendrá un bloque [ filename .csv] en el archivo schema.ini en el que se definen las diferentes columnas ... También puede crear / cambiar ese esquema .ini directamente en un editor de texto en lugar de usar la GUI descrita anteriormente.

En cuanto a su pregunta adicional "cómo conectarse a este proveedor ODBC utilizando una herramienta de consulta":
tengo una herramienta que escribí hace mucho tiempo y que no es elegible para publicación. Pero una búsqueda rápida en Google apareció con odbc-view , una herramienta gratuita que hace lo que quieres.
Descargué e instalé la herramienta.
Después de iniciar la herramienta:

  • Haga clic en "DataSource ...".
  • Seleccione su Fuente de datos de archivo que creó anteriormente (por ejemplo, "prueba").
  • En el panel de consulta, escriba "select * from [ filename .csv]".
  • Haga clic en "Ejecutar".

Debería ver el contenido de su archivo .csv en el panel inferior ahora.
Espero que esto ayude ... Avíseme cómo le va o si necesita más ayuda.

fretje
fuente
@ fretje - Sé que no necesito MS Access para que esto funcione, lo probé yo mismo. Me encontré con dos problemas con esto: 1. Quiero tener una GUI o una utilidad CLI que pueda usar para consultar el CSV-DB cuando haya terminado. El tutorial que ha citado anteriormente no enumera nada de eso, se supone que desea acceder a esta base de datos ODBC escribiendo una aplicación .NET. 2. Con la PC en la que usaría esta solución, no creo que mi configuración de ODBC sea suficiente para seguir esta solución. No pude nombrar mi DSN en el momento de creación del proveedor de datos ODBC, el cuadro estaba atenuado. Tal vez un problema de configuración del sistema.
J. Polfer el
@ fretje: si puede explicar cómo conectarse a este proveedor ODBC utilizando una herramienta de consulta, sería bueno; No sé cómo hacer eso. Estaba buscando una respuesta general.
J. Polfer el
8

Me gusta usar R para acceder a archivos csv de manera rápida. Si bien el lenguaje no es directamente SQL, puede hacer todas esas cosas con comandos simples en R. R también le brinda la capacidad de hacer buenos gráficos y mucha otra potencia.

cristiano
fuente
5

Siempre puede leer el archivo en Excel y usar Excel como su fuente de datos a través de ODBC y ejecutar consultas en él.

m.floryan
fuente
¿Yo puedo? Esto suena como magia negra. ¿Puedes encontrar un enlace para un tutorial?
J. Polfer
2
@sheepsimulator: Excel solo abre archivos csv ... una vez que tenga un archivo de Excel, puede consultarlo con ODBC al igual que puede consultar archivos de texto (vea mi respuesta a continuación).
fretje
5

Descubrí que la forma más sencilla de lograr esto es usar la funcionalidad de importación CSV incorporada de SQLite:

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

Ahora tiene una base de datos en funcionamiento que puede consultar como desee. También encontré que el rendimiento de lo anterior es bueno, acabo de importar tres millones de filas en 10-15 segundos.

Markus Amalthea Magnuson
fuente
3

Encontré una pequeña aplicación no gráfica que hace esto: csvsql .

La documentación está aquí .

Stefan Thyberg
fuente
Este es EXACTAMENTE el tipo de aplicación que estoy buscando, aunque sería bueno si tuviera una GUI. Lamentablemente, realmente no tengo una buena manera en este momento para compilarlo para el cuadro Win2k. Se pondrá en contacto contigo. Además, el autor no usó automake ni nada bueno así que compilar requerirá algo de jiggerypokery.
J. Polfer el
Fue muy difícil de encontrar y fue lo único que pude encontrar cerca de lo que describiste. ¿Quizás sea una idea que alguien escriba una aplicación que pueda importar archivos de texto y ejecutar consultas SQL en ellos usando, por ejemplo, SQL Lite?
Stefan Thyberg
1
sqlite3(la aplicación de línea de comandos que lee bases de datos SQLite) tiene soporte incorporado para importar archivos - vea sus comandos .separator y .import en sqlite.org/sqlite.html
Arjan
1
Sí, lo vi mencionado varias veces en las respuestas, pero estaba pensando más en una aplicación de tipo bloc de notas con una ventana de consulta.
Stefan Thyberg
3

Puede echar un vistazo a la herramienta gratuita q - Texto como una base de datos , que permite ejecutar SQL directamente en archivos csv, incluidas combinaciones, agrupaciones y cualquier otra construcción SQL. También incluye la detección automática de nombres de columna y tipos de columna.

Es una herramienta de línea de comandos que coincide con la forma de operación de Linux (por ejemplo, tuberías desde stdin si es necesario, indicadores especiales para personalizar el comportamiento, etc.).

Utiliza sqlite detrás de escena, muy ligero y fácil de usar.

Divulgación completa: es mi propia herramienta de código abierto. Esperamos que te sea útil

Harel Ben-Attia

Harel Ben Attia
fuente
¡Esta herramienta es absolutamente increíble!
Dawid Ferenczy Rogožan
2

Creo que una herramienta que he encontrado que, en el futuro, puede facilitar esto es Resolver One .

Es una hoja de cálculo que genera código Python que se puede modificar fácilmente. Para aquellos que son desarrolladores, y en ocasiones necesitan "retirarse" para resolver problemas en hojas de cálculo, esta parece ser una forma intuitiva de resolver problemas de hojas de cálculo en un lenguaje con el que están familiarizados.

Y me da una excusa para usar Python. Python me hace feliz.

J. Polfer
fuente
2

El controlador H2 JDBC proporciona una función csvread muy útil, que le permite hacer cosas como las siguientes:

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

Hay varias maneras de hacer uso de este controlador sin tener que profundizar en escribir código para usarlo.

Personalmente, prefiero el Squirrel SQL Client, que le ofrece una buena interfaz gráfica de usuario para ejecutar consultas. Para usarlo, todo lo que necesita hacer es apuntar la H2 In-Memoryruta de clase del controlador ya listada al controlador H2 que ha descargado. Una vez que haya configurado un alias adecuado con el controlador, puede ejecutar el SQL aleatorio que desee. Los resultados se muestran en una buena tabla y todo tipo de otras características para importar, exportar, etc.

Alternativamente, puede usar Groovy para escribir un script rápido para cargar y usar el controlador según sea necesario. Vea este blogpost de ejemplo para saber cómo.

Parece que alguien ha extendido el maravilloso script anterior y lo ha convertido en una buena herramienta de línea de comandos para ejecutar las consultas, consulte gcsvsql. Con esto puedes ejecutar comandos como el siguiente:

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

Es posible que desee probar la herramienta Q . Es muy liviano, solo requiere Python 2.5 o más reciente.

agrrd
fuente
2

He escrito un programa de línea de comandos para ejecutar SQL arbitrario en un archivo csv, incluidas combinaciones de varios archivos, llamado gcsvsql. Usted puede leer sobre ello aquí:

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

Hay un proyecto de Google Code para ello aquí: http://code.google.com/p/gcsvsql/

Está escrito en Java / Groovy, y se ejecutará en cualquier lugar donde Java esté disponible.

Editar: proyecto activo movido a github. https://github.com/jdurbin/durbinlib

James Durbin
fuente
0

Si bien no es gratis, el mejor programa que he encontrado para esto es File Query . A diferencia de las otras soluciones que se basan en la línea de comandos o que requieren importar / configurar el archivo antes de acceder a él, File Query le permite abrir un archivo (incluso los GB están como un editor de texto normal, y analizará automáticamente el diseño por usted, y le permite hacer casi todas sus consultas desde diálogos simples.

Es un poco caro, pero si solo necesita hacer algo una vez, siempre puede usar la prueba de 30 días de forma gratuita. También tienen excelentes guías e incluso videos para comenzar.

Jeffrey Harmon
fuente
0

puedes usar WHS. Por ejemplo, tengo 4 archivos en el directorio '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=,

y hola.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();
}

Ahora solo haga doble clic en Hello.js y verá sql reqult línea por línea. Consulte la documentación de WHS para ver todos los resultados de la consulta.

Oleg
fuente