¿Cómo importar datos CSV/TSV a Couch DB?¿Cómo importar datos CSV/TSV a Couch DB?
10
A
Respuesta
7
Es bastante fácil con python.
#!/usr/bin/env python
from couchdbkit import Server, Database
from couchdbkit.loaders import FileSystemDocsLoader
from csv import DictReader
import sys, subprocess, math, os
def parseDoc(doc):
for k,v in doc.items():
if (isinstance(v,str)):
#print k, v, v.isdigit()
# #see if this string is really an int or a float
if v.isdigit()==True: #int
doc[k] = int(v)
else: #try a float
try:
if math.isnan(float(v))==False:
doc[k] = float(v)
except:
pass
return doc
def upload(db, docs):
db.bulk_save(docs)
del docs
return list()
def uploadFile(fname, uri, dbname):
print 'Upload contents of %s to %s/%s' % (fname, uri, dbname)
# #connect to the db
theServer = Server(uri)
db = theServer.get_or_create_db(dbname)
#loop on file for upload
reader = DictReader(open(fname, 'rU'), dialect = 'excel') #see the python csv module
#for other options, such as using the tab delimeter. The first line in your csv
#file should contain all of the "key" and all subsequent lines hold the values
#for those keys.
#used for bulk uploading
docs = list()
checkpoint = 100
for doc in reader:
newdoc = parseDoc(doc) #this just converts strings that are really numbers into ints and floats
#Here I check to see if the doc is already on the database. If it is, then I assign
#the _rev key so that it updates the doc on the db.
if db.doc_exist(newdoc.get('_id')):
newdoc['_rev'] = db.get_rev(newdoc.get('_id'))
docs.append(newdoc)
if len(docs)%checkpoint==0:
docs = upload(db,docs)
#don't forget the last batch
docs = upload(db,docs)
if __name__=='__main__':
filename = sys.argv[1]
uri = sys.argv[2]
dbname = sys.argv[3]
uploadFile(filename, uri, dbname)
4
Apache CouchDB solo almacena documentos JSON. Por lo tanto, para importar CSV debe convertir a documentos JSON individuales y luego POSTALIZARlos normalmente.
Probablemente tendrá que escribir un programa para recorrer cada línea. Convierta la línea CSV (una secuencia de valores) en el documento JSON (una secuencia de clave: valor pares). Entonces simplemente envíelo a CouchDB usando HTTP.
1
acaba de escribir un script en Ruby: csv2couchdb
2
Yo uso esta aquí: https://github/glynnbird/couchimport. Si su CSV es razonablemente simple, simplemente se reducirá a establecer un nombre de base de datos y conectar el CSV a couchimport.
Cuestiones relacionadas
- 1. Mongodb vs. Couch Db Select Performances
- 2. Promoviendo Couch-DB para la administración
- 3. Cómo importar datos a SAP
- 4. ¿Puedo replicar entre CouchBase en Android y Couch DB ejecutándose en Linux?
- 5. Importe datos de la aplicación gratuita db a la aplicación de pago db
- 6. Cómo importar un archivo .dmp (Oracle) en MySql DB?
- 7. cómo importar datos en rieles?
- 8. Importar datos de txt a Mathematica
- 9. Importar datos de HDFS a HBase (cdh3u2)
- 10. Importación de datos desde la base de datos de geonames.org a MySQL DB
- 11. Importar datos de URL
- 12. Manera eficiente de importar muchos archivos csv en PostgreSQL db
- 13. Cargar datos a distancia utilizando DB sqlldr
- 14. ¿Cómo importar * enormes * fragmentos de datos a PostgreSQL?
- 15. Raven DB: ¿En qué se diferencia 'contrabandista' de 'Importar/Exportar'?
- 16. Mantener la distinción entre mayúsculas y minúsculas al importar db a Windows
- 17. Cómo importar datos XML utilizando d3.js?
- 18. ¿Cómo transferir los datos de mi DB de producción a mi DB de ensayo en heroku?
- 19. ¿Cómo importar datos en SQL Compact Edition?
- 20. ¿Cómo importo una instancia de db de MySQL local a RDS db?
- 21. Cómo importar "HttpClient" a Eclipse?
- 22. Cómo importar rules.csv a sonar?
- 23. log4net: Cómo almacenar datos en DB
- 24. Importar CSV a MySQL
- 25. Cómo importar un archivo SDF
- 26. Importación de MS ACCESS DB a mySql?
- 27. ¿Cómo importar una gran base de datos de Heroku a mysql o sqlite3 local?
- 28. Importar proyecto a Sonar
- 29. Cómo importar MySQL db y saltear tablas si no pudo exluir al realizar el volcado
- 30. Importar XML a MySQL 5.1
¿Puede ser tan fácil como mongoimport en mongoDB? – bbnn
Nice One. Gracias por compartir :) –