利用Shell脚本将MySQL表中的数据转化为json格式
2023-09-27 14:22:17 时间
脚本如下:
#!/bin/bash mysql -s -phello test >1.log <<EOF desc t1; EOF lines="concat_ws(','," count=`cat 1.log|wc -l` linenum=0 while read line do coloumname=`echo $line |awk '{print $1}'` let linenum=linenum+1 if [ $linenum -eq 1 ];then lines=$lines"concat_ws(':','{"'"'$coloumname'"'"',if("$coloumname" is null or $coloumname='','null',concat('"'"'"',$coloumname,'"'"'"')))" elif [ $linenum -eq $count ];then lines=$lines",concat_ws(':','"'"'$coloumname'"'"',if("$coloumname" is null or $coloumname='','null}',concat('"'"'"',$coloumname,'"'"'"}'))))" else lines=$lines",concat_ws(':','"'"'$coloumname'"'"',if("$coloumname" is null or $coloumname='','null',concat('"'"'"',$coloumname,'"'"'"')))" fi done < 1.log echo $lines
表t1中的数据如下:
mysql> select * from t1; +------+-------+ | id | name | +------+-------+ | 1 | | | 1 | NULL | | 2 | hello | +------+-------+ 3 rows in set (0.00 sec)
脚本执行的结果如下:
concat_ws(',',concat_ws(':','{"id"',if(id is null or id='','null',concat('"',id,'"'))),concat_ws(':','"name"',if(name is null or name='','null}',concat('"',name,'"}'))))
在MySQL中执行的结果如下:
mysql> select concat_ws(',',concat_ws(':','{"id"',if(id is null or id='','null',concat('"',id,'"'))),concat_ws(':','"name"',if(name is null or name='','null}',concat('"',name,'"}')))) json_format from t1; +---------------------------+ | json_format | +---------------------------+ | {"id":"1","name":null} | | {"id":"1","name":null} | | {"id":"2","name":"hello"} | +---------------------------+ 3 rows in set (0.00 sec)
技巧:关于shell脚本中单引号和双引号的区别
shell脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符。
单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。(注意是所有,只是单引号本身不能够出现在其中)。
双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:
-
$加变量名可以取变量的值
-
反引号仍表示命令替换
-
\$表示$的字面值
-
\`表示`的字面值
-
\"表示"的字面值
-
\\表示\的字面值
-
除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值。
相关文章
- 利用gearman同步mysql数据到redis
- 当MySQL执行XA事务时遭遇崩溃,且看华为云如何保障数据一致性
- Mysql,SqlServer,Oracle主键自动增长的设置
- 大数据-数仓-离线数据分析-Hive(二):安装【元数据库用MySQL】【单节点,不需要集群】【启动脚本】
- Centos7下设置mysql自启动
- 关于因主库写数据压力大而导致mysql主从延迟的解决方案
- mysql中当update修改数据与原数据相同时会再次执行吗?
- mysql索引之组合索引
- mysql错误日志
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
- MySQL插入数据时报错Cause: java.sql.SQLException: #HY000的解决方法
- centos7 安装mysql及workbench客户端
- mysql存储过程1 实现全量同步数据并自动创建表(含数据和结构)
- mysql 删除数据表的数据,表不能起别名
- mysql 日期操作 增减天数、时间转换、时间戳(转换)
- MySQL 备份系列(3)-- innobackupex备份mysql大数据(全量+增量)操作记录
- 项目中常用的19条MySQL优化
- mysql查询某个字段重复的数据
- mysql查询锁表语句
- LinuxMint下JDK+Tomcat+Mysql+Eclipse javaEE安装
- 【MySQL】MySQL-主从复制-集群方案-数据一致性问题解决方案 && MySQL备份的各种姿势
- talend 将hbase中数据导入到mysql中
- MySQL hash索引和b-tree索引的区别
- MySQL事务代码不合理导致数据不一致
- mysql重点题目--查询“01“课程比“02“课程成绩高的学生的信息及课程分数
- 程序员小sister的烦恼_快速上手大数据ETL神器Kettle(xls导入mysql)
- mysql 主键自增设置,插入数据就不必再设置了。
- 客快物流大数据项目(三十二):安装CDH-6.2.1和初始化CDH服务所需的MySQL库
- ERROR 1130:mysql 1130连接错误的有效解决方法
- 数据切分——MySql表分区概述