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

  • 相关阅读:
    Webpack的学习总结(1)
    mybatis-plus逻辑删除
    vscode编译调试C/C++多文件——linux(makefile)
    vscode配置调试C/C++程序——linux环境(命令行编译)
    shell编程题(二十二)
    shell编程题(二十三)
    shell编程题(二十一)
    shell编程题(二十)
    GTK开发视频播放器
    C语言实现LRU缓存(二)
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/13080852.html
Copyright © 2011-2022 走看看