如何判断一个Impala对象的名字对应一个视图

How to determine the name of an Impala object corresponds to a view

在 Impala 中是否有一种方法可以确定由 SHOW TABLES 编辑的对象名称 return 是否对应于 table 或视图,因为:

理想情况下,我想使用单个操作列出所有 tables + 视图及其类型,而不是检索 tables + 视图然后再调用每个名称判断对象的类型。

(请注意问题是关于 Impala,而不是 Hive)

您可以使用 describe formatted 来了解对象的类型

impala-shell> CREATE TABLE table2(
  id INT,
  name STRING
);

impala-shell> CREATE VIEW view2 AS SELECT * FROM table2;

impala-shell> DESCRIBE FORMATTED table2;

+------------------------------+--------------------------------------------------------------------+----------------------+
| name                         | type                                                               | comment              |
+------------------------------+--------------------------------------------------------------------+----------------------+
| Retention:                   | 0                                                                  | NULL                 |
| Location:                    | hdfs://quickstart.cloudera:8020/user/hive/warehouse/test.db/table2 | NULL                 |
| Table Type:                  | MANAGED_TABLE                                                      | NULL                 |
+------------------------------+--------------------------------------------------------------------+----------------------+

impala-shell> DESCRIBE FORMATTED view2;

+------------------------------+-------------------------------+----------------------+
| name                         | type                          | comment              |
+------------------------------+-------------------------------+----------------------+
| Protect Mode:                | None                          | NULL                 |
| Retention:                   | 0                             | NULL                 |
| Table Type:                  | VIRTUAL_VIEW                  | NULL                 |
| Table Parameters:            | NULL                          | NULL                 |
|                              | transient_lastDdlTime         | 1601632695           |
|                              | NULL                          | NULL                 |
| # Storage Information        | NULL                          | NULL                 |

+------------------------------+-------------------------------+----------------------+

在 table 的情况下,类型是 Table Type: MANAGED_TABLE,视图是 Table Type: VIRTUAL_VIEW

其他方法是查询 metastore database(如果可以)以了解 Impala(或 Hive)

中的元数据
mysql> use metastore;
mysql> select * from TBLS;
+--------+-------------+-------+------------------+-----------+-----------+-------+----------+---------------+------------------------------------------------------------+---------------------------+----------------+
| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER     | RETENTION | SD_ID | TBL_NAME | TBL_TYPE      | VIEW_EXPANDED_TEXT                                         | VIEW_ORIGINAL_TEXT        | LINK_TARGET_ID |
+--------+-------------+-------+------------------+-----------+-----------+-------+----------+---------------+------------------------------------------------------------+---------------------------+----------------+
|   9651 |  1601631971 |  9331 |                0 | anonymous |         0 | 27996 | table1   | MANAGED_TABLE | NULL                                                       | NULL                      |           NULL |
|   9652 |  1601632121 |  9331 |                0 | anonymous |         0 | 27997 | view1    | VIRTUAL_VIEW  | SELECT `table1`.`id`, `table1`.`name` FROM `test`.`table1` | SELECT * FROM table1      |           NULL |
|   9653 |  1601632676 |  9331 |                0 | cloudera  |         0 | 27998 | table2   | MANAGED_TABLE | NULL                                                       | NULL                      |           NULL |
|   9654 |  1601632695 |  9331 |                0 | cloudera  |         0 | 27999 | view2    | VIRTUAL_VIEW  | SELECT * FROM test.table2                                  | SELECT * FROM test.table2 |           NULL |
+--------+-------------+-------+------------------+-----------+-----------+-------+----------+---------------+------------------------------------------------------------+---------------------------+----------------+