zoukankan      html  css  js  c++  java
  • Hive实现自增列的两种方法

    多维数据仓库中的维度表和事实表一般都需要有一个代理键,作为这些表的主键,代理键一般由单列的自增数字序列构成。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亿的情况下依然能够快速运行。

  • 相关阅读:
    计算属性computed和watch侦听器
    .gitignore不起作用
    flex 布局
    vue-awesome-swiper
    Chrome截长屏
    JS 数组 foreach 和 map
    for-in 和 for
    边框画的三角形给shadow
    element-UI 表单图片判空验证问题
    Vue 表格内容根据后台返回状态位填充文字
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/13080852.html
Copyright © 2011-2022 走看看