【发布时间】:2015-12-02 03:12:33
【问题描述】:
我想在 hive 中执行类似的操作:
insert into mytable values (select count(*) from test2), (select count(*) from test3));
有没有办法做到这一点?
【问题讨论】:
我想在 hive 中执行类似的操作:
insert into mytable values (select count(*) from test2), (select count(*) from test3));
有没有办法做到这一点?
【问题讨论】:
为什么需要创建一个以行数为列的配置单元表?假设您必须每天记录行数,我不确定我们是否可以在 hive 中执行此操作。
但是,如果您想对所有表的行数进行快照,您可以尝试运行类似这样的 shell 脚本...
$hive -e 'use schema_name; show tables' | tee tables.txt
这会将数据库中的所有表存储在文本文件 tables.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
希望这是实现这一目标的最佳方式
【讨论】:
我找到了答案。应该是这样的:
INSERT INTO TABLE mytable
SELECT c1,c2 FROM
(SELECT count(*) FROM test2) AS c1
JOIN
(SELECT count(*) FROM test3) AS c2;
【讨论】:
INSERT INTO TABLE mytablehourlystatistics SELECT from_unixtime(unix_timestamp()),x,y,z FROM (SELECT count(*) AS x FROM my_table) AS c1 JOIN (SELECT count(*) AS y FROM my_table where col1 like '%xx%') AS c2 JOIN (SELECT count(*) AS z FROM my_table where col1 like '%yy%') AS c3;,它似乎可以很好地插入记录。我也有点惊讶,但正如他们所说,如果它有效,就不要碰它。