HBase 學習(一) Python操做Hbase

一,前言html

二,包安裝app

三,表操做DDL學習

四,數據操做DMLspa

 

 

 

 

 

 

正文

一,前言

  上節講到咱們能夠用JavaAPI進行Hbase的操做,可是很明顯,Java的API很底層,用起來會很不方便,若是大家學習過Python,能夠用Python來對Hbase進行操做。.net

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

二,包安裝

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

  安裝happybasehtm

pip install happybase

三,表操做DDL

  建立鏈接:對象

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

  列出全部表:blog

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)
相關文章
相關標籤/搜索