La utilidad MySQL Shell nos permite importar un fichero JSON en una tabla o colección de MySQL.
Primero debemos activar el protocolo mysqlX :
$ mysqlsh -u root -h localhost --mysql --dba enableXProtocol Please provide the password for 'root@localhost': Save password for 'root@localhost'? [Y]es/[N]o/Ne[v]er (default No): enableXProtocol: Installing plugin mysqlx… enableXProtocol: done |
Y ahora ya podemos conectar con el servidor MySQL usando MySQLShell (y el protocolo mysqlX) :
$ mysqlsh -u root -h localhost --mysqlx |
Tengo creada una base de datos llamada addi, vacía, y quiero importar ahí el fichero result.json en una colección de nombre addi_collection.
El comando a ejecutar sería :
MySQL Shell > util.importJson("result.json", {schema: "addi", collection: "addi_collection"}); Importing from file "result.json" to collection <code>addi</code>.<code>addi_collection</code> in MySQL Server at localhost:33060 |
El problema que tuve es que mi fichero json no tenía un campo _id único en cada registro (ver post anterior de ikasten.io), así que tuve que crearlo. Esto no sería un problema en MySQL Server > 8.0, pero estoy usando un server viejuno (5.7.19), así que obtuve este error:
Processed 182.22 KB in 80 documents in 0.0340 sec (2.35K documents/s)
Total successfully imported documents 0 (0.00 documents/s)
Document is missing a required field (MySQL Error 5115)
Tras añadir el campo _id a todos los registros, pude importar sin problemas:
util.importJson("result.json", {schema: "addi", collection: "addi_collection"}); Importing from file "result.json" to collection <code>addi</code>.<code>addi_collection</code> in MySQL Server at localhost:33060 .. 80.. 80 Processed 182.93 KB in 80 documents in 0.0379 sec (2.11K documents/s) Total successfully imported documents 80 (2.11K documents/s) |
Más info sobre JSON import utility en MySQL Shell.