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")
}
}

1082

被折叠的 条评论
为什么被折叠?



