Hive实现自增列的两种方法

摘要:
Hive在关系数据库中没有自增列,但它也支持自增序列。通常,有两种方法生成代理键:使用row_number()窗口函数或使用用户定义的UDFRowSequence函数。第二种方法的性能归因于第一种方法。第一种方法执行速度慢,当数据超过数千万时,据报告内存不足。这也可能与hadoop的资源配置有关。当数据超过1.5亿时,第二种方法仍然可以快速运行。

多维数据仓库中的维度表和事实表一般都需要有一个代理键,作为这些表的主键,代理键一般由单列的自增数字序列构成。Hive没有关系数据库中的自增列,但它也有一些对自增序列的支持,通常有两种方法生成代理键:使用row_number()窗口函数或者使用一个名为UDFRowSequence的用户自定义函数(UDF)。


用row_number()函数生成代理键

INSERT OVERWRITE TABLE my_hive_table
select row_number() over (order by create_time asc) as id, key
from my_mid_table

用UDFRowSequence生成代理键

add jar viewfs://hadoop-meituan/user/hadoop-data/user_upload/weichao05_hive-contrib-3.1.0.jar;

create temporary function row_sequence as 'org.apache.hadoop.hive.contrib.udf.UDFRowSequence';

INSERT OVERWRITE TABLE my_test_table
select row_sequence() as id, key
from my_mid_table

hive-contrib-3.1.0.jar中包含一个生成记录序号的自定义函数udfrowsequence。上面的语句先加载JAR包,然后创建一个名为row_sequence()的临时函数作为调用UDF的接口,这样可以为查询的结果集生成一个自增伪列。之后就和row_number()写法类似了,只不过将窗口函数row_number()替换为row_sequence()函数。

以上两种方法,第二种的性能要由于第一种,第一种执行慢,且当数据超过约几千万(本人经验超过4千万)时,就报内存不够的了,这个可能与hadoop的资源配置也有关系,而第二中方法在数据超过1.5亿的情况下依然能够快速运行。

免责声明:文章转载自《Hive实现自增列的两种方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ORACLE 删除重复的数据Skylin CityBuilder 6.6.1 提示授权过期解决(License Manager中显示未过期)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

01-Hive综述(hive的安装、修改配置、基本使用)

 写在前面的话: 该系列博文是我学习《 Hive源码解析与开发实战》视频课程的一个笔记,或者说总结,暂时没有对视频中的操作去做验证,只是纯粹的学习记录。 有兴趣看该视频的博友可以留言,我会共享出来,相互交流学习 ^.^。 ********************************************************************...

Hive的web端配置——HWI

1.我们安装Hive的时候的版本为1.2.2,我们要下载1.2.2版本的web端的配置包apache-hive-1.2.2-src.tar.gz,下载地址:http://mirrors.shu.edu.cn/apache/hive/hive-1.2.2/ wget http://mirrors.shu.edu.cn/apache/hive/hive-1.2...

Hive on Spark 和Hive on mr执行结果不一致原因剖析

一、Hive 执行引擎概述 目前hive执行引擎支持三种,包括mr、spark和Tz;mr是hive最早支持的数据类型,执行速度最慢,但是性能上也是最为稳定的;spark和Tz是后续支持的执行引擎,也是将hive的SQL语句转换为spark可以识别的sparksql语句进行执行。 二、当有空表出现时,spark和mr执行引擎结果不一样问题排查 示例:sel...

Hive-学习总结(二)

四.HiveQL 查询 4.1select from 注意hive中有特殊的三种集合的形式 查询这三种类型时,hive会使用JSON语法输出,查询其中的元素方式如下 -- 数组 subordiantes[0] -- map deduction["State Taxes"] -- struct address.city 4.2 算数运算符 +,-,*,/,%...

Hive入门学习随笔(一)

===什么是Hive? Hive是基于Hadoop HDFS之上的数据仓库。 我们可以把数据存储在这个基于数据的仓库之中,进行分析和处理,完成我们的业务逻辑。 本质上就是一个数据库 ===什么是数据仓库? 实际上就是一个数据库。我们可以利用数据仓库来保存我们的数据。 与一般意义上的数据库不同。数据库是一个面向主题的、集成的、不可更新的、随时间不变化的数据集...

Hive的访问接口 | Allen's World

Hive的访问接口 | Allen's World Hive的访问接口 Hive提供了三种客户端访问接口: 1)Hive CLI(Hive Command Line,Hive命令行),客户端可以直接在命令行模式下进行操作。 2)hwi(Hive Web Interface,Hive Web接口),Hive提供了更直观的Web界面 3)hiveserve...