gpt4 book ai didi

hive 自动增加一定数量后

转载 作者:行者123 更新时间:2023-12-04 06:55:59 25 4
gpt4 key购买 nike

我必须将数据插入到目标表中,该表中的所有列均应从不同的源表中填充(代理键列除外);它应该是目标表的最大值加上从1开始的自动增量值。我可以使用row_number()函数生成自动增量值,但是在同一查询中,我应如何从目标表中获取代理键的最大值。在HIVE中,有什么概念可以选择代理 key 的最大值并将其保存在临时变量中?还是有其他简单的方法可以达到这个结果?

最佳答案

这是解决上述问题的两种方法。 (以示例说明)

方法1:使用shell脚本通过$ {hiveconf}变量获取最大值并设置为配置单元命令

方法2:使用row_sequence(),max()和join操作进行

我的环境:

hadoop-2.6.0
apache-hive-2.0.0-bin

步骤:( 注意:步骤1和步骤2在两种方法中都是相同的。从步骤3开始,两者均不同)

步骤1:创建源表和目标表

来源
hive>create table source_table1(string name);
hive>create table source_table2(string name);
hive>create table source_table2(string name);

目标
hive>create table target_table(int id,string name);

步骤2:将数据加载到源表中
hive>load data local inpath 'source_table1.txt' into table source_table1;
hive>load data local inpath 'source_table2.txt' into table source_table2;
hive>load data local inpath 'source_table3.txt' into table source_table3;

输入样例:

source_table1.txt
a
b
c

source_table2.txt
d
e
f

source_table3.txt
g
h
i

方法1:

步骤3:创建shell脚本hive_auto_increment.sh
#!/bin/sh
hive -e 'select max(id) from target_table' > max.txt
wait
value=`cat max.txt`
hive --hiveconf mx=$value -e "add jar /home/apache-hive-2.0.0-bin/lib/hive-contrib-2.0.0.jar;
create temporary function row_sequence as 'org.apache.hadoop.hive.contrib.udf.UDFRowSequence';
set mx;
set hiveconf:mx;
INSERT INTO TABLE target_table SELECT row_sequence(),name from source_table1;
INSERT INTO TABLE target_table SELECT (\${hiveconf:mx} +row_sequence()),name from source_table2;
INSERT INTO TABLE target_table SELECT (\${hiveconf:mx} +row_sequence()),name from source_table3;"
wait
hive -e "select * from target_table;"

步骤4:运行shell脚本
 > bash  hive_auto_increment.sh 

方法2:

步骤3:添加Jar
    hive>add jar /home/apache-hive-2.0.0-bin/lib/hive-contrib-2.0.0.jar;

步骤4:在配置单元contrib jar的帮助下注册row_sequence函数
hive>create temporary function row_sequence as 'org.apache.hadoop.hive.contrib.udf.UDFRowSequence';

步骤5:将source_table1加载到target_table
hive>INSERT INTO TABLE target_table select row_sequence(),name from source_table1;

步骤6:将其他源加载到target_table
  hive>INSERT INTO TABLE target_table SELECT M.rowcount+row_sequence(),T.name from source_table2 T join (select max(id) as rowcount from target_table) M;

hive>INSERT INTO TABLE target_table SELECT M.rowcount+row_sequence(),T.name from source_table3 T join (select max(id) as rowcount from target_table) M;

输出:
INFO  : OK
+---------------+-----------------+--+
| target_table.id | target_table.name
+---------------+-----------------+--+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | e |
| 6 | f |
| 7 | g |
| 8 | h |
| 9 | i |

关于 hive 自动增加一定数量后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38949699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com