1.场景分析
数据处理常用hive -e的方式,通过脚本操作数仓,过程中常常遇到特殊字符的处理,如单双引号、反斜杠、换行符等,现将特殊字符用法总结使用如下,可直接引用,避免自行测试的繁琐。
2.特殊字符处理
#!/bin/bash
if [ -n "$1" ] ;then
do_date=$1
date1=${do_date: 0: 8}
date2=`date -d "+1 day $date1" +%Y%m%d
else
date1=`date -d "-1 day" +%Y%m%d`
date2=`date +%Y%m%d`
fi
sql="
#设置不打印表头
set hive.cli.print.header=false;
select
\`timestamp\`,
#双引号中嵌套双引号,需要加反斜杠
concat('[1,\"------------------id=123212-------------------\\\n' ,concat_ws('\\\n',collect_list(content)),'<NE><NE><NE>\\\n\"]') content
from temp_table;
"
echo $qingsu_data
hive -S -e "$sql" > /data/$date2.jsonl
输出内容为:
1702006716111,[1,"-------------------id=123212-------------------\n学生: 老师你好。\n老师: 你说。\n学生: 我自己的人生是一塌糊涂。\n老师: 说说看,为什么一塌糊涂?\n<NE><NE><NE>\n"]
假如直接写\n,则
#!/bin/bash
sql="
select
\`timestamp\`,
concat('[1,\"------------------id=123212-------------------\n' ,concat_ws('\n',collect_list(content)),'<NE><NE><NE>\n\"]') content
from temp_table;
"
echo $qingsu_data
hive -S -e "$sql" > /data/$date2.jsonl
输出内容为:
1702006716111,[1,"-------------------id=123212-------------------
学生: 老师你好。
老师: 你说。
学生: 我自己的人生是一塌糊涂。
老师: 说说看,为什么一塌糊涂?
<NE><NE><NE>
"]
3.总结
- (`)撇号在shell中使用需要用反斜杠转义
- (")双引号中嵌套双引号需要用反斜杠转义
- (')单引号中嵌套双引号需要用反斜杠转义
- (/)反斜杠作为字符使用中使用需要两个反斜杠转义
- 预留关键字使用两侧需要使用(`)撇号