Greenplum使用hbase外部表

概述

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+CELL
 1                                             column=product:location, timestamp=1711619646590, value=out of stock
 1                                             column=product:name, timestamp=1711619646553, value=tennis racquet
 1                                             column=shipping_info:state, timestamp=1711619646608, value=CA
 1                                             column=shipping_info:zipcode, timestamp=1711619646624, value=12345
 2                                             column=product:location, timestamp=1711619646653, value=on floor
 2                                             column=product:name, timestamp=1711619646639, value=soccer ball
 2                                             column=shipping_info:state, timestamp=1711619646667, value=CO
 2                                             column=shipping_info:zipcode, timestamp=1711619646680, value=56789
 3                                             column=product:location, timestamp=1711619646710, value=warehouse
 3                                             column=product:name, timestamp=1711619646696, value=snorkel set
 3                                             column=shipping_info:state, timestamp=1711619646730, value=OH
 3                                             column=shipping_info:zipcode, timestamp=1711619625228, value=34567
3 row(s) in 0.0980 seconds

创建外表

  1. 创建语法:
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’)

  1. 数据类型映射:
    HBase是基于字节的; 它将所有数据类型存储为字节数组。 要在Greenplum数据库中表示HBase数据,请为Greenplum数据库列选择与HBase列标识符值的底层内容匹配的数据类型。
    注意: PXF不支持复杂HBase对象

  2. 查询测试

创建外表

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 |                 12345
 2         | soccer ball    |                 56789
 3         | 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 TABLE

postgres=# select * from gwtest02;
 recordkey |  product:name  | shipping_info:zipcode | product:location | shipping_info:state
-----------+----------------+-----------------------+------------------+---------------------
 1         | tennis racquet | 12345                 | out of stock     | CA
 2         | soccer ball    | 56789                 | on floor         | CO
 3         | snorkel set    | 34567                 | warehouse        | OH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值