概述
GP可以通過pxf協議上的hbase外表功能, 在數據庫中創建外部表,映射hbase table,以直接在gp中訪問 hbase數據,方便將hbase的查詢結果集保留在gp中
hbase端準備
HBase基礎概念:
?HBase 列包含兩個組件:列簇和列限定詞。 這些組件由冒號 : 分隔, :
?HBase 行由一個行鍵和一個或多個列值組成。 行鍵是表行的唯一標識符
?HBase 表是由具有一個或多個列的數據行組成的多維映射。 創建HBase表時,可以指定一組完整的列簇
?HBase 單元由行(列簇, 列限定詞, 列值)和時間戳組成。 給定單元格中的列值和時間戳表示該值的版本
示例: 創建一個HBase表
1.在 default 命名空間中創建一個名為 order_info 的HBase表。 order_info 具有兩個列簇: product 和 shipping_info:
hbase(main):> create 'order_info', 'product', 'shipping_info'
2.order_info product 列簇具有名為 name 和 location 的列標識符。shipping_info 列簇具有名為 state 和 zipcode 的列標識符。 將一些數據添加到 order_info 表中:
put 'order_info', '1', 'product:name', 'tennis racquet'
put 'order_info', '1', 'product:location', 'out of stock'
put 'order_info', '1', 'shipping_info:state', 'CA'
put 'order_info', '1', 'shipping_info:zipcode', '12345'
put 'order_info', '2', 'product:name', 'soccer ball'
put 'order_info', '2', 'product:location', 'on floor'
put 'order_info', '2', 'shipping_info:state', 'CO'
put 'order_info', '2', 'shipping_info:zipcode', '56789'
put 'order_info', '3', 'product:name', 'snorkel set'
put 'order_info', '3', 'product:location', 'warehouse'
put 'order_info', '3', 'shipping_info:state', 'OH'
put 'order_info', '3', 'shipping_info:zipcode', '34567'
在本主題后面的示例中,您將通過PXF直接訪問 orders_info HBase 表。
3.顯示 order_info 表的內容:
hbase(main):006:0> scan 'order_info'
ROW COLUMN+CELL1 column=product:location, timestamp=1711619646590, value=out of stock1 column=product:name, timestamp=1711619646553, value=tennis racquet1 column=shipping_info:state, timestamp=1711619646608, value=CA1 column=shipping_info:zipcode, timestamp=1711619646624, value=123452 column=product:location, timestamp=1711619646653, value=on floor2 column=product:name, timestamp=1711619646639, value=soccer ball2 column=shipping_info:state, timestamp=1711619646667, value=CO2 column=shipping_info:zipcode, timestamp=1711619646680, value=567893 column=product:location, timestamp=1711619646710, value=warehouse3 column=product:name, timestamp=1711619646696, value=snorkel set3 column=shipping_info:state, timestamp=1711619646730, value=OH3 column=shipping_info:zipcode, timestamp=1711619625228, value=34567
3 row(s) in 0.0980 seconds
創建外表
- 創建語法:
CREATE EXTERNAL TABLE <table_name>( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION ('pxf://<hbase-table-name>?PROFILE=HBase')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
<hbase?table?name> HBase表的名稱
PROFILE PROFILE 關鍵字必須指定為 HBase
SERVER=<server_name> PXF用于訪問數據的命名服務器配置。可選的; 如果未指定,PXF將使用default服務器。
FORMAT FORMAT 子句必須指定為 ‘CUSTOM’ (FORMATTER=‘pxfwritable_import’)
-
數據類型映射:
HBase是基于字節的; 它將所有數據類型存儲為字節數組。 要在Greenplum數據庫中表示HBase數據,請為Greenplum數據庫列選擇與HBase列標識符值的底層內容匹配的數據類型。
注意: PXF不支持復雜HBase對象 -
查詢測試
創建外表
CREATE EXTERNAL TABLE orderinfo_hbase ("recordkey" text,"product:name" varchar, "shipping_info:zipcode" int,"product:location" text,"shipping_info:state" int) LOCATION ('pxf://order_info?PROFILE=HBase') FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
查詢
postgres=# select * from orderinfo_hbase_gwtest;recordkey | product:name | shipping_info:zipcode
-----------+----------------+-----------------------1 | tennis racquet | 123452 | soccer ball | 567893 | snorkel set | 34567
(3 rows)
取全部字段:注意字段與hbase映射字段之間的字段類型關系:
postgres=# CREATE EXTERNAL TABLE gwtest02 ("recordkey" text,"product:name" varchar, "shipping_info:zipcode" text,"product:location" text,"shipping_info:state" text) LOCATION ('pxf://o
CREATE EXTERNAL TABLEpostgres=# select * from gwtest02;recordkey | product:name | shipping_info:zipcode | product:location | shipping_info:state
-----------+----------------+-----------------------+------------------+---------------------1 | tennis racquet | 12345 | out of stock | CA2 | soccer ball | 56789 | on floor | CO3 | snorkel set | 34567 | warehouse | OH