HBase 學習(一) Python操作Hbase


一,前言

二,包安裝

三,表操作DDL

四,數據操作DML

 

 

 

 

 

 

正文

一,前言

  上節講到我們可以用JavaAPI進行Hbase的操作,但是很明顯,Java的API很底層,用起來會很不方便,如果你們學習過Python,可以用Python來對Hbase進行操作。

  happybase使用:https://happybase.readthedocs.io/en/latest/user.html#establishing-a-connection

二,包安裝

  安裝thrift:https://blog.csdn.net/y472360651/article/details/79050571

  安裝happybase

pip install happybase

三,表操作DDL

  創建連接:

connection = happybase.Connection('somehost')  #鏈接,端口默認是9090   hbase thrift 啟動的默認端口也是9090

  列出所有表:

table_name_list = connection.tables()  # connection.tables():獲取Hbase實例中的表名列表,返回一個list

  獲取表:

table = connection.table(name,user_prefix=True)     # connection.table(name,user_prefix=True):獲取一個表對象,返回一個happybase.Table對象:
  • name:表名
  • user_prefix:是否使用表前綴,默認為True

  禁用表:在做一些刪除操作之前必須先禁用表

connection.disable_table(name) #disable_table(name):禁用表,無返回值
  • name:表名

  啟用表:

connection.enable_table(name) # enable_table(name):啟用表,無返回值
  • name:表名

  創建表:

families = {
    "cf":dict(),
    "df":dict()
}
connection.create_table(name,families)      # 如果連接時,有傳遞表前綴參數時,真實表名將會是:"{}_{}".format(table_prefix,name)
  • name:表名
  • families:列族

  刪除表:

connection.delete_table(name,disable=False) #delete_table(name,disable=False):刪除表,無返回值  默認是false,若要刪除改為true
  • name:表名
  • disable:是否先禁用表

四,數據操作DML

  若要對表進行數據插入等操作,需要先獲取表實例。

  獲取表實例:

table = happybase.Table(name,connection) #happybase.Table(name,connection):獲取表實例
  • name:表名
  • connection:連接

  獲取單元格cells

cells(row, column, versions=None, timestamp=None, include_timestamp=False)  # 獲取單元格數據,返回一個list
  • row:行
  • column:列
  • versions:獲取的最大版本數量,默認None,即獲取所有
  • timestamp:時間戳,默認None,即獲取所有時間戳版本的數據。可指定一個時間戳,獲取小於此時間戳版本的所有數據
  • include_timestamp:是否返回時間戳,默認False

  實例:

content = table.cells('row1','cf:1',5,timestamp=1514861929124,include_timestamp=True)
print content   # [('1', 1514861925674L)]

  刪除指定行數據:

delete(row, columns=None, timestamp=None, wal=True):刪除指定行數據,無返回值
  • row:行
  • columns:列,默認為None,即刪除所有列,可傳入一個list或tuple來指定刪除列
  • timestamp:時間戳,默認為None,即刪除所有,可傳入一個時間戳來刪除小於等於此時間戳的所有數據
  • wal:是否寫入wal,默認為True

  實例:

table.delete(row, columns=None, timestamp=None, wal=True)

  插入數據:

put(row, data, timestamp=None, wal=True):插入數據,無返回值
  • row: 行
  • data: 數據,dict類型,{列:值}構成,列與值皆為str類型
  • timestamp:時間戳,默認None,即寫入當前時間戳
  • wal:是否寫入wal,默認為True

  實例:

# 在row1行,cf:1列插入值1
table.put("row1",{"cf:1":"1"})

  獲取一行數據:

row(row, columns=None, timestamp=None, include_timestamp=False):獲取一行數據,返回一個dict
  • row:行
  • columns: 列,默認為None,即獲取所有列,可傳入一個list或tuple來指定獲取列
  • timestamp:時間戳。默認為None,即返回最大的那個時間戳的數據。可傳入一個時間戳來獲取小於此時間戳的最大時間戳的版本數據
  • include_timestamp:是否返回時間戳數據,默認為False

  實例:

info = table.row(row, columns=None, timestamp=None, include_timestamp=False)

  獲取多行數據:

rows(rows, columns=None, timestamp=None, include_timestamp=False):獲取多行數據,返回一個list
  • rows:行,可傳入一個list或tuple來指定獲取
  • columns: 列,默認為None,即獲取所有列,可傳入一個list或tuple來指定獲取列
  • timestamp:時間戳。默認為None,即返回最大的那個時間戳的數據。可傳入一個時間戳來獲取小於此時間戳的最大時間戳的版本數據
  • include_timestamp:是否返回時間戳數據,默認為False

  實例:

info = table.rows(rows, columns=None, timestamp=None, include_timestamp=False)

  獲取掃描器:

scan(row_start=None, row_stop=None, row_prefix=None, columns=None, filter=None,
timestamp=None, include_timestamp=False, batch_size=1000, scan_batching=None, limit=None, sorted_columns=False, reverse=False):獲取一個掃描器,返回一個generator
  • row_start:起始行,默認None,即第一行,可傳入行號指定從哪一行開始
  • row_stop:結束行,默認None,即最后一行,可傳入行號指定到哪一行結束(不獲取此行數據)
  • row_prefix:行號前綴,默認為None,即不指定前綴掃描,可傳入前綴來掃描符合此前綴的行
  • columns:列,默認為None,即獲取所有列,可傳入一個list或tuple來指定獲取列
  • filter:過濾字符串
  • timestamp:時間戳。默認為None,即返回最大的那個時間戳的數據。可傳入一個時間戳來獲取小於此時間戳的最大時間戳的版本數據
  • include_timestamp:是否返回時間戳數據,默認為False
  • batch_size:用於檢索結果的批量大小
  • scan_batching:服務端掃描批處理
  • limit:數量
  • sorted_columns:是否返回排序的列(根據行名稱排序)
  • reverse:是否執行反向掃描

  實例:

scanner = table.scan(row_start=None, row_stop=None, row_prefix=None,
columns=None, filter=None, timestamp=None, include_timestamp=False, batch_size=1000, scan_batching=None, limit=None, sorted_columns=False, reverse=False)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM