首页 > 解决方案 > 如果条件为真,SQL/HQL 写入表

问题描述

有没有办法做类似的事情

IF (numRows A > numRows B)
THEN write A into C

其中 A、B、C 是具有相同架构的表?

我正在使用 HiveQL。

标签: sqlhivehiveql

解决方案


最好单独计算计数并根据计数有条件地运行插入覆盖脚本。如果您想在单个 SQL 查询中使用相同的逻辑,也可以这样做,但效率不高:

INSERT OVERWRITE TABLE C
SELECT a.col1, a.col2... --list columns here instead of a.*
  FROM (select a.*, 
               count(*) over() as numRowsA, --counr rows in A
               b.numRowsB 
         from A 
              cross join (select count(*) numRowsB from B) b --count rows in B
       ) a
 WHERE a.numRowsA>a.numRowsB;

如果(a.numRowsA>a.numRowsB) <> TRUE然后选择将不返回任何行并且表C将不会被覆盖。


推荐阅读