hive笔记:转义字符的使用
hive中的转义符
Hadoop和Hive都是用UTF-8编码的,所以, 所有中文必须是UTF-8编码, 才能正常使用
备注:中文数据load到表里面, 如果字符集不同,很有可能全是乱码需要做转码的, 但是hive本身没有函数来做这个
一、转义字符的特殊情况:
自身的转义,比如java有时候需要两个转义字符"\\",或者四个转义字符“\\\\”。
1)java的俩种情况:
a.正则表达式匹配和string的split函数,这两种情况中字符串包含转义字符“\”时,需要先对转义字符自身转义,就是说需要两个转义字符“\\”。比如\n,\t等(java解析后,再有正则和split自身特定进行解析)
b.而当匹配字符正斜线“\”,则需要四个转义字符“\\\\”,因为,首先java(编译器?)自身先解析,转义成两个“\\”,再由正则或split的解析功能转义成一个“\”,才是最终要处理的字符。
这是因为解析过程需要两次,才能在字符串中出现正斜线“\”,出现后才能转义后面的字符。
2)hive中的split和正则表达式
hive用java写的,所以同Java一样,两种情况也需要两个“\\”,
split处理代码为例:
a.split(dealid,'\\\\')[0] as dealids,1: 代码中,如果以“\”作为分隔符的话,那么就需要4个转义字符“\\\\”,即
b.split(all,'~') :这里切分符号是正则表达式,按一个字符分隔没问题
c. split(all,'[|~]+'): 在[]内部拼接成字符串
3)hive语句在shell脚本中执行
shell语言也有转义字符,自身直接处理。
而hive语句在shell脚本中执行时,就需要先由shell转义后,再由hive处理。这个过程又造成二次转义。
如上面的hive语句写入shell脚本中,执行是错误的,shell先解析,转义成”|“后传给hive,hive解析这个转义字符后,split就无法正确的解析了。
所以,注意hive语句在shell脚本执行时,转义字符需要翻倍。hive处理的是shell转义后的语句,必须转以后正确,才能执行。
注意:是否使用转义字符是看这个字符在这个语言中有没有特殊意义,有的话,就需要加上\来进行转义、
转义字符的使用: |
||||
转义字符 |
无转义符 |
转义符\ |
转义符\\ |
转义符\\\ |
" |
" |
\" |
\\” |
|
\ |
不可识别 |
不可识别 |
不可识别 |
\\\\ |
/ |
/ |
\/ |
\\/ |
\\\/ |
' |
不可识别 |
\' |
不可识别 |
\\\' |
~ |
~ |
\~ |
\\~ |
|
| |
| |
\| |
\\| |
\\\| |
; |
; |
\; |
\\; |
|
: |
: |
\: |
\\: |
|
, |
, |
\, |
\\, |
|
. |
. |
\. |
\\. |
|
! |
! |
\! |
\\! |
|
( |
( |
\( |
\\( |
|
) |
) |
\) |
\\) |
|
[ |
不可识别 |
不可识别 |
\\[ |
|
] |
] |
\] |
\\] |
|
{ |
{ |
\{' |
\\{ |
|
} |
} |
\} |
\\} |
|
? |
? |
\? |
\\? |
|
_ |
_ |
\_ |
\\_ |
|
- |
- |
\- |
\\- |
|
# |
# |
\# |
\\# |
|
## |
## |
\## |
\\## |
\\\## |
& |
& |
\& |
\\& |
|
^ |
^ |
\^ |
\\^ |
二、案例:原数据表
1.\符号
(1)regexp_replace(dealids,'\\[','\\\\')
%jdbc(hive)
Select regexp_replace(dealids,'\\[','\\\\')
as place
From
temp.track_join_rtq_freq_20181029
limit 10
注意:
2.[与]符号
(1)\\[:split(dealids,'\\[')
%jdbc(hive)
Select split(dealids,'\\[') as place
From
temp.track_join_rtq_freq_20181029
limit 10
(2)]:split(dealids,']')
%jdbc(hive)
Select split(dealids,']') as place
From
temp.track_join_rtq_freq_20181029
limit 10
(3)\\[和[]:regexp_replace(dealids,'\\[','[]')
%jdbc(hive)
Select regexp_replace(dealids,'\\[','[]') as place
From temp.track_join_rtq_freq_20181029
limit 10
(4)\\[和\\{}:regexp_replace(dealids,'\\[','\\{}')
%jdbc(hive)
Select regexp_replace(dealids,'\\[','\\{}')
as place
From
temp.track_join_rtq_freq_20181029
limit 10
3.’符号
(1)\\\':regexp_replace(dealids,'\\[','\\\'')
%jdbc(hive)
Select regexp_replace(dealids,'\\[','\\\'') as place
From temp.track_join_rtq_freq_20181029
limit 10
hive笔记:转义字符的使用的更多相关文章
- Hive笔记--sql语法详解及JavaAPI
Hive SQL 语法详解:http://blog.csdn.net/hguisu/article/details/7256833Hive SQL 学习笔记(常用):http://blog.sina. ...
- Hive 笔记
DESCRIBE EXTENDED mydb.employees DESCRIBE EXTENDED mydb.employees DESCRIBE EXTENDED mydb.employees ...
- hive笔记(自学整理的)
第一部分:用户管理 创建用户:CREATE DATABASE XXX 查看用户:SHOW DATABASES; 关键查看用户:show databases like 'de.*' 讲解:创建一个用 ...
- Hive笔记--配置以及遇到的问题
ubuntu安装mysql http://www.2cto.com/database/201401/273423.html Hive安装: http://www.aboutyun.com/forum ...
- Hive笔记——技术点汇总
目录 · 概况 · 手工安装 · 引言 · 创建HDFS目录 · 创建元数据库 · 配置文件 · 测试 · 原理 · 架构 · 与关系型数据库对比 · API · WordCount · 命令 · 数 ...
- hive笔记:复杂数据类型-map结构
map 结构 1. 语法:map(k1,v1,k2,v2,…) 操作类型:map ,map类型的数据可以通过'列名['key']的方式访问 案例: select deductions['Feder ...
- hive笔记
cast cast(number as string), 可以将整数转成字符串 lpad rpad lpad(target, 10, '0') 表示在target字符串前面补0,构成一个长度为 ...
- hive笔记:时间格式的统一
一.string类型,年月日部分包含的时间统一格式: 原数据格式(时间字段为string类型) 取数时间和格式的语法 2018-11-01 00:12:49.0 substr(regexp_repl ...
- hive笔记:复杂数据类型-array结构
array 结构 (1)语法:array(val1,val2,val3,…) 操作类型:array array类型的数据可以通过'数组名[index]'的方式访问,index从0开始: (2)建表: ...
随机推荐
- Java 容器源码分析之 Set
Set 表示由无重复对象组成的集合,也是集合框架中重要的一种集合类型,直接扩展自 Collection 接口.在一个 Set 中,不能有两个引用指向同一个对象,或两个指向 null 的引用.如果对象 ...
- Python转页爬取某铝业网站上的数据
天行健,君子以自强不息:地势坤,君子以厚德载物! 好了废话不多说,正式进入主题,前段时间应朋友的请求,爬取了某铝业网站上的数据.刚开始呢,还是挺不愿意的(主要是自己没有完整的爬取过网上的数据哎,即是不 ...
- PXE+kickstart无人值守安装CentOS 7
kickstart+cobbler系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 本文是PXE+kickstart无人值守安装CentOS ...
- Linux文件权限与属性详解 之 ACL
Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...
- μC/OS-II 任务的同步与通信 --- 消息队列
简介 使用消息队列可以在任务之间传递多条消息.消息队列由三个部分组成:事件控制块.消息队列和消息. 当把事件控制块成员 OSEventType 的值置为 OS_EVENT_TYPE_Q 时,该事件控制 ...
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- 前端(一)之 HTML
前端之 HTML 前言 python 基础.网络编程.并发编程与数据库要开始告一段落了,从现在开始进入前端的学习.前端的东西多且杂,需要好好地练习. 什么是前端 前端即网站前台部分,运行在 PC 端, ...
- Scrapy爬虫(4)爬取豆瓣电影Top250图片
在用Python的urllib和BeautifulSoup写过了很多爬虫之后,本人决定尝试著名的Python爬虫框架--Scrapy. 本次分享将详细讲述如何利用Scrapy来下载豆瓣电影To ...
- mysqldump备份(Windows)
先说下思路,每天凌晨1点备份线上云服务器上的MySQL数据库,将备份的sql文件拷贝下来. 第一步:通过搜索引擎搜索相关可借鉴的文章.搜索关键字"Windows MySQL 备份" ...
- .NET CORE 实践(3)--Visual Studio 2015 Update 3更新之后DotNetCore.1.0.1-VS2015Tools.Preview2.0.2.exe无法正确安装
打开 https://www.microsoft.com/net/core#windows,点击 https://go.microsoft.com/fwlink/?LinkId=691129下载vs2 ...