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;

这里用户困惑的点在于”hbase_catalog_name”的获取,具体方法如下:

  1. 在SQL编辑页面的最上层,找到”数仓”TAB并点击(点击前一定要先保存已经完成的SQL)
  2. 在出现的页面中,在左侧菜单栏中找到”数据源登记”并点击
  3. 在出现的页面中找到”类型”下拉选择框,选择”hbase”并点击”查询”
  4. 在出现的列表中一个一个点击编辑查看是否是自己需要的hbase集群,如果是,则把对应的名称复制。这个名称就是SQL语法中需要的hbase_catalog_name
  5. 如果没有找到需要的hbase,则在实时群里找值班同学帮助解决