2021-02-01存过迁移中的一点问题

原语句:

create table if not exists t_court_info_ls1 
as select court_eid
          ,regexp_substr(grid_id, '[^,]+', 1, level) grid_id
   from t_court_info_mid t
   connect by level <= regexp_count(grid_id, ',') + 1
   and court_eid = prior court_eid
   and prior dbms_random.value is not null;

点1:regexp_substr(grid_id, ''[^,]+'', 1, level)

说明:

REGEXP_SUBSTR函数用于为模式搜索字符串,其中模式由与POSIX兼容的正则表达式所指定。REGEXP_SUBSTR函数返回的字符串与在调用函数中所指定的模式匹配。

语法:

TEXT REGEXP_SUBSTR
( srcstr        TEXT, 
  pattern       TEXT, 
  position      INT  DEFAULT 1, 
  occurrence    INT  DEFAULT 1,
  modifier      TEXT DEFAULT NULL,
  subexpression INT  DEFAULT 0 )

参数

参数名称 描述
srcstr srcstr指定要搜索的字符串。
Pattern pattern 用于指定REGEXP_SUBSTR 要搜索的正则表达式。
position position指定表明在源字符串中起始位置的整数值。缺省值为1。
occurrence 如果在搜索字符串时, 有一个以上的模式出现,那么occurrence则用于指定返回的匹配信息。缺省值为1.
modifier modifier用于指定控制模式匹配行为的值。缺省值为NULL。
subexpression subexpression是一个整数值,用于识别由REGEXP_SUBSTR返回的pattern部分。subexpression的缺省值为0。如果我们给subexpression指定一个值,那么在pattern中必须包括一组(或多组)的括号,来孤立正在搜索的值的部分。由subexpression指定的值表明了应被返回的括号组。例如,如果subexpression为2,那么REGEXP_SUBSTR将返回第二组括号的位置。
  • 下面的简单示例中,REGEXP_SUBSTR搜索的字符串为第一组包含3个连续数字的电话号码:
SELECT REGEXP_SUBSTR('800-555-****', '[0-9][0-9][0-9]', 1, 1) FROM DUAL;
--------------
 800
(1 row)        

点2:regexp_count(grid_id, '','') + 1

说明:

REGEXP_COUNT用于为正则表达式搜索字符串,且返回正则表达式发生的时间信息。

语法

INTEGER REGEXP_COUNT
( srcstr    TEXT,
  pattern   TEXT,
  position  DEFAULT 1
  modifier  DEFAULT NULL)

参数

参数名称 描述
srcstr 指定要搜索的字符串
pattern 指定REGEXP_COUNT要搜索的正则表达式
position position是一个整数值,用于表明REGEXP_COUNT要在源字符串中开始搜索的位置。缺省值为1。
modifier modifier用于指定控制模式匹配行为的值。缺省值为NULL。

示例

在下列简单示例中,REGEXP_COUNT返回的是在字符串'reinitializing'中字母i的使用次数:

 SELECT REGEXP_COUNT('reinitializing', 'i', 1) FROM DUAL;
            5
(1 row)        

在第一个示例中,命令了REGEXP_COUNT开始在首位计数。如果我们要修改指令使其在第六位开始计数,那么就可以:

SELECT REGEXP_COUNT('reinitializing', 'i', 6) FROM DUAL;
            3
(1 row)            

那么REGEXP_COUNT返回的就是3,且计数结果不包括任何出现在第六位之前的字母i。

点3:connect by

说明

connect by主要用在层级关系的查询,可实现多种功能
1、列出上下级关系;
2、构造序列;
3、实现排列组合;

语法

SELECT ... FROM
           [WHERE condition]                             --过滤某些节点
           [START WITH [nocycle] start_condition]    --定义查询的起点, 可以使用子查询
          CONNECT BY [[nocycle] PRIOR COLUMN1 = COLUMN2 [AND ...]];   --定义父子关系
          order [ sibilings ] by ...

hive中使用爆炸函数 ---修改为:

create table if not exists t_court_info_ls1 as select
        court_eid ,
        mycol1 
    from
        t_court_info_mid t lateral view explode( split(grid_id, ',')) mytable1 as mycol1 ;

你可能感兴趣的:(2021-02-01存过迁移中的一点问题)