我想在hive中执行类似的操作:
insert into mytable values (select count(*) from test2), (select count(*) from test3));
有办法做到这一点吗?
答案 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;