Interroger un fichier CSV

30

Quelqu'un connaît-il un outil simple qui ouvrira un fichier CSV et vous permettra de faire des requêtes SQLesque de base sur celui-ci? Comme un outil graphique quelconque, facile à utiliser.

Je sais que je pourrais écrire un petit script pour faire une importation du CSV dans une base de données SQLite, mais comme j'imagine que quelqu'un d'autre a pensé à cela avant moi, je voulais juste savoir s'il en existait un. Ce qui pose cette question, c'est que je suis frustré par les capacités de filtrage limitées d'Excel.

Peut-être qu'un autre outil de manipulation de visualisation de données fournirait des fonctionnalités similaires.

Gratuit ou OSS est préférable, mais je suis ouvert à toutes suggestions.

MODIFIER:

Je préférerais vraiment des tutoriels clairs sur la façon de faire ce qui suit au lieu de simplement "faire de votre feuille une entrée ODBC" ou "écrire des programmes en utilisant des fichiers ODBC", ou plus d'idées sur les applications à utiliser. Remarque: je ne peux pas utiliser MS Access.

Encore un autre EDIT:

Je suis toujours ouvert aux solutions utilisant SQLite. Ma plate-forme est un ordinateur portable Win2k semi-ancien, avec un P4 dessus. C'est assez lent, donc une solution légère est idéale et gagnerait probablement.

J. Polfer
la source
Juste pour être sûr: vous êtes toujours ouvert aux solutions utilisant SQLite? (Comme utiliser les commandes .separator et .import?) Et sur quelle plateforme êtes-vous?
Arjan
Par curiosité: pourquoi ne pouvez-vous pas utiliser MS Access?
Ludwig Weinzierl
@ Arjan - Je suis toujours ouvert aux solutions utilisant SQLite. Ma plate-forme est un lappy semi-ancien Win2k, avec un P4 dessus. C'est assez lent, donc une solution légère est idéale et gagnerait probablement.
J.Polfer
2
@ fretje - Vous ne devez avoir aucune expérience avec SQLite. 1 Mo au total dans le code source. Il est utilisé sur les téléphones portables. L'exécutable Win32 (moteur et tout) est de 300 Ko.
J.Polfer
1
@sheepsimulator: Je sais que c'est léger, mais mon argument est toujours valable ... L'accès ODBC aux fichiers texte est fondamentalement intégré dans le système d'exploitation, tandis qu'avec SQLite, vous devez toujours installer quelque chose en premier et importer le fichier csv dans une base de données. Installer rien, c'est encore moins que d'installer quelque chose de très petit, n'est-ce pas?
fretje

Réponses:

13

Avez-vous essayé LogParser ?

L'analyseur de journaux est un outil puissant et polyvalent qui fournit un accès universel aux requêtes aux données textuelles telles que les fichiers journaux, les fichiers XML et les fichiers CSV, ainsi qu'aux principales sources de données sur le système d'exploitation Windows® telles que le journal des événements, le registre, le système de fichiers et Active Directory®. Vous indiquez à Log Parser les informations dont vous avez besoin et la manière dont vous souhaitez qu'elles soient traitées. Les résultats de votre requête peuvent être mis en forme de manière personnalisée dans une sortie basée sur du texte, ou ils peuvent être conservés sur des cibles plus spécialisées comme SQL, SYSLOG ou un graphique.

La plupart des logiciels sont conçus pour accomplir un nombre limité de tâches spécifiques. Log Parser est différent ... le nombre de façons dont il peut être utilisé n'est limité que par les besoins et l'imagination de l'utilisateur. Le monde est votre base de données avec Log Parser.

Un tutoriel (et un autre ) sur l'utilisation du langage de requête de type SQL avec des fichiers CSV que j'ai trouvé en utilisant google .

Exemple de requête:

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
la source
Le support du forum et la plupart de vos questions seront répondues sur forums.iis.net/default.aspx?GroupID=51 qui est le forum officiel de logparser
svandragt
2
Plus d'exemples sur codinghorror.com/blog/archives/000369.html Nice; dommage c'est Windows seulement.
Arjan
34

Je pense que la base de données OpenOffice.org peut faire ce que vous voulez. Cela fonctionne comme ça.

  1. Démarrez la base de données Open Office.org, elle affiche «l' Assistant de base de données »

  2. Sélectionnez " Se connecter à une base de données existante: Texte "

    entrez la description de l'image ici

  3. Spécifiez le chemin d'accès aux fichiers texte ainsi que des détails tels que le caractère de séparation, etc.

    entrez la description de l'image ici

  4. Créer et exécuter des requêtes

    entrez la description de l'image ici

Si vous avez déjà travaillé avec Microsoft Access, vous trouverez familier l'interface graphique.


Si vous pouvez vous passer d'une interface graphique, il existe toujours les commandes UNIX traditionnelles. Je les utilise beaucoup pour faire des requêtes simples sur de (petits) fichiers CSV. Voici comment cela fonctionne:

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
la source
Wow, bonne réponse! +1
theycallmemorty
Cela ressemble à l'astuce. Je vais voir si je peux OO Base sur ce lappy vieillissant.
J.Polfer
+1. Cool! Je n'ai pas pris la peine d'explorer OO. J'ai toujours pensé que MS O avait l'avantage!
Swanand
malade! comment sont les performances pour les fichiers volumineux. Je suis en bioinformatique et j'ai d'énormes ordures délimitées par des tabulations
user2751
@ 1alstew1: Pour les fichiers volumineux, je resterais à l'écart des deux méthodes et utiliserais une vraie base de données. Assurez-vous également d'utiliser l'importation par lots (LOAD) pour obtenir les données dans votre base de données, c'est beaucoup plus rapide que INSERT.
Ludwig Weinzierl
13

Vous pouvez utiliser ODBC pour interroger des fichiers texte:

Accès aux fichiers texte à l'aide du fournisseur de données ODBC

Notez que vous n'avez pas besoin de MS Access pour que cela fonctionne, le tutoriel dans le lien ci-dessus utilise simplement MS Access pour créer le fichier texte, mais comme vous avez déjà un fichier texte, faites défiler vers le bas à mi-chemin et démarrez le tutoriel où vous voyez le titre Accès à un fichier texte .

Mise à jour : j'ai moi-même créé un DSN sur un fichier .csv pour pouvoir créer ce tutoriel pas à pas ... le voici:

  • Assurez-vous que votre fichier .csv se trouve dans son propre répertoire sans rien d'autre.
  • Ouvrez "ODBC Data Source Administrator" (démarrer - panneau de configuration - outils d'administration - Data Sources (ODBC)).
  • Allez dans l'onglet Fichier DSN et cliquez sur "Ajouter ...".
  • Choisissez "Microsoft Text Driver (* .txt, * .csv) dans la liste et cliquez sur" Suivant> ".
  • Donnez un nom à votre source de données de fichier (par exemple "test") et cliquez sur "Suivant>".
  • Cliquez sur "Terminer" (Après cela, une boîte de dialogue apparaîtra où les champs "Nom de la source de données" et "Description" sont en effet grisés. C'est normal. Pas de soucis.
  • Décochez la case "Utiliser le répertoire actuel". Le bouton "Sélectionner répertoire" sera activé.
  • Cliquez sur le bouton "Sélectionner le répertoire" et accédez au dossier dans lequel vous avez placé votre fichier .csv lors de la première étape.
  • Cliquez sur le bouton "Options >>".
  • Cliquez sur le bouton "Définir le format ...".
  • Dans la liste de gauche "Tables", sélectionnez votre fichier .csv et cliquez sur le bouton "Deviner". (Cela analysera votre fichier csv et créera un champ approprié pour chaque colonne de votre fichier .csv.)
  • Parcourez les colonnes générées (F1, F2, ...) dans la liste de droite, donnez-leur des noms significatifs et définissez le type de données approprié (parfois la supposition n'est pas toujours correcte).
  • Une fois que tout est bien configuré, cliquez sur "OK" (2 fois).

À ce stade, vous devez disposer d'un fichier DSN avec lequel vous pouvez accéder à votre fichier .csv via ODBC. Si vous inspectez votre dossier où le fichier .csv est placé, vous verrez un fichier schema.ini, qui contient la configuration que vous venez de créer. Lorsque vous avez plusieurs fichiers .csv, chacun correspond à une table et chaque table aura un bloc [ nom de fichier .csv] dans le fichier schema.ini dans lequel les différentes colonnes sont définies ... Vous pouvez également créer / modifier ce schéma Fichier .ini directement dans un éditeur de texte au lieu d'utiliser l'interface graphique décrite ci-dessus.

Quant à votre question supplémentaire "comment se connecter à ce fournisseur ODBC à l'aide d'un outil de requête":
j'ai un outil que j'ai écrit moi-même il y a longtemps et qui n'est pas éligible à la publication. Mais une recherche rapide sur Google a abouti à odbc-view , un outil gratuit qui fait ce que vous voulez.
J'ai téléchargé et installé l'outil.
Après avoir démarré l'outil:

  • Cliquez sur "DataSource ...".
  • Sélectionnez votre source de données de fichier que vous avez créée précédemment (par exemple "test").
  • Dans le volet de requête, tapez "sélectionnez * dans [ nom de fichier .csv]".
  • Cliquez sur "Exécuter".

Vous devriez maintenant voir le contenu de votre fichier .csv dans le volet inférieur.
J'espère que cela vous aidera ... Faites-moi savoir comment vous faites ou si vous avez besoin d'aide.

fretje
la source
@ fretje - Je sais que je n'ai pas besoin de MS Access pour que cela fonctionne, je l'ai essayé moi-même. J'ai rencontré deux problèmes avec ceci: 1. Je veux avoir une interface graphique ou un utilitaire CLI que je peux utiliser pour interroger le CSV-DB lorsque j'aurai terminé. Le didacticiel que vous avez cité ci-dessus ne répertorie rien de tout cela, il suppose que vous souhaitez accéder à cette base de données ODBC en écrivant une application .NET. 2. Avec le PC sur lequel j'utiliserais cette solution, je ne pense pas que ma configuration ODBC soit suffisante pour suivre cette solution. Je n'ai pas pu nommer mon DSN au moment de la création du fournisseur de données ODBC, la boîte était grisée. Peut-être un problème de configuration du système.
J.Polfer
@ fretje - si vous pouvez expliquer comment se connecter à ce fournisseur ODBC à l'aide d'un outil de requête, ce serait bien; Je ne sais pas comment faire ça. Cherchait un peu une réponse fourre-tout.
J. Polfer
8

J'aime utiliser R pour accéder rapidement aux fichiers csv. Bien que le langage ne soit pas directement SQL, vous pouvez faire toutes ces choses avec des commandes simples dans R. R vous offre également la possibilité de créer de beaux graphiques et beaucoup d'autres pouvoirs.

Christian
la source
5

Vous pouvez toujours lire le fichier dans Excel et utiliser Excel comme source de données via ODBC et exécuter des requêtes sur celui-ci.

m.floryan
la source
Je peux? Cela ressemble à de la magie noire. Pouvez-vous trouver un lien pour un tutoriel?
J.Polfer
2
@sheepsimulator: Excel ouvre simplement les fichiers csv ... une fois que vous avez un fichier Excel, vous pouvez l'interroger avec ODBC tout comme vous pouvez interroger des fichiers texte (voir ma réponse ci-dessous).
fretje
5

J'ai trouvé que le moyen le plus simple d'y parvenir est d'utiliser simplement la fonctionnalité d'importation CSV intégrée de SQLite:

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

Vous avez maintenant une base de données fonctionnelle que vous pouvez interroger comme bon vous semble. J'ai également trouvé que les performances de ce qui précède étaient bonnes, je viens d'importer trois millions de lignes en 10-15 secondes.

Markus Amalthea Magnuson
la source
3

J'ai trouvé une petite application non graphique qui fait cela: csvsql .

La documentation est ici .

Stefan Thyberg
la source
C'est EXACTEMENT le type d'application que je recherche, bien que ce serait bien s'il avait une interface graphique. Malheureusement, je n'ai vraiment pas de bon moyen pour le compiler pour la boîte Win2k. Nous vous contacterons. De plus, l'auteur n'a pas utilisé automake ou quelque chose de gentil comme ça, donc la compilation nécessitera quelques jiggerypokery.
J.Polfer
C'était très difficile à trouver et c'était la seule chose que j'ai pu trouver proche de ce que vous avez décrit. Peut-être une idée pour quelqu'un d'écrire une application qui peut importer des fichiers texte et exécuter des requêtes SQL sur eux en utilisant, par exemple, SQL Lite?
Stefan Thyberg
1
sqlite3(l'application en ligne de commande qui lit les bases de données SQLite) a un support intégré pour importer des fichiers - voir ses commandes .separator et .import sur sqlite.org/sqlite.html
Arjan
1
Oui, je l'ai vu mentionné plusieurs fois dans les réponses, mais je pensais plutôt à une application de type bloc-notes à part entière avec une fenêtre de requête.
Stefan Thyberg
3

Vous pouvez jeter un œil à l'outil gratuit q - Texte en tant que base de données , qui permet d'exécuter SQL directement sur des fichiers csv, y compris les jointures, le regroupement et toute autre construction SQL. Inclut également la détection automatique des noms et des types de colonnes.

C'est un outil en ligne de commande qui correspond au mode de fonctionnement Linux (par exemple, Piping depuis stdin si nécessaire, drapeaux spéciaux pour personnaliser le comportement, etc.).

Utilise sqlite dans les coulisses, donc très léger et facile à utiliser.

Divulgation complète - C'est mon propre outil open source. J'espère que vous le trouverez utile

Harel Ben-Attia

Harel Ben Attia
la source
Cet outil est absolument génial!
Dawid Ferenczy Rogožan
2

Un outil que j'ai trouvé qui, je pense, pourrait faciliter cela à l'avenir est Resolver One .

C'est une feuille de calcul qui génère du code Python facilement modifiable. Pour ceux qui sont des développeurs et qui ont parfois besoin de "démissionner" pour résoudre des problèmes dans des feuilles de calcul, cela semble être un moyen intuitif de résoudre des problèmes de type tableur dans un langage qu'ils connaissent.

Et cela me donne une excuse pour utiliser Python. Python me fait plaisir.

J. Polfer
la source
2

Le pilote H2 JDBC fournit une fonction csvread très utile, vous permettant de faire des choses comme les suivantes:

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

Il existe différentes façons d'utiliser ce pilote sans avoir à fouiller dans l'écriture de code pour l'utiliser.

Personnellement, je préfère Squirrel SQL Client qui vous offre une interface graphique agréable pour exécuter des requêtes. Pour l'utiliser, il vous suffit de pointer le H2 In-Memorychemin de classe du pilote déjà répertorié vers le pilote H2 que vous avez téléchargé. Une fois que vous avez configuré un alias approprié à l'aide du pilote, vous pouvez exécuter le SQL aléatoire de votre choix. Les résultats sont affichés dans un joli tableau et toutes sortes d'autres fonctionnalités pour l'importation, l'exportation, etc.

Alternativement, vous pouvez utiliser Groovy pour écrire un script rapide pour charger et utiliser le pilote si nécessaire. Voir cet exemple de blog pour savoir comment.

Il semble que quelqu'un ait étendu le script groovy ci-dessus et en a fait un bel outil en ligne de commande pour exécuter les requêtes, voir gcsvsql. Avec cela, vous pouvez exécuter des commandes comme les suivantes:

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

Vous pouvez essayer l' outil Q . Il est très léger, ne nécessite que Python 2.5 ou plus récent.

agrrd
la source
2

J'ai écrit un programme en ligne de commande pour exécuter du SQL arbitraire sur des fichiers csv, y compris des jointures multi-fichiers, appelé gcsvsql. Vous pouvez lire à ce sujet ici:

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

Il existe un projet Google Code pour cela ici: http://code.google.com/p/gcsvsql/

Il est écrit en Java / Groovy et fonctionnera partout où Java est disponible.

Modifier: le projet actif a été déplacé vers github. https://github.com/jdurbin/durbinlib

James Durbin
la source
1

Deux autres options pour cette tâche: querycsv et fsql . Querycsv est Python et utilise sqlite3. Fsql est Perl et utilise DBD :: CSV .

Nelson
la source
0

Bien qu'il ne soit pas gratuit, le meilleur programme que j'ai trouvé pour cela est File Query . Contrairement aux autres solutions qui sont basées sur la ligne de commande, ou nécessitent d'importer / configurer le fichier avant d'y accéder, File Query vous permet d'ouvrir un fichier (même les GB inup comme un éditeur de texte normal, et analysera automatiquement la mise en page pour vous, et vous permet de faire presque toutes vos requêtes à partir de simples dialogues.

C'est un peu cher, mais si vous n'avez besoin de faire qu'une seule fois, vous pouvez toujours utiliser l'essai gratuit de 30 jours. Ils ont également d'excellents guides et même des vidéos pour vous aider à démarrer.

Jeffrey Harmon
la source
0

vous pouvez utiliser WHS. Par exemple, j'ai 4 fichiers dans le répertoire '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=,

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

Maintenant, double-cliquez simplement sur Hello.js et vous verrez sql reqult ligne par ligne. Voir la documentation WHS pour afficher tous les résultats de la requête.

Oleg
la source