从 Hive 中的多个表中选择 count(*)

Posted

技术标签:

【中文标题】从 Hive 中的多个表中选择 count(*)【英文标题】:Select count(*) from multiple tables in Hive 【发布时间】:2019-12-09 13:26:18 【问题描述】:

我在 2 个不同的模式中有同名的表。我想要做的是在格式的2个表中进行计数比较

表名:Count1:Count2

如何通过 Hive 查询实现这一点?

【问题讨论】:

【参考方案1】:

使用 UNION ALL:

select 'db1.table_name' table_name, count(col1) count1, count(col2) count2 from db1.table_name
UNION ALL
select 'db2.table_name' table_name, count(col1) count1, count(col2) count2 from db2.table_name

【讨论】:

【参考方案2】:

您可以对计数查询进行cross join

select t1.count1,t2.count2
from (select count(*) as count1 from tbl1) t1
cross join (select count(*) as count2 from tbl2) t2

【讨论】:

嗨,我能够得到所需格式的结果,但我必须将 hive.strict.checks.cartesian.product 设置为 false。默认情况下,它设置为 true。这是什么检查,我是否通过将其设置为 true 来冒任何风险?【参考方案3】:

尝试完全外连接

select tt1.cn,tt2.cn from 
    (select count(1) as cn from db1.table) tt1 
full outer join 
    (select count(1) as cn from db2.table ) tt2
on tt1.cn=tt2.cn; 

【讨论】:

以上是关于从 Hive 中的多个表中选择 count(*)的主要内容,如果未能解决你的问题,请参考以下文章

从多个表中选择多个值的计数

当查询返回多个 min(count) 数据时,如何从不同表中选择所有行

HIVE:如何仅从两个表中的两列中选择第三个表中不存在的不同值?

尝试从表中运行 select count(*) 查询时在配置单元中出错

PHP运行查询关闭每个数组变量并返回表中的结果

高速查询hive数据仓库表中的总条数