IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> impala查询转义问题 -> 正文阅读

[大数据]impala查询转义问题

select REGEXP_REPLACE('佰分贰拾(深圳)品牌管理有限公司', '\\(', '(')

然后

SELECT ?vendor_full_name,REGEXP_REPLACE(vendor_full_name, '\\(', '(')?
FROM odsmdmdata.sms_vendor_party_t

报错,这就日了狗了 仔细看报错日志 我就两个\\ 怎么就被转义成4个\\了

所以我只用一个\就好

SELECT ?vendor_full_name,REGEXP_REPLACE(vendor_full_name, '\(', '(')?
FROM odsmdmdata.sms_vendor_party_t
where ?sms_vendor_id ='40539';

?

接着研究下?REGEXP_REPLACE 函数

Impala String Functions | 5.9.x | Cloudera Documentationicon-default.png?t=M276https://docs.cloudera.com/documentation/enterprise/5-9-x/topics/impala_string_functions.html

[localhost:21000] > select regexp_replace('aaabbbaaa','b+','xyz');
+------------------------------------------+
| regexp_replace('aaabbbaaa', 'b+', 'xyz') |
+------------------------------------------+
| aaaxyzaaa                                |
+------------------------------------------+
Returned 1 row(s) in 0.11s

?这里好理解 b+只得是1个b或者多个b 这里匹配到了bbb 所以bbb替换到xyz ,so easy

[localhost:21000] > select regexp_replace('aaabbbaaa','(b+)','<\\1>');
+----------------------------------------------+
| regexp_replace('aaabbbaaa', '(b+)', '<\\1>') |
+----------------------------------------------+
| aaa<bbb>aaa                                  |
+----------------------------------------------+
Returned 1 row(s) in 0.11s

这里(b+) 指的是 bbb这三个整体 注意这个括号不能省略, <\\1>中的\\就是上文bbb? ,<>就是包围

select?
regexp_replace('aaabbbaaa','(b+)','<\\1>'),
regexp_replace('aaabbbaaa','b+','<\\1>'), --验证必须有()
regexp_replace('aaabbbaaa','(b+)','【\\1】'),--验证<>可以随意替换
regexp_replace('aaabbbaaa','a(b+)','【\\1】')--验证只有括号里的才有用

[localhost:21000] > select regexp_replace('123-456-789','[^[:digit:]]','');
+---------------------------------------------------+
| regexp_replace('123-456-789', '[^[:digit:]]', '') |
+---------------------------------------------------+
| 123456789                                         |
+---------------------------------------------------+

[[:digit:]]代表数字,这种写法是为了避免转义字符, ^是非的意思

验证

select regexp_replace('123-456-789','[^\\d+]',''),?
regexp_replace('123-456-789','[[:digit:]]','')?

?

以上3个demo都很简单,但是我网上查到一个突然就有点懵了

SELECT REGEXP_REPLACE('(jackie)&|(jackie chan)', '\\(|\\)|(|)', ' ')?

乍一看好像很复杂。。

实际上还好。

\\(|\\)|(|)' 其实可以看作?\\(? |? ?\\)? ?|? (|) 也就是\\( = ( ,\\)=) ,|=或的意思 ,(|)这个是啥呢?经过我测试(|)=()=两个字符中间没有空的那个没空,验证如下

SELECT REGEXP_REPLACE('(jackie)&|(jackie chan)', '\\(|\\)|(|)', ' ') ,
REGEXP_REPLACE('(jackie)&|(jackie chan)', '\\(|\\)|()', ' ') ,--这个为了说明(|)=()
REGEXP_REPLACE('(jackie)&|(jackie chan)', '\\(|\\)', ' ') ,--这个为了说明这个正则就是匹配()把它替换空格
REGEXP_REPLACE('(jackie)&|(jackie chan)', '()', '-') -- 这个为了说明()=无空

——————————————————————————————————————————

顺道学习点函数

split_part

select split_part('one***two***three','***',2);
+-------------------------------------------+
| split_part('one***two***three', '***', 2) |
+-------------------------------------------+
| two                                       |
+-------------------------------------------+

select split_part('one\|/two\|/three','\|/',3);
+-------------------------------------------+
| split_part('one\|/two\|/three', '\|/', 3) |
+-------------------------------------------+
| three                                     |
+-------------------------------------------+

translate

select translate ('hello world','world','earth');

+--------------------------------------------+
| translate('hello world', 'world', 'earth') |
+--------------------------------------------+
| hetta earth ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????|
+--------------------------------------------+

我有另外一篇文章专门解释translate 暂不说了。

说下其他的 中文乱码, 但是replace?是可以的。暂无解决办法

?--未完待续

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:05:37  更:2022-04-15 00:06:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:53:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码