您的位置:首页 > 汽车 > 新车 > Greenplum使用hbase外部表

Greenplum使用hbase外部表

2024/11/18 13:45:11 来源:https://blog.csdn.net/qq_43303221/article/details/139053686  浏览:    关键词: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+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

创建外表

  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 |                 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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com