Hace poco tuve la oportunidad de ir a Riviera Devuna fantástica conferencia de desarrolladores que tuvo lugar cerca de la Riviera francesa. Couchbase patrocinó la conferencia, trajimos helado de leche de cabra, orgánico y local. La gente estaba contenta, las charlas fueron interesantes, se repartió SWAG. Fue una conferencia increíble.
Cuando patrocinamos conferencias con este tipo de actividades, solemos preguntar a los asistentes si podemos escanear sus acreditaciones para enviarles algunas actualizaciones de Couchbase. Así lo hacemos. Y a veces la información es fácil de recuperar, otras veces es un poco complicado. Aquí, el código QR contenía una VCard. Su propósito es guardar información de contacto, información valiosa: como sabes, los escaneos son la moneda de cambio de las conferencias. Es lo que nos permite volver al año siguiente con aún más helado.
En fin, acabamos recopilando un montón de VCards, pero era difícil ponerlas en el omnipresente formato de marketing, CSV. Entonces, ¿qué haces cuando necesitas manipular datos? Usas Couchbase Shell.
Couchbase Shell, Shell ¡Sí!
Shell de Couchbase (cbsh) es un shell moderno, productivo y divertido para Couchbase Server y Capella (nuestra DBaaS en la nube). El código fuente y las instrucciones para instalarlo están disponibles en el repositorio Léame.
Yo personalmente lo instalé clonándolo y construyéndolo:
1 2 3 |
git clonar https://github.com/couchbaselabs/couchbase-shell cd couchbase-concha carga instale --ruta . |
Es necesario tener la Cadena de herramientas Rust instalado, porque Couchbase Shell está escrito en Rust, y basado en mi shell favorito, nushell.
Una vez instalado, puede ejecutarlo escribiendo cbsh
. Le pedirá que configure primero una conexión Couchbase. Si está utilizando la interfaz de gestión de Capella, obtendrá toda la información necesaria en el archivo Conectar ficha.
Nushell <3 JSON
Para que conste, este es el aspecto de mi tarjeta VCard:
1 2 3 4 5 6 |
COMENZAR:VCARD VERSIÓN:2.1 N:DOGUIN;Laurent;;; ORG:Couchbase EMAIL;INTERNET:laurent.doguin@couchbase.com FIN:VCARD |
Hay un montón de librerías node para convertir esto a JSON, yo he usado vcard-json. Así que si ejecuto node de vcard2json.js
Obtengo un array JSON con todo el contenido de la VCard como objeto JSON.
Lo cual es genial, pero ¿cómo se puede manipular esto fácilmente? Cbsh se basa en nushell, tenemos todas las cosas buenas que vienen con él, como la de json
o el comando donde
y el filtro JSON seleccione
. Veamos cómo funcionaría paso a paso, con la salida de datos estructurados, también cortesía de nushell:
1 2 3 4 5 |
👤 Laurent Doguin 🏠 capella > nodo vcard2json.js [{"nombre":{"apellido":"Doguin","nombre":"Laurent","additionalName":"","prefijo":"","sufijo":""},"organización":"Couchbase","email":[{"isDefault":falso,"valueInfo":{},"valor":"laurentdoguin@couchbase.com"}]},{"nombre":{"apellido":"Este","nombre":"Persona","additionalName":"","prefijo":"","sufijo":""},"organización":"DoesNotWorkAtCouchbase","email":[{"isDefault":falso,"valueInfo":{},"valor":"thiperson@notcouchbase.com"}]}] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
👤 Laurent Doguin 🏠 capella > nodo vcard2json.js | de json ╭───┬──────────────────────────────┬────────────────────────┬─────────────────────────────────────────────────────────────────────╮ │ # │ nombre │ organización │ correo electrónico │ ├───┼──────────────────────────────┼────────────────────────┼─────────────────────────────────────────────────────────────────────┤ │ 0 │ ╭────────────────┬─────────╮ │ Couchbase │ ╭───┬───────────┬───────────────────┬─────────────────────────────╮ │ │ │ │ apellido │ Doguin │ │ │ │ # │ isDefault │ valueInfo │ value │││. │ │ │ nombre │ Laurent │ │ │ ├───┼───────────┼───────────────────┼─────────────────────────────┤ │ │ │ │ additionalName │ │ │ │ │ 0 │ falso │ {registro 0 campos} │ laurentdoguin@couchbase.com │ │ │ │ │ prefijo │ │ │ │ ╰───┴───────────┴───────────────────┴─────────────────────────────╯ │ │ │ │ sufijo │ │ │ │ │ │ │ ╰────────────────┴─────────╯ │ │ │ │ 1 │ ╭────────────────┬────────╮ │ DoesNotWorkAtCouchbase │ ╭───┬───────────┬───────────────────┬────────────────────────────╮ │ │ │ │ apellido │ Este │ │ │ │ # │ isDefault │ valueInfo │ value │││. │ │ │ nombre │ Persona │ │ │ ├───┼───────────┼───────────────────┼────────────────────────────┤ │ │ │ │ additionalName │ │ │ │ │ 0 │ falso │ {registro 0 campos} │ thiperson@notcouchbase.com │ │ │ │ │ prefijo │ │ │ │ ╰───┴───────────┴───────────────────┴────────────────────────────╯ │ │ │ │ sufijo │ │ │ │ │ │ │ ╰────────────────┴────────╯ │ │ │ ╰───┴──────────────────────────────┴────────────────────────┴─────────────────────────────────────────────────────────────────────╯ |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
👤 Laurent Doguin 🏠 capella > nodo vcard2json.js | de json | donde organización != Couchbase ╭───┬─────────────────────────────┬────────────────────────┬────────────────────────────────────────────────────────────────────╮ │ # │ nombre │ organización │ correo electrónico │ ├───┼─────────────────────────────┼────────────────────────┼────────────────────────────────────────────────────────────────────┤ │ 0 │ ╭────────────────┬────────╮ │ DoesNotWorkAtCouchbase │ ╭───┬───────────┬───────────────────┬────────────────────────────╮ │ │ │ │ apellido │ Este │ │ │ │ # │ isDefault │ valueInfo │ value │││. │ │ │ nombre │ Persona │ │ │ ├───┼───────────┼───────────────────┼────────────────────────────┤ │ │ │ │ additionalName │ │ │ │ │ 0 │ falso │ {registro 0 campos} │ thiperson@notcouchbase.com │ │ │ │ │ prefijo │ │ │ │ ╰───┴───────────┴───────────────────┴────────────────────────────╯ │ │ │ │ sufijo │ │ │ │ │ │ │ ╰────────────────┴────────╯ │ │ │ ╰───┴─────────────────────────────┴────────────────────────┴────────────────────────────────────────────────────────────────────╯ |
1 2 3 4 5 6 7 |
👤 Laurent Doguin 🏠 capella > nodo vcard2json.js | de json | donde organización != Couchbase | seleccione nombre.nombre nombre.apellido organización correo electrónico.0.valor ╭───┬───────────┬──────────────┬────────────────────────┬────────────────────────────╮ │ # │ name_name │ name_surname │ organization │ email_0_value │ ├───┼───────────┼──────────────┼────────────────────────┼────────────────────────────┤ │ 0 │ Persona │ Este │ DoesNotWorkAtCouchbase │ thiperson@notcouchbase.com │ ╰───┴───────────┴──────────────┴────────────────────────┴────────────────────────────╯ |
Ahora que los datos están listos y limpios, ¿qué puedo hacer con ellos? Podría escribirlos en un archivo CSV de esta manera:
1 |
> nodo vcard2json.js | de json | donde organización != Couchbase | seleccione nombre.nombre nombre.apellido organización correo electrónico.0.valor | a csv| guardar contactos.csv |
También podría escribirlo en Couchbase. Ya tengo mis credenciales. El primer comando elige el bucket y el scope y collection por defecto. El segundo itera a través del array JSON, genera un UUID aleatorio, envuelve el contenido bajo una columna de contenido y añade una columna ID con el UUID generado, luego inserta el resultado en Couchbase.
1 2 3 |
👤 Laurent Doguin 🏠 capella > cb-env cubo vcard |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
👤 Laurent Doguin 🏠 capella en ☁️ vcard.Por defecto.Por defecto > nodo vcard2json.js | de json | donde organización != Couchbase |seleccione nombre.nombre nombre.apellido organización correo electrónico.0.valor |renombrar nombre apellido organización correo electrónico | cada { |it| deje uuid = {al azar uuid}; $it | envolver contenido| insertar id $uuid | doc upsert } ╭───┬───────────────────────────────────────────────────────────╮ │ 0 │ ╭───┬───────────┬─────────┬────────┬──────────┬─────────╮ │ │ │ │ # │ procesado │ éxito │ fracasado │ fracasos │ cluster │ │ │ │ ├───┼───────────┼─────────┼────────┼──────────┼─────────┤ │ │ │ │ 0 │ 1 │ 1 │ 0 │ │ capella │ │ │ │ ╰───┴───────────┴─────────┴────────┴──────────┴─────────╯ │ │ 1 │ ╭───┬───────────┬─────────┬────────┬──────────┬─────────╮ │ │ │ │ # │ procesado │ éxito │ fracasado │ fracasos │ cluster │ │ │ │ ├───┼───────────┼─────────┼────────┼──────────┼─────────┤ │ │ │ │ 0 │ 1 │ 1 │ 0 │ │ capella │ │ │ │ ╰───┴───────────┴─────────┴────────┴──────────┴─────────╯ │ ╰───┴───────────────────────────────────────────────────────────╯ |
Y para asegurarnos de que funciona, los datos pueden consultarse directamente con SQL++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
👤 Laurent Doguin 🏠 capella en ☁️ vcard.Por defecto.Por defecto > consulta "SELECT * from `vcard`" ╭───┬────────────────────────────────────────────────┬─────────╮ │ # │ vcard │ cluster │ ├───┼────────────────────────────────────────────────┼─────────┤ │ 0 │ ╭──────────────┬─────────────────────────────╮ │ capella │ │ │ │ nombre │ Persona1 │ │ │ │ │ │ apellido │ LastNa │ │ │ │ │ │ organización │ Organisat │ │ │ │ │ │ correo electrónico │ person1lastna@couchbase.com │ │ │ │ │ ╰──────────────┴─────────────────────────────╯ │ │ │ 1 │ ╭──────────────┬────────────────────────────╮ │ capella │ │ │ │ nombre │ Persona │ │ │ │ │ │ apellido │ Este │ │ │ │ │ │ organización │ DoesNotWorkAtCouchbase │ │ │ │ │ │ correo electrónico │ thiperson@notcouchbase.com │ │ │ │ │ ╰──────────────┴────────────────────────────╯ │ │ ╰───┴────────────────────────────────────────────────┴─────────╯ |
Así que ahí lo tienes, un ejemplo práctico del uso de Couchbase Shell para manipular Datos, transformarlos e importarlos a Couchabse. ¡Pero hay muchos otros usos para él! ¿Cuál es tu favorito?