`

将公司oracle脚本迁移到hive平台hql时一些总结

    博客分类:
  • hive
 
阅读更多

 

 

 


1 hive group by  http://www.cnblogs.com/ggjucheng/archive/2013/01/09/2853798.html

2 hive in  http://www.tuicool.com/articles/vauiAzN
 
3 inner join  http://www.cnblogs.com/xd502djj/archive/2013/01/18/2866662.html

4 字符串连接符 oracle 'aaa' || 'bbb'  = 'aaabbb' 对应hive---> concat

5 oracle substr(字符串,截取开始位置,截取长度) --> substr('Hello World',2,4) //返回结果为 'ello'
  hive substr(string A, intstart, int len) --->hive> select substr('abcde',3,2) from lxw_dual;   // cd   oracle和hive的功能是一样的
 
6 oracle  a.entname||'%'     字符串连接函数
  hive    concat(a.entname,'%') 

7 在oracle中,  where substr(enttype,1,2) in ('43','58','68')  
                or   substr(enttype,1,3) in ('455')
    hive       where substr(enttype,1,2) = '43' or substr(enttype,1,2) = '58' or substr(enttype,1,2) = '68' or substr(enttype,1,3) = '455' 需要写在一行 否则报错
 
8 hive 获取当前时间
  这里使用shell方式,
  1 有个模板文件,里面 sql为 where date1 > to_date('%SYSDATE%')
  2写shell,将模板文件cp到目标目录,得到shell的当前时间 后用 sed -i将拷贝到目标目录的文件的%SYSDATE%替换为shell的当前时间
  3 shell中通过 hive -f 方式执行替换后的目标文件
  eg:
  current_date=$(date +%Y-%m-%d)
 
  src_dir=src
  target_dir=target_$current_date
 
  rm -rf $target_dir > /dev/null 2>&1
  mkdir $target_dir
 
  cp $src_dir/temp.sql $target_dir/temp.sql
  sed -i "s/%SYSDATE%/$current_date/g" $target_dir/temp.sql
 
  sudo -u hdfs hive -f $target_dir/temp.sql

9 hive多库下,创建表可以指定库名, eg : create table mydb.stu(id string, name string);
  使用hive -f时,可以在对应linux路径的 .sql文件中第一行指定库,这样sql里面的创建表都会在指定库下 create database if not exists st_statics; use  st_statics;
  
  
10 hive union all 和 oracle的 union all结果一样 都是讲两个表的所有数据都弄在一起 即使重复也弄在一起 http://www.tuicool.com/articles/MZf6ny

11 hive case when CN is null then 0 else CN end CN

12 http://blog.csdn.net/jim110/article/details/6923934  left join 过滤条件写在on后面和写在where 后面的区别

13 hive 资源被使用完了 启动hive脚本不执行  使用 mapred job -list

14 hive join连接中的不等值和过滤条件区别:
 join连接的过滤条件:  from a join b on a.id = b.id where a.fsq_zlix <> '12' 这是过滤 不是不等值连接

15 在使用cdh的时候,使用root登录后,hive环境下执行hive sql,有时候会报cannot run program "/opt/cloudera/parcels/CHD-5.2.1-../hadoop/bin/hadoop" (in directory "/root") error=13
        Permission denied的错.此时登录到 /home/hdfs/下进入 sudo -u hdfs hive 执行hive脚本就不会报错

16  hive自定义函数, 在 xx.sql中引用写法:  
  1 写好hive udfs函数 打jar
  2 将jar 放再集群hive安装节点一个位置 eg:  /cloud/mr/ent_statistics/ent_statistics.jar
  3 xx.sql(hive sql脚本)开头,写:
    set hive.cli.print.current.db=true;
    set hive.cli.print.header=true;
    add jar /cloud/mr/ent_statistics/ent_statistics.jar
    create temporary function instrfun as 'org.apache.hadoop.hive.ql.udf.instrfun';

17  oracle union 在hive应用:  用collect_set 这个函数试试  
  感觉应该是 现将两个表相同的记录弄临时表a后 然后在将这两个表用  collect_set得到没有重复的记录b  然后在合并 
  
18  hive uuid自定义函数:  @UDFType(deterministic = false)    http://chengjianxiaoxue.iteye.com/admin/blogs/2263225

 

20  将linux本地文件上传到hive表中, 要让hive表中 name is null,那么上传文件name对应字段为 \N 如果写成null,那么入到hive表后为 name='null'而不是is null.

21  hive两个表列间隔,
一个是\t
stu:
1 张三
2 李四
一个是,
score
1 50
2 90
执行hive:  select a.* ,b.score  from stu a left join b score on a.id=b.id; 能够执行成,也就是说,表中列的间隔尽管不同,但是Hive的编译执行器会帮你过滤掉不同
实现统一化表操作。

 

22 hive on  where的区别 以及where是在哪里执行的 map 还是reduce
   hive不等值连接:
   http://blog.csdn.net/lpxuan151009/article/details/7956568
   http://blog.csdn.net/kntao/article/details/17440903
   http://my.oschina.net/leejun2005/blog/98244
   http://my.oschina.net/leejun2005/blog/307812
   http://scholers.iteye.com/blog/1771945 !!!!

23 测试下hive0.13下 select name form t1; 是否还在走mr  在走,----> 不走

24 hive join on where :  joins发生在where字句前,如果果要限制join的输出,需要写在where字句,否则写在JOIN字句 
   http://yugouai.iteye.com/blog/1849395  join on where 中的详细介绍
   SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key) 
   WHERE a.ds='2009-07-07' AND b.ds='2009-07-07'    -----> join on where中where是在join on后的结果集后在进一步过滤
 
   或者写成: SELECT a.* FROM a JOIN b ON (a.id = b.id AND a.department = b.department)  就是将where的过滤写在了on上。
   详细举例:
stu:
1 张三
2 李四
3   王五
4   赵六
一个是,
score
1 90
2 50
3   150
5   200
join  on  where 分开写:
select a.*, b.score from stu a left join score b on a.id = b.id where a.id='1';
1 张三 90
join on where条件写在on内
select a.*, b.score from stu a left join score b on (a.id = b.id and a.id='1');    可以看到 写法不一样 明显操作方式是不同的。
1 张三 90
2 李四    NULL
3   王五    NULL
4   赵六    NULL

 

 

25 oracle Procedure结构:
 declare
 定义部分(可选)
 begin
 可执行部分(必选)
 exception
 异常处理部分(可选)
 end;


26 oracle  insert into stu with xxx as tmp1   ....   这个表示根据xxx的查询规则得到临时表tmp1, 然后在后面sql中引用tmp1的数据在和别的表处理
   处理后的结果在保存到表 stu中。
  

 

27 hive union all, 子查询, left join !!!!  http://www.tuicool.com/articles/MZf6ny
 stu a union all tea b;  ---->
id   | name     |
+------+----------+
| 1    | zhangsan |
| 2    | lisi     |
| 3    | wangwu   |
| 1    | zhaoliu  |
| 2    | lisi     |
| 1    | 50       |
| 4    | 90       |
| 5    | 150 
 


28  where  a.pripid = b.pripid(+) ,哪边有(+)哪边就允许为空
    等同于  from a left join b on a.pripid = b.pripid; 
 SELECT a.*, b.* from a(+) = b就是一个右连接,等同于select a.*, b.* from a right join b
    SELECT a.*, b.* from a = b(+)就是一个左连接,等同于select a.*, b.* from a left join b

 

29  oracle :  oracle中的nulls last/first   等效于  mysql的 order by desc/asc 
 
30  oracle: http://www.cnblogs.com/ggjucheng/archive/2013/01/03/2842855.html  hive in not in  

31  hive  row_number() over(partition by pripid order by candate) rn from d_e_gt_cancel where ....   hive0.13之后可以支持

32  hive 类型强转  select CONAM ,cast(CONAM as decimal(18,6))*0.07  as test111 from d_ei;  其中,CONAM是投资金额在oracle中是number(18,6)的精度,hive中用string存 

 

在hive计算中会出现科学计数法,需要原值展示并保存到hdfs,(如果是用科学计数法存在hdfs的数比如真实是 85423318.1568,而科学计数法为 8.542331815680001E7 那么用后者数据在导入到关系库时也是后者写法), 现在需要前者方式存储,写法为:

select cast(0.615*8.32*16694676 as dicimal(18,4)) from dual limit 2;

85423318.1568

85423318.1568
 注意, 必须是18位,如果位数小返回结果为NULL

 

33  join on  stu.name = score.name 时需要注意的:

    一般关系库导入hdfs时都会对Null做初始化处理 比如处理成''

    在hive中使用 join时候 要注意   join on  stu.name = score.name  两边都为 ''的情况

    一般业务上 会对两边为'' 做过滤处理,eg:

    join on  stu.name = score.name  and stu.name !='' and score.name  != ''

 

   否则会多出很多数据, eg:

stu:
id	name
1	zhangsan
2	''

score:
id	name	score
1	zhangsan	50
2	''	90
3	''	150

create table stu(id string,name string) row format delimited fields terminated by '\t';

create table score(id string,name string,score string) row format  delimited fields terminated by '\t';

load data local inpath 'stu' into table stu;
load data local inpath 'score' into table score;

select stu.*, sco.score from stu stu join score sco on stu.name=sco.name;
Total MapReduce CPU Time Spent: 1 seconds 280 msec
OK
stu.id  stu.name        sco.score
1       zhangsan        50
2       ''      90
2       ''      150

 

 34 关于join on 条件1 and 条件2 的补充:

  join on 条件1 where 条件2   ---->  需要些笔记总结和实验,

 

35 hive函数 concat转义字符 ;的使用:

   select ('a',';','b') from stu; 会报错,报什么EOF的错,其实就是 ;需要转义的意思,

 应该修改成  select ('a','\;','b') from stu;  最后结果就是  a;b 

 

 

36 业务要求如下:

对业务主键字段去重,同时还有: 
若FCP_FZRQ不为空时,选取发布日期较早的一条,  a
若FCP_FZRQ不全为空时,保留不为空的一条, b
若FCP_FZRQ同时为空时,随机保留一条: c

下面写法中,order by case when FQX_FZRQ <> '' then FQX_FZRQ else null 表示分组时就按照FQX_FZRQ升序排,这样在分组后FQX_FZRQ都不是null的情况下,
自然能将 asc下第一条获取到,满足了条件a,

然后,条件b下,then FQX_FZRQ else null时,那么这个null在 asc排序下不参与排序,规则和oracle的一致,如下
缺省Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前 
这样的情况下,自然能符合条件b的获取数据,
至于条件c,因为是随便的因此获取数据规则和条件 a,b一致即可。

 

代码如下

 

 
insert into table f_china_qyjs
select sysdateFun1('yyyyMMdd'),
t.pripid,
t.s_ext_nodenum,
t.entname,
t.entname_gllzd,
tocharFun(t1.FQX_ISSDATE,'yyyy-MM-dd','yyyy/MM/dd'),
'14',
'A1402',
'',
t1.FQX_EVAUNIT,
concat(t1.FQX_CERNUM,t1.FQX_EVAUNIT,t1.FQX_ISSDATE,t1.FQX_ENTNAME),
t1.fqx_id
from (select * from be_derivative_db20151200.f_ent_qyzm where s_ext_nodenum='110000') t
inner join (select *, row_number() over(partition by FQX_CERNUM,FQX_EVAUNIT,FQX_ISSDATE,FQX_ENTNAME order by case when FQX_FZRQ <> '' then FQX_FZRQ  else null end asc ) num from ST_SRRZ.CHANPIN) t1 
on t.entname_gllzd = t1.FCP_QYMC_GLLZD and t1.num = 1 
where length(t.entname_gllzd) > 3 and t1.FCP_FZRQ <> '' AND T1.FCP_FZRQ is not null;

 

37:   将企业成立之前的所有废弃数据删除掉:

 

select xxx, .....  
from (select *, min(case when fhq_act='A0101' then fhq_time else null end) over(partition by fhq_lcid, fhq_area) qycl_date from f_china_qyjs_2 t where fhq_time<> '') t
left join m_weidu2 t1 on t.fhq_act = t1.wddm 
left join m_shijian t2 on t.fhq_act = t2.wddm 
where  t.fhq_time >=t.qycl_date 
group by t.ddate, toCharFun1(t.fhq_time,'yyyy/MM/dd','yyyy/MM'), t.fhq_lcid, t.fhq_areq, t2.wdmc, t1.wddw,t1.wdzd;

上面的min是当状态为A0101即企业成立时,将fhq_lcid, fhq_area作为分组字段后聚合所有相同企业并得到这些行的最小企业成立时间,
然后在每条记录对比的时候,用每条记录的fhq_time和这个最小成立时间qycl_date做对比来过滤掉不符合的数据。

 

 

分享到:
评论

相关推荐

    Hive Pkg STGY TACT TEST UTLpkg

    这可能包括如何使用HiveQL(Hive的SQL方言)编写查询,如何配置Hive以适应不同的存储和计算需求,或者在进行数据迁移时需要注意的关键点。 压缩包内的文件“mynote.zip”可能包含了作者关于这个主题的详细笔记,...

    数据仓库不同类型的脚本.zip

    在数据仓库场景中,Oracle SQL脚本常用于创建表、索引、分区,执行数据迁移,以及进行复杂的数据转换。 4. **PostgreSQL SQL**(PgSQL):PostgreSQL是一个开源的对象关系型数据库,具有丰富的SQL支持和强大的数据...

    sqoop-jar.zip

    - **集成Sqoop**: 使用`--hive-import`选项,可以直接将导入的数据创建为Hive表,方便后续使用HQL进行数据分析。 5. **使用注意事项** - **元数据同步**: 当从数据库导入数据到Hadoop时,Sqoop并不自动处理数据库...

    hadoop权威指南

    - **Pig Latin**: 一种简单的数据流语言,用于编写复杂的数据处理脚本。 - **特点**: - 提供了一种更高级的抽象层次,简化了MapReduce程序的编写。 - 支持用户自定义函数(UDF)。 - **应用场景**: - 数据清洗。 ...

    AI从头到脚详解如何创建部署Azure Web App的OpenAI项目源码

    【AI】从头到脚详解如何创建部署Azure Web App的OpenAI项目源码

    人脸识别_卷积神经网络_CNN_ORL数据库_身份验证_1741779511.zip

    人脸识别项目实战

    人工智能-人脸识别代码

    人工智能-人脸识别代码,采用cnn的架构识别代码

    汽车配件制造业企业信息化整体解决方案.pptx

    汽车配件制造业企业信息化整体解决方案

    短期风速预测模型,IDBO-BiTCN-BiGRU-Multihead-Attention IDBO是,网上复现 评价指标:R方、MAE、MAPE、RMSE 附带测试数据集运行(风速数据) 提示:在

    短期风速预测模型,IDBO-BiTCN-BiGRU-Multihead-Attention IDBO是,网上复现 评价指标:R方、MAE、MAPE、RMSE 附带测试数据集运行(风速数据) 提示:在MATLAB2024a上测试正常 ,短期风速预测模型; IDBO-BiTCN-BiGRU-Multihead-Attention; 评价指标: R方、MAE、MAPE、RMSE; 复现; 测试数据集; MATLAB 2024a,短期风速预测模型:IDBO-BiTCN-BiGRU-Attention集成模型

    手势识别_数据融合_运动融合帧_Pytorch实现_1741857761.zip

    手势识别项目实战

    智慧园区IBMS可视化管理系统建设方案PPT(61页).pptx

    在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。

    相亲交友系统源码 V10.5支持婚恋相亲M红娘系统.zip

    相亲交友系统源码 V10.5支持婚恋相亲、媒婆返利、红娘系统、商城系统等等 这款交友系统功能太多了,适合婚恋相亲,还有媒婆婚庆等等支持 PC和 H5还有小程序,可封装红年、APP,里面带安装教程

    单片机也能玩双核之你想不到c技巧系列-嵌入式实战(资料+视频教程)

    本资源《单片机也能玩双核之你想不到的C技巧系列——嵌入式实战》涵盖 双核单片机开发、C语言高级技巧、嵌入式系统优化 等核心内容,结合 实战案例与视频教程,帮助开发者深入理解并掌握高效编程技巧。 适用人群: 适合 嵌入式开发工程师、单片机开发者、电子信息相关专业学生,以及希望提升 C语言编程能力 和 嵌入式项目经验 的技术人员。 能学到什么: 双核单片机开发思路,提高并行处理能力。 C语言高级技巧,提升代码优化与执行效率。 嵌入式系统调试方法,掌握实际项目中的调试策略。 实战案例解析,学习如何在实际工程中应用双核技术。 阅读建议: 建议 先学习基础知识,再结合 示例代码与视频教程 进行实操,重点关注 代码优化、调试技巧与双核应用模式,通过实战演练提高嵌入式开发能力。

    计算机视觉_OpenCV_人脸识别_成本节约检测方案_1741779495.zip

    人脸识别项目源码实战

    `机器学习_深度学习_Keras_教程用途`.zip

    人脸识别项目源码实战

    地铁网络_Dijkstra_最短路径_查询工具_1741862725.zip

    c语言学习

    红外光伏缺陷目标检测模型,YOLOv8模型 基于红外光伏缺陷目标检测数据集训练,做了必要的数据增强处理,以达到缺陷类别间的平衡 可检测大面积热斑,单一热斑,二极管短路和异常低温四类缺陷 测试集指标如

    红外光伏缺陷目标检测模型,YOLOv8模型 基于红外光伏缺陷目标检测数据集训练,做了必要的数据增强处理,以达到缺陷类别间的平衡 可检测大面积热斑,单一热斑,二极管短路和异常低温四类缺陷 测试集指标如图所示 ,核心关键词:红外光伏缺陷目标检测模型; YOLOv8模型; 数据增强处理; 缺陷类别平衡; 大面积热斑; 单一热斑; 二极管短路; 异常低温。,基于YOLOv8的红外光伏缺陷检测模型

    基于PLC的自动浇花控制系统 西门子1200PLC博途仿真,提供HMI画面,接线图,IO分配表,演示视频,简单讲解视频 博图15.1及以上版本均可使用 ,核心关键词: PLC自动浇花控制系统; 西

    基于PLC的自动浇花控制系统 西门子1200PLC博途仿真,提供HMI画面,接线图,IO分配表,演示视频,简单讲解视频 博图15.1及以上版本均可使用 ,核心关键词: PLC自动浇花控制系统; 西门子1200PLC博途仿真; HMI画面; 接线图; IO分配表; 演示视频; 简单讲解视频; 博图15.1及以上版本。,基于PLC的自动浇花系统:西门子1200PLC博途仿真实践教程

    智慧园区标准化综合解决方案PPT(60页).pptx

    在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。

    大型集团用户画像系统化标准化数字化用户主数据管理项目规划方案.pptx

    大型集团用户画像系统化标准化数字化用户主数据管理项目规划方案

Global site tag (gtag.js) - Google Analytics