我有一个有10张桌子的数据库。所有10个表数据都存储在不同的位置。在10个表中,有些是托管表,有些是外部表。
一些表的位置是/app/hive/仓库/
一些表的位置是/仓库/单元/托管/
一些表的位置是/仓库/单元/外部/
是否有任何方法可以找出数据库的总大小,不让out进入每个位置,并找到大小,任何选择?
发布于 2019-05-03 13:38:50
当在中运行时,下面的查询将帮助您获得Hive中所有表占用的总大小。备注:只有当所有表都更新其统计数据时,此查询的结果才是100%正确的。这可以在下面提到的表-- Metastore DB中的TABLE_PARAMS中进行检查(它是如何工作的?.b)
步骤:
1.将登录到hive中,并使用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 x3是HDFS中的实际大小,包括复制。
它是如何工作的?
a.从中的TBLS表中选择一个id 5783和name - test12345的随机表。
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.检查Hive Metastore表- TABLE_PARAMS中与id - 5783相同的表格中表的不同参数。totalSize记录表示该表在HDFS中为其副本之一占用的总大小。下一点(c),即hdfs -s,可以进行比较以检查这一点。
值为true的param true表示表的statistics属性设置为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希望这能有所帮助!
https://stackoverflow.com/questions/55963580
复制相似问题