Flink SQL UNION ALL和 UNION 附完整代码

test_source_union1
在这里插入图片描述

test_source_union2

在这里插入图片描述

UNION ALL

UNION ALL 将两个表合并起来,要求两个表的字段完全一致,包括字段类型、字段顺序,语义对应关系代数的 Union,只是关系代数是 Set 集合操作,会有去重复操作,UNION ALL 不进行去重,如下所示:

对应的 SQL 语句如下:

select * from test_source_union1 UNION ALL SELECT * from test_source_union2

在这里插入图片描述

UNION

UNION 将两个流给合并起来,要求两个流的字段完全一致,包括字段类型、字段顺序,并其 UNION 不同于 UNION ALL,UNION 会对结果数据去重,与关系代数的 Union 语义一致,如下:

对应的 SQL 语句如下:

SELECT * FROM T1 UNION SELECT * FROM T2

在这里插入图片描述

完整代码

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment
import org.apache.flink.table.api.{EnvironmentSettings, Table}
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment
import org.apache.flink.types.Row


object test001 {
  
  def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val bsSettings = EnvironmentSettings.newInstance.useBlinkPlanner.inStreamingMode.build
    val tEnv = StreamTableEnvironment.create(env, bsSettings)
    
    tEnv.executeSql(
      s"""
         |CREATE TABLE test_source_union1 (
         | a string,
         | b string,
         | c string
         |) WITH (
         |   'connector.type' = 'jdbc',
         |   'connector.url' = 'jdbc:mysql://node01:3306/test',
         |   'connector.table' = 'test_source_union1',
         |   'connector.driver' = 'com.mysql.cj.jdbc.Driver',
         |   'connector.username' = 'root',
         |   'connector.password' = 'rootroot'
         |)
         |""".stripMargin)
    tEnv.executeSql(
      s"""
         |CREATE TABLE test_source_union2 (
         | a string,
         | b string,
         | c string
         |) WITH (
         |   'connector.type' = 'jdbc',
         |   'connector.url' = 'jdbc:mysql://node01:3306/test',
         |   'connector.table' = 'test_source_union2',
         |   'connector.driver' = 'com.mysql.cj.jdbc.Driver',
         |   'connector.username' = 'root',
         |   'connector.password' = 'rootroot'
         |)
         |""".stripMargin)

//    val table: Table = tEnv.sqlQuery(
//      "select * from test_source_union1 UNION ALL SELECT * from test_source_union2"
//    )
    
    val table: Table = tEnv.sqlQuery(
      "select * from test_source_union1 UNION SELECT * from test_source_union2"
    )

    val value = tEnv.toRetractStream(table, classOf[Row])

    value.print()

    env.execute("test")

  }
  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值