MAPREDUCE服务 MRS-Flink作业大小表Join能力增强:Flink作业大小表Join去重
Flink作业大小表Join去重
在双流关联的业务模型中,关联算子接收到其中一个流发送的大量重复数据,则会导致下游算子需要处理大量重复数据,影响作业性能。
如A表字段(P1,A1,A2)使用如下方式关联B表字段(P1,B1,B2,B3)生成C的场景中,B表信息发生大量更新,但是B中的所需字段没有更新,在该关联中仅用到了B表的B1和B2字段,对于B表,每个记录更新只更新B3字段,B1和B2不更新,因此当B表更新,可以忽略更新后的数据。
select A.A1,B.B1,B.B2 from A join B on A.P1=B.P1
为解决如上问题可通过使用hint单独为左表(duplicate.left)或右表(duplicate.right)设置去重:
- 格式
- 为左表设置去重
/*+ OPTIONS('duplicate.left'='true')*/
- 为右表设置去重
/*+ OPTIONS('duplicate.right'='true')*/
- 同时为左表和右表设置去重
/*+ OPTIONS('duplicate.left'='true','duplicate.right'='true')*/
- 为左表设置去重
- 在SQL语句中配置
如同时为左表“user_info”和右表“user_score”设置去重。
CREATE TABLE user_info (`user_id` VARCHAR, `user_name` VARCHAR) WITH ( 'connector' = 'kafka', 'topic' = 'user_info_001', 'properties.bootstrap.servers' = '192.168.64.138:21005', 'properties.group.id' = 'testGroup', 'scan.startup.mode' = 'latest-offset', 'value.format' = 'csv' ); CREATE table print( `user_id` VARCHAR, `user_name` VARCHAR, `score` INT ) WITH ('connector' = 'print'); CREATE TABLE user_score (user_id VARCHAR, score INT) WITH ( 'connector' = 'kafka', 'topic' = 'user_score_001', 'properties.bootstrap.servers' = '192.168.64.138:21005', 'properties.group.id' = 'testGroup', 'scan.startup.mode' = 'latest-offset', 'value.format' = 'csv' ); INSERT INTO print SELECT t.user_id, t.user_name, d.score FROM user_info as t JOIN -- 为左表和右表设置去重 user_score /*+ OPTIONS('duplicate.left'='true','duplicate.right'='true')*/ as d ON t.user_id = d.user_id;
- GaussDB查看表大小_GaussDB查询表空间_高斯数据库查看表大小-华为云
- 什么是数据湖探索服务_数据湖探索DLI用途与特点
- GaussDB分析_GaussDB数据库分析_高斯数据库分析_华为云
- MapReduce服务_什么是Loader_如何使用Loader
- MapReduce服务_什么是Hive_如何使用Hive
- GaussDB(for MySQL)并行查询_GaussDB(for MySQL)内核_GaussDB(for MySQL)并行执行_PQ
- 什么是Spark_如何使用Spark_Spark的功能是什么
- GaussDB性能怎么调_华为gaussdb_gaussdb性能_gaussdb学习
- MapReduce服务_什么是Flink_如何使用Flink
- MapReduce服务_什么是HDFS_HDFS特性