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亿的情况下依然能够快速运行。

  • 相关阅读:
    bzoj 3930: [CQOI2015]选数
    bzoj 2301: [HAOI2011]Problem b
    HDU 1695 GCD
    2017ACM/ICPC广西邀请赛-重现赛 1007.Duizi and Shunzi
    2017ACM/ICPC广西邀请赛-重现赛 1010.Query on A Tree
    2017ACM/ICPC广西邀请赛-重现赛 1004.Covering
    P3501 [POI2010]ANT-Antisymmetry
    P1171 售货员的难题
    P3385 【模板】负环
    P1659 [国家集训队]拉拉队排练
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/13080852.html
Copyright © 2011-2022 走看看