我有一个包含10个表的数据库。所有10个表格数据都存储在不同的位置。在10个表中,有些是托管表,有些是外部表。
某些表的位置是/ apps / hive / warehouse /
某些表的位置是/ warehouse / hive / managed /
某些表的位置是/ warehouse / hive / external /
有什么方法可以找出数据库的总大小,而不必进入每个位置并找到大小,还有其他选择吗?
答案 0 :(得分:1)
以下查询在Hive Metastore DB中运行时,将帮助您获取Hive中所有表占用的总大小。 注意:仅当所有表的统计信息都已更新时,您才能从此查询中获得100%正确的结果。 [这可以在表-Metastore DB中的TABLE_PARAMS中进行检查,我下面也会提到(它如何工作?.b)]
步骤:
1。。登录到Hive Metastore DB并使用hive使用的数据库。默认为hive1
。
2。。完成后,您可以执行以下查询以获取Hive中所有表的总大小(以字节为单位)。该查询将基于表的统计信息获取所有Hive表的总大小。
MariaDB [hive1]> SELECT SUM(PARAM_VALUE) FROM TABLE_PARAMS WHERE PARAM_KEY="totalSize";
+------------------+
| SUM(PARAM_VALUE) |
+------------------+
| 30376289388684 |
+------------------+
1 row in set (0.00 sec)```
3。。请记住,上面得出的结果仅适用于一次复制。 30376289388684 x 3是HDFS中包含复制的实际大小。
它如何工作?
a。从Hive Metastore DB的TBLS表中选择ID为5783,名称为test12345的Hive中的随机表。
MariaDB [hive1]> SELECT * FROM TBLS WHERE TBL_ID=5783;
+--------+-------------+-------+------------------+-------+-----------+-------+-----------+---------------+--------------------+--------------------+----------------+
| 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 |
+--------+-------------+-------+------------------+-------+-----------+-------+-----------+---------------+--------------------+--------------------+----------------+
| 5783 | 1555060992 | 1 | 0 | hive | 0 | 17249 | test12345 | MANAGED_TABLE | NULL | NULL | NULL |
+--------+-------------+-------+------------------+-------+-----------+-------+-----------+---------------+--------------------+--------------------+----------------+
1 row in set (0.00 sec)
b。检查ID为5783的同一Hive表的Hive Metastore表-TABLE_PARAMS中表的不同参数。totalSize记录指示此表在其副本之一中在HDFS中占用的总大小。可以比较下一个点(c),即hdfs du -s进行检查。
具有值COLUMN_STATS_ACCURATE
的参数true
表示表的统计信息属性设置为true。您可以检查此值为false
的表,以查看Hive中是否有任何表可能缺少统计信息。
MariaDB [hive1]> SELECT * FROM TABLE_PARAMS
-> WHERE TBL_ID=5783;
+--------+-----------------------+-------------+
| TBL_ID | PARAM_KEY | PARAM_VALUE |
+--------+-----------------------+-------------+
| 5783 | COLUMN_STATS_ACCURATE | true |
| 5783 | numFiles | 1 |
| 5783 | numRows | 1 |
| 5783 | rawDataSize | 2 |
| 5783 | totalSize | 324 |
| 5783 | transient_lastDdlTime | 1555061027 |
+--------+-----------------------+-------------+
6 rows in set (0.00 sec)
c。从HDFS hdfs du -s
输出同一表。 324和972是HDFS中表数据的一个和三个副本的大小。
324 972 /user/hive/warehouse/test12345
希望这会有所帮助!