具有多个选择的Hive插入

时间:2015-11-02 12:42:30

标签: hive hiveql

我想在hive中执行类似的操作:

insert into mytable values (select count(*) from test2), (select count(*) from test3));

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:1)

为什么需要创建一个以行计数为列的hive表?假设您必须每天记录行数,我不确定我们是否可以在蜂巢中执行此操作。

但是如果你想要快照所有表的行数,你可以尝试运行这样的shell脚本......

$hive -e 'use schema_name; show tables' | tee tables.txt

这将数据库中的所有表存储在text.txt文本文件中 现在,编写一个shell脚本来获取所有已收集的表的计数

while read line
do
echo "$line "
eval "hive -e 'select count(*) from $line'"
done

更改现在生成的文件的文件权限

$chmod +x count_tables.sh
$./count_tables.sh < tables.txt > counts.txt

如果您要定期记录行计数,可以将行计数存储在csv中,方法是将值写为逗号分隔值并创建指向该文件的外部表。

类似

$./count_tables.sh < tables.txt | sed 's/\t/,/g' > counts.txt

希望这是实现这一目标的最佳方式

答案 1 :(得分:0)

我找到了答案。它应该是这样的:

INSERT INTO TABLE mytable 
    SELECT c1,c2 FROM
      (SELECT count(*) FROM test2) AS c1
    JOIN
      (SELECT count(*) FROM test3) AS c2;