mysqlsh导入json,最终还得靠navicat导入json

发布时间:2023年12月17日

工作需要将一个巨大的10G的json导入mysql数据库。

看到mysql官方有对json导入的支持。

如下:

MySQL :: Import JSON to MySQL made easy with the MySQL Shell

?

$ mysqlsh root@localhost:33300/test --import /path_to_file/zips.json
Creating a session to 'root@localhost:33300/test'
Please provide the password for 'root@localhost:33300': 
Fetching schema names for autocompletion... Press ^C to stop.
Your MySQL connection id is 21 (X protocol)
Server version: 8.0.13 MySQL Community Server - GPL
Default schema `test` accessible through db.
Importing from file "/path_to_file/zips.json" to collection `test`.`zips` in MySQL Server at localhost:33300
 
.. 29353.. 29353
Processed 3.15 MB in 29353 documents in 1.2058 sec (24.34K documents/s)
Total successfully imported documents 29353 (24.34K documents/s)

但 是存在问题。

导入的一行json是作为一个object存在数据库中,与我们设想的不一样。

这可是官方的例子,我觉得官方对这个问题的理解跟我们是有出入的。

谁会需要这种导入方式呢???

研究了一下也没有更好的结果。

正好navicat有导入json的功能。

在数据库上右键就有导入向导。

但是navicat支持的json是完美格式的json。

整个.json文件是一个json文本

{
  { "text":"abcd", "time":"2023-10-20"},
  { "text":"1234", "time":"2023-10-21"}
}

但是我们的json是按行分割的 json。

每一行是一个完整的json文本

  { "text":"abcd", "time":"2023-10-20"}
  { "text":"1234", "time":"2023-10-21"}
  { "text":"1111", "time":"2023-10-22"}

navicat不识别,会觉得是错的。

所以还要对文本处理一下,每一行末尾添加一个逗号,然后最前面添加"{" ,最后面添加 "}"

由于文本非常大,添加起来也非常耗时。

不过navicat运行起来还是非常快的。

navicat试用到时间了怎么办?

神奇代码来解决。?

只对16.2.*版本起作用。?

@echo off
set dn=Info
set dn2=ShellFolder
set rp=HKEY_CURRENT_USER\Software\Classes\CLSID
:: reg delete HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Registration14XCS /f  %针对<strong><font color="#FF0000">navicat</font></strong>15%
reg delete HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Registration16XCS /f
reg delete HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Update /f
echo finding.....
for /f "tokens=*" %%a in ('reg query "%rp%"') do (
 echo %%a
for /f "tokens=*" %%l in ('reg query "%%a" /f "%dn%" /s /e ^|findstr /i "%dn%"') do (
  echo deleteing: %%a
  reg delete %%a /f
)
for /f "tokens=*" %%l in ('reg query "%%a" /f "%dn2%" /s /e ^|findstr /i "%dn2%"') do (
  echo deleteing: %%a
  reg delete %%a /f
)
)
echo re trial done!
  
pause
exit

文章来源:https://blog.csdn.net/v6543210/article/details/134927756
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。