gpt4 book ai didi

database - 如何找出 Hive 数据库的总大小

转载 作者:可可西里 更新时间:2023-11-01 15:19:55 26 4
gpt4 key购买 nike

我有一个包含 10 个表的数据库。所有 10 个表数据都存储在不同的不同位置。在 10 个表中,一些是托管表,一些是外部表。

一些表位置是/apps/hive/warehouse/

一些表位置是/warehouse/hive/managed/

一些表位置是/warehouse/hive/external/

有什么方法可以找出数据库的总大小而无需进入每个位置并找到大小,还有其他选择吗?

最佳答案

在 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 中的实际大小,包括复制。

它是如何工作的?

一个。从 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)

检查 Hive Metastore 表中表的不同参数 - TABLE_PARAMS 用于具有 id - 5783 的同一 Hive 表。totalSize 记录指示此表在 HDFS 中为其副本之一占用的总大小。可以比较下一个点 (c),即 hdfs du -s 来检查这一点。

具有值 true 的参数 COLUMN_STATS_ACCURATE 表示表的统计属性设置为 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)

hdfs du -s 来自 HDFS 的同一表的输出。 324和972分别是HDFS中表数据的一个副本和三个副本的大小。

324  972  /user/hive/warehouse/test12345

希望这对您有所帮助!

关于database - 如何找出 Hive 数据库的总大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55963580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com