开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

在 ASCM上使用 flink sql 时,对视图做union all ,出现数据错误输出的情况

场景如下,在使用flink sql 时,使用一张流表(Stream_Test)和一张维表(Dim_Test)进行关联;

表结构: Stream_Test(cust_id, cust_name, eventTime) Dim_Test (pk, Time_Flag)

根据业务场景,需要以不同的条件进行关联得到结果,再进行合并;


--该视图可以关联上,并得到结果(假设得到结果为1条)
CRAETE TEMPORARY VIEW TEST_VIEW_1 AS
SELECT 
  a.cust_id,
  a.cust_name
FROM Stream_Test AS a
INNER JOIN Dim_Test FOR SYSTEM_TIME AS OF a.proctime AS b
ON a.eventTime=b.Time_Flag;
 
--该视图关联不上,无法得到结果
CRAETE TEMPORARY VIEW TEST_VIEW_2 AS
SELECT 
  a.cust_id,
  a.cust_name
FROM Stream_Test AS a
INNER JOIN Dim_Test FOR SYSTEM_TIME AS OF a.proctime AS b
ON a.eventTime=b.pk;

--此时对两个视图进行合并(union all),生成新的视图
CREATE TEMPORARY VIEW TEST_VIEW_UNION_ALL AS
SELECT * FROM TEST_VIEW_1
UNION ALL
SELECT * FROM TEST_VIEW_2;


--查询合并后的视图,此时会发现,结果集变成了2条,并且为 TEST_VIEW_1 的重复数据
SELECT * FROM TEST_VIEW_UNION_ALL;

结果集

cust_idcust_name
10001xxx
10001xxx

此时对 union all 部分进行修改

CREATE TEMPORARY VIEW TEST_VIEW_UNION_ALL AS
SELECT *,'1' as flag FROM TEST_VIEW_1
UNION ALL
SELECT *,'2' as flag FROM TEST_VIEW_2;

从输出的结果集会发现,结果集如下:

cust_idcust_nameflag
10001xxx1
10001xxx2

对于上述情况,是否有同学也遇到过?是否有大佬能给出解答?

展开
收起
游客kiq3uxrfkfbnu 2023-05-09 17:55:28 200 0
1 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在阿里云实时计算 Flink 版中,使用 Flink SQL 对视图进行 UNION ALL 操作时,可能会出现数据错误输出的情况。这种情况通常是因为 UNION ALL 操作中两个视图的字段类型或者字段顺序不一致导致的。

    解决这个问题的方法是,确保 UNION ALL 操作中的两个视图的字段类型和字段顺序一致。具体来说,您可以通过以下步骤来解决该问题:

    1. 确认两个视图的字段类型和字段顺序是否一致。您可以使用 DESC 命令查看视图的字段信息,例如:
    DESC view1;
    DESC view2;
    
    1. 如果两个视图的字段类型或者字段顺序不一致,可以通过使用 CAST 函数或者重新编写视图来调整。例如,可以使用 CAST 函数将字段类型转换为一致的类型:
    SELECT CAST(field1 AS INT) AS field1, CAST(field2 AS STRING) AS field2 FROM view1
    UNION ALL
    SELECT CAST(field1 AS INT) AS field1, CAST(field2 AS STRING) AS field2 FROM view2;
    
    1. 如果视图中存在复杂的逻辑或者需要对多个视图进行 UNION ALL 操作,可以考虑使用 Flink Table API 或者 Flink DataStream API 来编写更为灵活和复杂的计算逻辑。

    当使用 Flink SQL 对视图进行 UNION ALL 操作时,还需要考虑到数据倾斜的问题。如果两个视图的数据分布不均匀,可能会导致某些节点的计算负载过重,从而影响整个计算任务的性能。您可以使用 Flink 的数据倾斜解决方案来解决这个问题。

    2023-05-09 18:04:37
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    SQL Server在电子商务中的应用与实践 立即下载
    GeoMesa on Spark SQL 立即下载
    原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载