title: HBase weight: 9 type: docs aliases:
{{< label “Scan Source: Bounded” >}} {{< label “Lookup Source: Sync Mode” >}} {{< label “Sink: Batch” >}} {{< label “Sink: Streaming Upsert Mode” >}}
HBase 连接器支持读取和写入 HBase 集群。本文档介绍如何使用 HBase 连接器基于 HBase 进行 SQL 查询。
HBase 连接器在 upsert 模式下运行,可以使用 DDL 中定义的主键与外部系统交换更新操作消息。但是主键只能基于 HBase 的 rowkey 字段定义。如果没有声明主键,HBase 连接器默认取 rowkey 作为主键。
{{< sql_connector_download_table “hbase” >}}
HBase 连接器不是二进制发行版的一部分,请查阅[这里]({{< ref “docs/dev/configuration/overview” >}})了解如何在集群运行中引用 HBase 连接器。
所有 HBase 表的列簇必须定义为 ROW 类型,字段名对应列簇名(column family),嵌套的字段名对应列限定符名(column qualifier)。用户只需在表结构中声明查询中使用的的列簇和列限定符。除了 ROW 类型的列,剩下的原子数据类型字段(比如,STRING, BIGINT)将被识别为 HBase 的 rowkey,一张表中只能声明一个 rowkey。rowkey 字段的名字可以是任意的,如果是保留关键字,需要用反引号。
-- 在 Flink SQL 中注册 HBase 表 "mytable" CREATE TABLE hTable ( rowkey INT, family1 ROW<q1 INT>, family2 ROW<q2 STRING, q3 BIGINT>, family3 ROW<q4 DOUBLE, q5 BOOLEAN, q6 STRING>, PRIMARY KEY (rowkey) NOT ENFORCED ) WITH ( 'connector' = 'hbase-1.4', 'table-name' = 'mytable', 'zookeeper.quorum' = 'localhost:2181' ); -- 用 ROW(...) 构造函数构造列簇,并往 HBase 表写数据。 -- 假设 "T" 的表结构是 [rowkey, f1q1, f2q2, f2q3, f3q4, f3q5, f3q6] INSERT INTO hTable SELECT rowkey, ROW(f1q1), ROW(f2q2, f2q3), ROW(f3q4, f3q5, f3q6) FROM T; -- 从 HBase 表扫描数据 SELECT rowkey, family1, family3.q4, family3.q6 FROM hTable; -- temporal join HBase 表,将 HBase 表作为维表 SELECT * FROM myTopic LEFT JOIN hTable FOR SYSTEM_TIME AS OF myTopic.proctime ON myTopic.key = hTable.rowkey;
这些弃用配置已经被上述的新配置代替,而且最终会被弃用。请优先考虑使用新配置。
HBase 以字节数组存储所有数据。在读和写过程中要序列化和反序列化数据。
Flink 的 HBase 连接器利用 HBase(Hadoop) 的工具类 org.apache.hadoop.hbase.util.Bytes
进行字节数组和 Flink 数据类型转换。
Flink 的 HBase 连接器将所有数据类型(除字符串外)null
值编码成空字节。对于字符串类型,null
值的字面值由null-string-literal
选项值决定。
数据类型映射表如下:
{{< top >}}