HBase 维表 Join

Hbase 维表 JOIN 的 SET 语法中本地缓存设置跟 JDBC 和 Redis 一样,但是多了两个新的设置项:

-- 必须设置项 --

SET '<hbase_table_name>.format.schema' = 'ROW<rowkey VARCHAR, {column_family_name ROW<{column_name column_type}[, ...n]>}[, ...n]';

//定义hbase table的schema

CREATE FUNCTION cfParser AS 'com.netease.music.magina.udf.hbase.HbaseCFParser';

//引入平台解析hbase column family的UDF

例子:

SET 'magina_test2.format.schema' = 'ROW<rowkey VARCHAR, f1 ROW<c1 VARCHAR, c2 INT>, f2 ROW<c2 INT, c3 BIGINT>>';

CREATE FUNCTION cfParser AS 'com.netease.music.magina.udf.hbase.HbaseCFParser';

例子中说明一点,f1 和 f2 是真实 hbase 表中存在的 column family 的名字;而 c1,c2,c3,c4 是可以随意定义的,表示 column family 中各个列的名称。

具体JOIN语法如下:

SELECT {<other_view_name>.<column_name> [AS <alias_name>]}[, ...n],

{cfParser(<hbase_table_name>.<column_family_name>, <column_index>) [AS <alias_name>]} [, ...n]

FROM  <other_view_name>

LEFT JOIN  <hbase_catalog_name>.`default`.<hbase_table_name>  

FOR SYSTEM_TIME AS OF <other_view_name>.<proctime_column_name>

ON <other_view_name>.<column_name> = <hbase_table_name>.rowkey;

具体例子如下:

SELECT V3.proctime,
V3.id,
V3.os,
V3.seqno,
cfParser(magina_test2.f1, 0) as c1  from V3
LEFT  JOIN hbase2_test.`default`.magina_test2 
FOR SYSTEM_TIME AS OF V3.proctime
ON V3.os = magina_test2.rowkey;