1. 程式人生 > >Oracle、Vertica和Hive三種資料庫查詢表空間的方法

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的方式有五種,具體請參照:
  • 在插入資料之前,我們需要通過vim來在本地上建立一個新的檔案。
  • 建立新的檔案之後,可以用put指令將本地檔案同步到伺服器上。在這裡我們一般是同步本地檔案和伺服器檔案,再用伺服器的檔案去建立表,不過我們可以一步到位,直接將本地檔案put到表中,參照:
    hadoop fs -put -f <本地檔案> /tmp/dbname.db/tablename
    前提是你得建立了這個表,並且欄位都能對應的上。

另外,在如果需要在hive資料庫中插入很多條資料,我們用vim編輯檔案時有幾個快捷鍵。

  • :1,$y全部複製,p全部貼上;
  • shift+G跳轉到最後一行;

這樣就可以快速的擁有幾萬條資料啦!

總結一下,Oracle和Hive資料庫查詢的是表空間的大小,Vertica查詢的是表實際使用空間的大小。