Question extracton rapide de données d'un GROS csv
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre elite
- Messages : 248
- Remerciements reçus 1
utiliser oledb et les drivers d'access
avec import-csv sur un fichier de 256.000 entrée (45Mo) ca prend 45s, avec oledb 3s.
ben je suis content, je ne vais pas avoir besoin de passer par une bdd (ms access , MS SQL Compact ou SQLite)
merci a vous deux.
pour ceux que ca interesse un exemple:
[code:1]
$filepath = \"C:\chemindesCSV\"
$connString = \"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`\"$filepath`\";Extended Properties=`\"text;HDR=yes;FMT=Delimited`\";\"
$qry = 'SELECT * FROM [personnel.csv] WHERE ID_PERSO=A123456'
$conn = new-object System.Data.OleDb.OleDbConnection($connString)
$conn.open()
$cmd = new-object System.Data.OleDb.OleDbCommand($qry,$conn)
$da = new-object System.Data.OleDb.OleDbDataAdapter($cmd)
$dt = new-object System.Data.dataTable
$null = $da.fill($dt)
$conn.close()
$dt
[/code:1]
Choses à savoir:
Il faut utiliser en fonction de la plateforme les drivers 32 ou 64b (les 2 sont telechargeable www.microsoft.com/en-us/download/details.aspx?id=13255 ), si vous lancer le script dans un powershell 64b (par defaut sous Windows Server 2012 et Windows 8), alors il faut les drivers 64b
Par defaut OLEDB, gere les fichier CSV qu'avec des virgule, donc si votre CSV utilise des \";\", il faut creer un fichier schema.ini dans le dossier des CSV qui contient
[code:1]
schema.ini
[fichier1.csv]
ColNameHeader=True
Format=Delimited(;«»)
[fichier2.csv]
ColNameHeader=True
Format=Delimited(;«»)
[/code:1]
Soit dans la connectionString vous indiquer que les csv ont un entete \"HDR=yes\", soit dans le fichier schema vous mettez \"ColNameHeader=True\"
le dossier est considéré comme votre bdd, et chaque fichier csv est alors considéré comme une table
l'objet $dt est tout simple une table avec les infos récupérées
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
Joli !avec import-csv sur un fichier de 256.000 entrée (45Mo) ca prend 45s, avec oledb 3s.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Madrolle
- Hors Ligne
- Membre senior
- Messages : 47
- Remerciements reçus 0
73 Mo
377 500 lignes
13 secondes pour en sélectionner 17849
[code:1]
Get-Content .\monFichier.csv | Select-String \"A1\"
[/code:1]
rien n’empêche de se servir du résultat pour enchaîner avec une méthode plus fine pour optimiser.
Désolé pour le manque d'imagination... <br><br>Message édité par: Perso, à: 21/08/13 12:04
ShellDealer sur Twitter
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
- Messages : 968
- Remerciements reçus 0
Bon je vais faire au plus simple et bourin, ça semble correspondre au besoin...
73 Mo
377 500 lignes
13 secondes pour en sélectionner 17849
[code:1]
Get-Content .\monFichier.csv | Select-String \"A1\"
[/code:1]
rien n’empêche de se servir du résultat pour enchaîner avec une méthode plus fine pour optimiser.
Désolé pour le manque d'imagination... <br><br>Message édité par: Perso, à: 21/08/13 12:04
Pas tout à fait, parce que du coup tu ne sélectionne pas uniquement les lignes dont la propriété \"ID\" contient la chaîne \"A1\"... Mais également toutes celles qui contiennent \"A1\" pour n'importe quelle autre propriété.<br><br>Message édité par: Matthew BETTON, à: 21/08/13 12:54
Connexion ou Créer un compte pour participer à la conversation.
- Madrolle
- Hors Ligne
- Membre senior
- Messages : 47
- Remerciements reçus 0
ou la variante qui va bien
',A1,'
';A1;'
\",A1$\"
après, ça dépend des particularités de son fichier
ShellDealer sur Twitter
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
- Messages : 968
- Remerciements reçus 0
Avec ce patern, ça règle le problème ',A1'
ou la variante qui va bien
',A1,'
';A1;'
\",A1$\"
après, ça dépend des particularités de son fichier
Cela ne me convainc pas
Parce que le séparateur peut apparaître dans un champ... Bref, tu ne peux être sur à 100 % que cela va fonctionner dans tous les cas.
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les initiés
- extracton rapide de données d'un GROS csv