【MySQL】导入 JSONL 数据到 MySQL数据库

最近在做一些数据处理工作需要将后缀为".jsonl"的文件数据导入到 MySQL 库。由于之前没有尝试过,这次就当作经验记录一下。

首先肯定是要先建库和建表(这些就不再细说了),接着就可以通过 LOAD DATA INFILE 命令将 jsonl 文件内容进行提取。由于这次使用的是 MySQL 5.7 以上的版本(MySQL 8),因此直接使用@json 用户变量告诉 MySQL 要将数据以 JSON 格式进行存储就可以了。如下图:

sql 复制代码
LOAD DATA INFILE '<<jsonl_path>>'  
INTO TABLE <<target_table>>  
(@json)  
SET field1 = JSON_EXTRACT(@json, '$.field1'),  
    field2 = JSON_EXTRACT(@json, '$.field2'),  
    field3 = JSON_EXTRACT(@json, '$.field3'),
    ...;

但是在这个过程中或许会出现 "secure-file-priv" 参数异常,如下图:

bash 复制代码
Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

这个时候就可以通过 "show variables like 'secure_file_priv'" 查询一下当前参数状态

bash 复制代码
mysql> show variables like 'secure_file_priv';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+
1 row in set (0.00 sec)

Value 为 NULL 则表明禁止导入导出功能,这个时候需要对 my.cnf 文件进行一下配置,指定一个导入路径给它

bash 复制代码
# 这里的路径是 Docker 镜像内部的路径
secure_file_priv='/var/lib/mysql/imports'

然后重启 MySQL 服务。之后重新执行 "show variables like 'secure_file_priv'" 看看配置是否生效。

bash 复制代码
mysql> show variables like 'secure_file_priv';
+------------------+-------------------------+
| Variable_name    | Value                   |
+------------------+-------------------------+
| secure_file_priv | /var/lib/mysql/imports/ |
+------------------+-------------------------+
1 row in set (0.00 sec)

配置生效之后记得要将 /var/lib/mysql/imports/ 路径映射到宿主机,又或者使用 docker cp 将 jsonl 文件放入到容器内部,不然会报找不到文件的错误。

在导入的过程中或许还会出现:

bash 复制代码
Error Code: 3141. Invalid JSON text in argument 1 to function json_extract: "Invalid encoding in string." at position 411.

这是因为 jsonl 中出现了特殊字符引起的,我这次遇到的就是"\"的问题。由于数据中有可能会出现字符转义的情况,因此那些"\n"、"\t"、"\"等等都需要先进行特殊字符的转换,不然无法导入到数据库中。譬如,在 jsonl 文件中将"\n"先全部替换成"@","\t"全部替换成"&",在导入到数据库之后再重新更新回来就可以了。

相关推荐
yunlaodacom15 分钟前
腾讯云国际版代理商:COS标准、低频、归档和深度归档怎么选?存储成本与数据取回区别
数据库·云计算·腾讯云
Nturmoils15 分钟前
SQL Server数据库迁移:V9R4C019 如何接住存量 T-SQL 批处理
数据库
NineData20 分钟前
NineData智能数据管理平台新功能发布|2026年8月
数据库·人工智能·oracle·中间件·agent·数据库开发·ninedata
Elastic 中国社区官方博客32 分钟前
Elasticsearch 向量数据库:几分钟内完成部署,以经济高效的方式扩展至数千亿规模
大数据·运维·数据库·elasticsearch·搜索引擎·ai·全文检索
1314lay_100733 分钟前
C#调用Sql Server存储过程,有返回值的
数据库·sqlserver·c#
DBA_G2 小时前
GBase 8a数据库表空间多路径功能特点综述
数据库·oracle
TDengine (老段)2 小时前
TDgpt 使用 — 部署、SQL、算法
大数据·数据库·sql·算法·时序数据库·tdengine·涛思数据
晴天¥2 小时前
Oracle 19c数据库内存管理优化(内存管理方式调整及内存扩容)
数据库·oracle·oracle数据库集群调优
CQU_JIAKE2 小时前
9.10【A】
数据库
乐观的Terry3 小时前
Redis生产环境redis-conf配置教程
数据库·redis