更新时间:2024-10-28 GMT+08:00

Hive支持的传统关系型数据库语法说明

Hive支持如下传统关系型数据库语法:

  • Grouping
  • EXCEPT、INTERSECT

Grouping

语法简介:

  • 当group by语句带with rollup/cube选项时,Grouping才有意义。
  • CUBE生成的结果集显示了所选列中值的所有组合的聚合。
  • ROLLUP生成的结果集显示了所选列中值的某一层次结构的聚合。
  • Grouping:当用CUBE或ROLLUP运算符添加行时,附加的列输出值为1;当所添加的行不是由CUBE或ROLLUP产生时,附加列值为0。

例如,Hive中有一张表“table_test”,表结构如下所示:

+----------------+-------------------+--+
| table_test.id  | table_test.value  |
+----------------+-------------------+--+
| 1              | 10                |
| 1              | 15                |
| 2              | 20                |
| 2              | 5                 |
| 2              | 13                |
+----------------+-------------------+--+

执行如下语句:

select id,grouping(id),sum(value) from table_test group by id with rollup;

得到如下结果:

+-------+-----------------+------+--+
|  id   | groupingresult  | sum  |
+-------+-----------------+------+--+
| 1     | 0               | 25   |
| NULL  | 1               | 63   |
| 2     | 0               | 38   |
+-------+-----------------+------+--+

EXCEPT、INTERSECT

  • EXCEPT返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值)。
  • INTERSECT返回两个结果集的交集(即两个查询都返回的所有非重复值)。

例如,Hive中有两张表“test_table1”“test_table2”

“test_table1”表结构如下所示:

+-----------------+--+
| test_table1.id  |
+-----------------+--+
| 1               |
| 2               |
| 3               |
| 4               |
+-----------------+--+

“test_table2”表结构如下所示:

+-----------------+--+
| test_table2.id  |
+-----------------+--+
| 2               |
| 3               |
| 4               |
| 5               |
+-----------------+--+
  • 执行如下的EXCEPT语句:

    select id from test_table1 except select id from test_table2;

    显示如下结果:

    +--------------+--+
    | _alias_0.id  |
    +--------------+--+
    | 1            |
    +--------------+--+
  • 执行INTERSECT语句:

    select id from test_table1 intersect select id from test_table2;

    显示如下结果:

    +--------------+--+
    | _alias_0.id  |
    +--------------+--+
    | 2            |
    | 3            |
    | 4            |
    +--------------+--+