hive/spark--select `(ds|hr)?+.+`

一、背景

  • 之前看到过好几次sql是下面这种写法, 又看到了,纯属兴趣记录一下~
select `(colum_a|colum_b)?+.+`
from table_a
  • 这个sql代表 从 表table_a 中select 出来 除了colum_a和colum_b的所有列

  • 这个官方文档是有示例的

    • 在这里插入图片描述

二、原理

  • 拆分(colum_a|colum_b)?+.+
    • (colum_a|colum_b)?+是一段,后面.+是第二段。
    • 需要特别注意的是第一段的?+ 是特殊用法,即 占有优先量词(一旦匹配某些内容,就不会 “交还”)。量词有哪些以及什么特性可以参考下这篇简单整理的正则相关小知识的文档
  • 实现过程
    • 第一段在匹配到colum_a或者colum_b后,第二段的.+代表任意字符必须出现一次或多次,这样colum_acolum_b就匹配不上了
    • 而其他列名的由于第一段(colum_a|colum_b)?+可以0匹配,第二段也满足,所以却能够匹配上。
    • 这样就巧妙的实现了匹配colum_acolum_b之外的所有列名了。
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值