我是靠谱客的博主 羞涩春天,最近开发中收集的这篇文章主要介绍Oracle、Vertica和Hive三种数据库查询表空间的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在工作中碰到了查询Oracle、Vertica和Hive表空间的需求,整理如下:

IDE分类:

  • Oracle—PLSQL DEVELOPER;
  • Vertica—DBVisualizer;
  • Hive—SecureCRT;

数据库分类:

  1. Oracle:不做过多介绍,自行百度;
  2. Vertica:纯列式数据库;
  3. Hive:基于hadoop的数据仓库,其中任何的表都以文件的形式存储在HDFS,表空间实际上就是文件的大小;

一、Oracle查询表空间大小:

SELECT 
a.tablespace_name, a.bytes/1024 total_kb, b.bytes/1024 used_kb, c.bytes/1024 free_kb, (b.bytes*100)/a.bytes "%used", 
(c.bytes*100)/a.bytes "%free" 
FROM 
sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c 
WHERE 
a.tablespace_name = b.tablespace_name
and a.tablespace_name = c.tablespace_name
and a.tablespace_name IN (--tablespace_name)

--tablecpace_name这里需要注意的是,以上查询的是当前表空间,而不是实际使用的空间,并且当表实际使用量不断增加时,表空间会成比例的增加。如果要查询别的用户的表空间大小只需要在PLSQL Developer中切换到其他用户即可。
其他文章中也会有从dba_data_files 和dba_free_space 表中查询的情况,经过测试,结果是相同的,实际上是一个道理。本文中以”sm$开头”的其实是系统表整合的视图。

二、Vertica查询实际使用空间大小:

SELECT 
anchor_table_schema, SUM(used_bytes) AS used_compressed_byte
FROM 
v_monitor.projection_storage
WHERE 
anchor_table_schema IN (--schema) 
GROUP BY 
anchor_table_schema;

--schema是实际的表空间名字。以上代码查询的是Vertica当前用户的 实际使用空间 的大小,并不是表空间的大小!IDE用法和PLSQL Developer类似。

三、Hive查询表空间大小:

$ hadoop fs -du  /tmp/dbname.db|awk ' { SUM += $1 } END { print SUM/1024 }'

以上是查询dbname.db这个database的数据库使用空间总和,也就是其中的文件大小总和,也就是表空间总和,单位为kb。其中awk ' { SUM += $1 } END { print SUM/1024 }'是对数据库文件大小进行求和,如果我们不加的话就会返回每一个文件的大小;如果我们想具体查看某一张表的空间可以使用:

hadoop fs -ls /tmp/dbname.db/tablename

返回的结果是byte单位。如果想让他显示的更人性,可以使用:

hadoop fs -ls -h /tmp/dbname.db/tablename

返回的结果是kb单位。
这里简单介绍一下SecureCRT,有点类似于我们远程访问服务器。可以通过具体的hadoop指令来操作hive数据库。
hadoop指令可以参照:
hadoop常用shell指令
Hive教程可以参照:
hive教程

这里我们比较常用的hadoop指令有:

  • hadoop fs -ls <服务器文件路径>查看文件目录;
  • hadoop fs -put -f <本地文件路径> <服务器文件路径> 上传本地文件至服务器,-f为强制上传,如果服务器有此文件则修改。
  • hadoop fs -du <服务器文件路径> 查看文件大小等具体信息;
  • hive 进入数据库;
  • vim 编辑文件(linux指令);

hive数据库的命令和mysql数据库基本一致,但是要注意以下几点:

  • hive在创建数据库时要在后面加上locationcreate database dbname location <服务器路径>,并且在建数据库时不要直接建在根目录下,建一个xxx.db的文件夹,将数据库建立在此文件夹下,那么数据库中所有的表都会存放在这个文件夹中;
  • hive数据库不能insert into 表,插入hive的方式有五种,具体请参照:
    • Hive 五种数据导入方式介绍
  • 在插入数据之前,我们需要通过vim来在本地上创建一个新的文件。
  • 创建新的文件之后,可以用put指令将本地文件同步到服务器上。在这里我们一般是同步本地文件和服务器文件,再用服务器的文件去创建表,不过我们可以一步到位,直接将本地文件put到表中,参照:
    hadoop fs -put -f <本地文件> /tmp/dbname.db/tablename
    前提是你得创建了这个表,并且字段都能对应的上。

另外,在如果需要在hive数据库中插入很多条数据,我们用vim编辑文件时有几个快捷键。

  • :1,$y全部复制,p全部粘贴;
  • shift+G跳转到最后一行;

这样就可以快速的拥有几万条数据啦!

总结一下,Oracle和Hive数据库查询的是表空间的大小,Vertica查询的是表实际使用空间的大小。

最后

以上就是羞涩春天为你收集整理的Oracle、Vertica和Hive三种数据库查询表空间的方法的全部内容,希望文章能够帮你解决Oracle、Vertica和Hive三种数据库查询表空间的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部