二百一十九、Hive——HQL报错:Caused by: java.util.regex.PatternSyntaxException: Illegal repetition near index 1

这篇具有很好参考价值的文章主要介绍了二百一十九、Hive——HQL报错:Caused by: java.util.regex.PatternSyntaxException: Illegal repetition near index 1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、目的

在海豚调度HQL的脚本任务时报错,Caused by: java.util.regex.PatternSyntaxException: Illegal repetition near index 1

二、原本HiveSQL

with t1 as(
select
       get_json_object(queue_json,'$.deviceNo')   device_no,
       get_json_object(queue_json,'$.createTime') create_time,
       get_json_object(queue_json,'$.laneNum')    lane_num,
       get_json_object(queue_json,'$.queueList')  queue_list,
       day
from hurys_dc_ods.ods_queue
    )
insert  overwrite  table  hurys_dc_dwd.dwd_queue partition(day)
select
        t1.device_no,
        t1.lane_num,
        t1.create_time,
        get_json_object(list_json,'$.laneNo')         lane_no,
        get_json_object(list_json,'$.queueCount')     queue_count,
        cast(get_json_object(list_json,'$.queueLen')  as decimal(10,2))        queue_len,
        cast(get_json_object(list_json,'$.queueHead')  as decimal(10,2))       queue_head,
        cast(get_json_object(list_json,'$.queueTail')  as decimal(10,2))       queue_tail,
        date(t1.create_time) day
from t1
lateral view explode(split(regexp_replace(regexp_replace(queue_list,
                                                '\\[|\\]','') ,   --将json数组两边的中括号去掉
                                 '\\}\\,\\{','\\}\\;\\{'),  --将json数组元素之间的逗号换成分号
                  '\\;') --以分号作为分隔符(split函数以分号作为分隔)

          )list_queue as list_json
where  device_no is not null   and  get_json_object(list_json,'$.queueLen') >=0
group by t1.device_no, t1.lane_num, t1.create_time, get_json_object(list_json,'$.laneNo'), get_json_object(list_json,'$.queueCount'), cast(get_json_object(list_json,'$.queueLen')  as decimal(10,2)), cast(get_json_object(list_json,'$.queueHead')  as decimal(10,2)), cast(get_json_object(list_json,'$.queueTail')  as decimal(10,2)), date(t1.create_time)
;

原本的HiveSQL在Hive中执行正常!!!

caused by: java.util.regex.patternsyntaxexception: illegal repetition near i,Hive,hive,hadoop

三、原因分析

lateral view explode(split(regexp_replace(regexp_replace(queue_list,
                                                '\\[|\\]','') ,  
                                 '\\}\\,\\{','\\}\\;\\{'), 
                   '\\;') 

          )list_queue as list_json

因为+、*、|、\等符号在正则表达示中有相应的不同意义,所以在海豚调度HiveSQL时要进行转义处理。

一般采用加双斜杠进行转义,例如  '\\;')   变成   '\\\\;'),或者 将需要转义的字符放在 [] 中。

不过,还是采用在\前面再添加\这种方法居多

四、修改海豚调度HQL的脚本

#! /bin/bash
source /etc/profile

nowdate=`date --date='0 days ago' "+%Y%m%d"`
yesdate=`date -d yesterday +%Y-%m-%d`

hive -e "
use hurys_dc_dwd;

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=1000;
set hive.exec.max.dynamic.partitions=1500;

with t1 as(
select
       get_json_object(queue_json,'$.deviceNo')   device_no,
       get_json_object(queue_json,'$.createTime') create_time,
       get_json_object(queue_json,'$.laneNum')    lane_num,
       get_json_object(queue_json,'$.queueList')  queue_list,
       day
from hurys_dc_ods.ods_queue
    )
insert  overwrite  table  hurys_dc_dwd.dwd_queue partition(day='$yesdate')
select
        t1.device_no,
        t1.lane_num,
        t1.create_time,
        get_json_object(list_json,'$.laneNo')         lane_no,
        get_json_object(list_json,'$.queueCount')     queue_count,
        cast(get_json_object(list_json,'$.queueLen')  as decimal(10,2))        queue_len,
        cast(get_json_object(list_json,'$.queueHead')  as decimal(10,2))       queue_head,
        cast(get_json_object(list_json,'$.queueTail')  as decimal(10,2))       queue_tail
from t1
lateral view explode(split(regexp_replace(regexp_replace(queue_list,
                                                '\\\\[|\\\\]','') ,      --将json数组两边的中括号去掉
                                 '\\\\}\\\\,\\\\{','\\\\}\\\\;\\\\{'),   --将json数组元素之间的逗号换成分号
                   '\\\\;')   --以分号作为分隔符(split函数以分号作为分隔)

          )list_queue as list_json
where  device_no is not null   and  get_json_object(list_json,'$.queueLen') >=0   and  date(t1.create_time) = '$yesdate'
group by t1.device_no, t1.lane_num, t1.create_time, get_json_object(list_json,'$.laneNo'), get_json_object(list_json,'$.queueCount'), cast(get_json_object(list_json,'$.queueLen')  as decimal(10,2)), cast(get_json_object(list_json,'$.queueHead')  as decimal(10,2)), cast(get_json_object(list_json,'$.queueTail')  as decimal(10,2)), date(t1.create_time)
"

五、海豚脚本改好后执行任务

修改脚本后,海豚任务执行成功!又学会一招

caused by: java.util.regex.patternsyntaxexception: illegal repetition near i,Hive,hive,hadoop

六、在Hive的计算引擎为MapReduce时,脚本里最好不要添加Hive调优语句,否则可能会报错

(一)Hive的计算引擎为MapReduce

set hive.execution.engine;
--hive.execution.engine=mr

caused by: java.util.regex.patternsyntaxexception: illegal repetition near i,Hive,hive,hadoop

(二)在海豚脚本里添加Hive调优的SQL语句

set hive.vectorized.execution.enabled=false;
set hive.auto.convert.join=false;
set hive.exec.parallel=true;
set hive.support.concurrency=false;
caused by: java.util.regex.patternsyntaxexception: illegal repetition near i,Hive,hive,hadoop

(三)海豚任务运行报错

caused by: java.util.regex.patternsyntaxexception: illegal repetition near i,Hive,hive,hadoop

七、在Hive中执行的HiveSQL不能使用 \\\\; 只能使用 \\;,否则会报错

(一)原先执行成功的HQL   使用 \\;

with t1 as(
select
       get_json_object(queue_json,'$.deviceNo')   device_no,
       get_json_object(queue_json,'$.createTime') create_time,
       get_json_object(queue_json,'$.laneNum')    lane_num,
       get_json_object(queue_json,'$.queueList')  queue_list,
       day
from hurys_dc_ods.ods_queue
    )
insert  overwrite  table  hurys_dc_dwd.dwd_queue partition(day)
select
        t1.device_no,
        t1.lane_num,
        t1.create_time,
        get_json_object(list_json,'$.laneNo')         lane_no,
        get_json_object(list_json,'$.queueCount')     queue_count,
        cast(get_json_object(list_json,'$.queueLen')  as decimal(10,2))       queue_len,
        cast(get_json_object(list_json,'$.queueHead')  as decimal(10,2))       queue_head,
        cast(get_json_object(list_json,'$.queueTail')  as decimal(10,2))       queue_tail,
        date(t1.create_time) day
from t1
lateral view explode(split(regexp_replace(regexp_replace(queue_list,
                  '\\[|\\]','') ,   --将json数组两边的中括号去掉
         '\\}\\,\\{','\\}\\;\\{'),  --将json数组元素之间的逗号换成分号
  '\\;') --以分号作为分隔符(split函数以分号作为分隔)
          )list_queue as list_json
where  device_no is not null   and  get_json_object(list_json,'$.queueLen') >=0
group by t1.device_no, t1.lane_num, t1.create_time, get_json_object(list_json,'$.laneNo'), get_json_object(list_json,'$.queueCount'), cast(get_json_object(list_json,'$.queueLen')  as decimal(10,2)), cast(get_json_object(list_json,'$.queueHead')  as decimal(10,2)), cast(get_json_object(list_json,'$.queueTail')  as decimal(10,2)), date(t1.create_time)
;

caused by: java.util.regex.patternsyntaxexception: illegal repetition near i,Hive,hive,hadoop

(二)如果使用 \\\\;  则运行报错

with t1 as(
select
       get_json_object(queue_json,'$.deviceNo')   device_no,
       get_json_object(queue_json,'$.createTime') create_time,
       get_json_object(queue_json,'$.laneNum')    lane_num,
       get_json_object(queue_json,'$.queueList')  queue_list,
       day
from hurys_dc_ods.ods_queue
    )
insert  overwrite  table  hurys_dc_dwd.dwd_queue partition(day)
select
        t1.device_no,
        t1.lane_num,
        t1.create_time,
        get_json_object(list_json,'$.laneNo')         lane_no,
        get_json_object(list_json,'$.queueCount')     queue_count,
        cast(get_json_object(list_json,'$.queueLen')  as decimal(10,2))       queue_len,
        cast(get_json_object(list_json,'$.queueHead')  as decimal(10,2))       queue_head,
        cast(get_json_object(list_json,'$.queueTail')  as decimal(10,2))       queue_tail,
        date(t1.create_time) day
from t1
lateral view explode(split(regexp_replace(regexp_replace(queue_list,
               '\\\\[|\\\\]','') ,    --将json数组两边的中括号去掉
       '\\\\}\\\\,\\\\{','\\\\}\\\\;\\\\{'),   --将json数组元素之间的逗号换成分号
  '\\\\;') --以分号作为分隔符(split函数以分号作为分隔)
          )list_queue as list_json
where  device_no is not null   and  get_json_object(list_json,'$.queueLen') >=0
group by t1.device_no, t1.lane_num, t1.create_time, get_json_object(list_json,'$.laneNo'), get_json_object(list_json,'$.queueCount'), cast(get_json_object(list_json,'$.queueLen')  as decimal(10,2)), cast(get_json_object(list_json,'$.queueHead')  as decimal(10,2)), cast(get_json_object(list_json,'$.queueTail')  as decimal(10,2)), date(t1.create_time)
;

运行报错:[08S01][2] Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

caused by: java.util.regex.patternsyntaxexception: illegal repetition near i,Hive,hive,hadoop

Hive中不能再转义,否则会报错!!!

八、总结一下

(一)在Hive的执行的HQL,不需要转义处理,例如使用 \\;

lateral view explode(split(regexp_replace(regexp_replace(queue_list,
                  '\\[|\\]','') ,   --将json数组两边的中括号去掉
           '\\}\\,\\{','\\}\\;\\{'),  --将json数组元素之间的逗号换成分号
'\\;') --以分号作为分隔符(split函数以分号作为分隔)

(二)在海豚调度执行HiveSQL脚本任务时,需要使用\\进行转义处理,例如\\\\;

lateral view explode(split(regexp_replace(regexp_replace(queue_list,
                                                '\\\\[|\\\\]','') ,      --将json数组两边的中括号去掉
                                 '\\\\}\\\\,\\\\{','\\\\}\\\\;\\\\{'),   --将json数组元素之间的逗号换成分号
                   '\\\\;')   --以分号作为分隔符(split函数以分号作为分隔)

总是会遇到一些奇奇怪怪的问题,不过九九八十一难,也算是又经历一难吧,这个问题基本搞了一天。终于搞定了!文章来源地址https://www.toymoban.com/news/detail-789007.html

到了这里,关于二百一十九、Hive——HQL报错:Caused by: java.util.regex.PatternSyntaxException: Illegal repetition near index 1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 架构设计内容分享(二百一十):设计一个大并发、大数据的系统架构,说说设计思路

    架构设计内容分享(二百一十):设计一个大并发、大数据的系统架构,说说设计思路

    目录 大并发/大数据的软件有如下特点 大并发/大数据的架构目标有如下几个 大并发/大数据的设计思路与原则 大并发/大数据的分层架构 1 接入层的架构方案: 第二三层:应用层/服务层架构方案 第四层:数据层架构方案 第五层:基础设施层架构 高并发核武器:单元化+异地

    2024年02月21日
    浏览(8)
  • 第一百一十九回 如何通过蓝牙设备读写数据

    我们在上一章回中介绍了如何获取蓝牙状态相关的内容,本章回中将介绍 如何通过蓝牙设备读写数据 。闲话休提,让我们一起Talk Flutter吧。 通过蓝牙设备读写数据有两种方法: 一种是读写Characteristics; 一种是读写Descriptor. 我们在本章回中介绍的读写数据本质上是读写 Cha

    2024年02月12日
    浏览(11)
  • Emacs之改造最快文本搜索工具ripgrep(一百一十九)

    Emacs之改造最快文本搜索工具ripgrep(一百一十九)

    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏: Audio工程师进阶系列 【 原创干货持续更新中…… 】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:An

    2024年02月15日
    浏览(12)
  • C/C++基础讲解(一百一十九)之经典篇(最优美的图案)

    很多时候,特别是刚步入大学的学子们,对于刚刚开展的计算机课程基本上是一团迷雾,想要弄明白其中的奥秘,真的要花费一些功夫,我和大家一样都是这么啃过来的,从不知到知知,懵懂到入门,每一步都走的很艰辛,课程上,大学老师基本上讲解上机实操得时间特别有

    2024年02月09日
    浏览(14)
  • 一百一十三、DBeaver——从hive同步数据到clickhouse

    一百一十三、DBeaver——从hive同步数据到clickhouse

    目标:把hive的DM层结果数据导出到clickhouse数据库,试了kettle、sqoop等多种方法都报错,尤其是kettle,搞了大半天发现还是不行。结果目前就只能用DBeaver同步数据。 准备工作:hive和clickhouse中都建好表 第一步,右击clickhouse中的表,选择导入数据 第二步,在源类型和格式中,由

    2024年02月13日
    浏览(16)
  • 一百一十一、Hive——从HDFS到Hive的数据导入(静态分区、动态分区)

    一百一十一、Hive——从HDFS到Hive的数据导入(静态分区、动态分区)

    分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹, Hive 中的分区就是分目录 ,把一个大的数据集根据业务需要分割成小的数据集。 在查询时通过 where 子句中的表达式选择查询所需要的指定的分区,这样的查询效率 会提高很多,所以我们需要把常常用在where 语句中

    2024年02月12日
    浏览(43)
  • java报错:Caused by: fasterxml.jackson.core.JsonParseException: Unexpected character(‘}‘ (code 125))

    java报错:Caused by: fasterxml.jackson.core.JsonParseException: Unexpected character(‘}‘ (code 125))

    出现情况: 使用Swagger或postman发送含有请求参数的post请求时: 报错描述: 原始报错信息: 请求参数截图:  解决问题: 将箭头指向处的逗号去掉即可解决问题!

    2024年02月03日
    浏览(14)
  • Mybatis Plus 报错Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make

    Mybatis Plus 报错Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make

    报错信息 这原本是我使用MyBatis Plus配合Lambda表达式做一个模糊查询,但是报了这么个错误,以下为源代码,语法上是没啥问题的 语法上并没有什么错误,但是运行报错,百度了一番之后,发现只需要降低一下Mybat Plus的版本坐标,降到3.4.0或者以下即可 我原先好像是3.4.2,改

    2024年02月16日
    浏览(80)
  • java报错:Caused by: fasterxml.jackson.core.JsonParseException: Unexpected character (‘c‘ (code 99))

    java报错:Caused by: fasterxml.jackson.core.JsonParseException: Unexpected character (‘c‘ (code 99))

    出现情况: 使用Swagger或postman发送含有请求参数的post请求时: 原始报错信息: 请求参数截图:  报错原因: 封装的JSON参数没有按JSON的标准格式  解决问题: 将箭头指向处加上双引号,即可解决问题!

    2024年02月03日
    浏览(12)
  • JAVA面试题分享五百一十一:Spring Boot基于WebUploader实现超大文件上传和断点续传

    JAVA面试题分享五百一十一:Spring Boot基于WebUploader实现超大文件上传和断点续传

    目录 前言 目标 实现思路 大文件分片 合并分片 断点续传 代码实现 1、webuploader组件中,分片上传怎么开启? 2、webuploader组件中,文件的md5值如何计算? 3、webuploader组件中,分片文件的md5值如何计算? 4、webuploader组件中,分片上传的的请求在哪里触发? 5、前端、后端如何校

    2024年02月19日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包