内容纲要
概要描述
本文主要说明:流流 join 的使用注意事项;
PS:有流式计算场景需求时,强烈建议适用 Slipstream 9.3.3 以上版本。
详细说明
- infinite window 不支持与另外一个流 join
- 流流 join 必要参数
- 多流 join 不支持
- 流表 glkjoin
infinite window 不支持和 另外一个流join
事件驱动模式下流与流的 Join 要求 join 的两个流必须是 window stream,且 window 的slide (滑动间隔) 必须一致;
且 infinite window 不支持和 另外一个流join
事件驱动模式下:
-- 设置自动把数据刷进表
SET morphling.result.auto.flush=true;
-- 建流s1
CREATE STREAM s1(id INT, letter STRING,ts TIMESTAMP)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
TBLPROPERTIES("topic"="demoo","kafka.zookeeper"="172.22.39.7:2181,","kafka.broker.list"="172.22.39.7:9092");
-- 建流s2
CREATE STREAM s2(id INT, letter STRING,ts TIMESTAMP)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
TBLPROPERTIES("topic"="demoo","kafka.zookeeper"="172.22.39.7:2181,","kafka.broker.list"="172.22.39.7:9092");
-- 建s1的衍生流s1_join
CREATE STREAM s1_join as SELECT * FROM s1 STREAMWINDOW w1 AS
(SEPARATED BY ts LENGTH '2' SECOND SLIDE '1' SECOND);
-- 建s2的衍生流s2_join
CREATE STREAM s2_join as SELECT * FROM s2 STREAMWINDOW w2 AS
(SEPARATED BY ts LENGTH '2' SECOND SLIDE '1' SECOND);
-- 建结果表t1
CREATE TABLE t1 (n1 STRING,n2 string);
INSERT INTO t1 SELECT s1_join.letter, s2_join.letter FROM s1_join JOIN s2_join ON s1_join.id ==
s2_join.id;
SELECT * FROM t1;
结果说明两个衍生流join成功:
说明:微批模式测试语句相同
流流 join 必要参数
-
流流 join 必要参数
- ‘morphling.memory.optimize’=’true’
- ‘morphling.rocksdb.ttl.seconds’=’86400’
-
任务高可用
- ‘morphling.job.enable.checkpoint’=’true’
不支持3个及以上多流 join
多流 join 场景不支持 left join;
流表 glkjoin
-
流流不能走 glkjoin。
-
流表可以走 glkjoin,其中表必须是 hyperbase、search、holodesk 表;
-
且 glkjoin 的 join 条件必须是 rowkey 字段(struct 类型也可以,使用 struct_key.col1)或者索引字段;
glkjoin 性能参数
‘stargate.global.lookup.join.batchsize’=’10’