Oracle、Vertica和Hive三種資料庫查詢表空間的方法
最近在工作中碰到了查詢Oracle、Vertica和Hive表空間的需求,整理如下:
IDE分類:
- Oracle—PLSQL DEVELOPER;
- Vertica—DBVisualizer;
- Hive—SecureCRT;
資料庫分類:
- Oracle:不做過多介紹,自行百度;
- Vertica:純列式資料庫;
- 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在建立資料庫時要在後面加上location
create database dbname location <伺服器路徑>
,並且在建資料庫時不要直接建在根目錄下,建一個xxx.db的資料夾,將資料庫建立在此資料夾下,那麼資料庫中所有的表都會存放在這個資料夾中; - hive資料庫不能
insert into 表
,插入hive的方式有五種,具體請參照:
- 在插入資料之前,我們需要通過vim來在本地上建立一個新的檔案。
- 建立新的檔案之後,可以用put指令將本地檔案同步到伺服器上。在這裡我們一般是同步本地檔案和伺服器檔案,再用伺服器的檔案去建立表,不過我們可以一步到位,直接將本地檔案put到表中,參照:
hadoop fs -put -f <本地檔案> /tmp/dbname.db/tablename
前提是你得建立了這個表,並且欄位都能對應的上。
另外,在如果需要在hive資料庫中插入很多條資料,我們用vim編輯檔案時有幾個快捷鍵。
- :1,$y全部複製,p全部貼上;
- shift+G跳轉到最後一行;
這樣就可以快速的擁有幾萬條資料啦!
總結一下,Oracle和Hive資料庫查詢的是表空間的大小,Vertica查詢的是表實際使用空間的大小。