Flink Java Table API & SQL 之环境创建,表创建, 表查询,表输出

0. 导入依赖

由于使用的是 java 开发,只导入 java 相关 jar

        <dependency>
            <groupId>org.apache.flinkgroupId>
            <artifactId>flink-table-planner-blink_${scala.version}artifactId>
            <version>${flink.version}version>
        dependency>

        <dependency>
            <groupId>org.apache.flinkgroupId>
            <artifactId>flink-table-api-java-bridge_${scala.version}artifactId>
            <version>${flink.version}version>
        dependency>

1. 创建 TableEnvironment

方式 1

import org.apache.flink.table.api.EnvironmentSettings;
import org.apache.flink.table.api.TableEnvironment;

EnvironmentSettings settings = EnvironmentSettings
    .newInstance()
    .inStreamingMode()
    //.inBatchMode()
    .build();

TableEnvironment tEnv = TableEnvironment.create(settings);

方式 2

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.EnvironmentSettings;
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);

2. 创建表

// 创建环境
TableEnvironment tableEnv = ...; // see "Create a TableEnvironment" section

// 查询结果生成表 
Table projTable = tableEnv.from("X").select(...);

// 注册表
tableEnv.createTemporaryView("projectedTable", projTable);

// 从流中创建
tableEnv.fromDataStream(DataStream<T> dataStream, Expression... fields);
tableEnv.fromDataStream(DataStream, Schema);

3. 表操作

Table API

// get a TableEnvironment
TableEnvironment tableEnv = ...; // see "Create a TableEnvironment" section

// register Orders table

// scan registered Orders table
Table orders = tableEnv.from("Orders");
// compute revenue for all customers from France
Table revenue = orders
  .filter($("cCountry").isEqual("FRANCE"))
  .groupBy($("cID"), $("cName"))
  .select($("cID"), $("cName"), $("revenue").sum().as("revSum"));

// emit or convert Table
// execute query

SQL

// get a TableEnvironment
TableEnvironment tableEnv = ...; // see "Create a TableEnvironment" section

// register Orders table

// compute revenue for all customers from France
Table revenue = tableEnv.sqlQuery(
    "SELECT cID, cName, SUM(revenue) AS revSum " +
    "FROM Orders " +
    "WHERE cCountry = 'FRANCE' " +
    "GROUP BY cID, cName"
  );

// emit or convert Table
// execute query

4. 表输出

// get a TableEnvironment
TableEnvironment tableEnv = ...; // see "Create a TableEnvironment" section

// create an output Table
final Schema schema = Schema.newBuilder()
    .column("a", DataTypes.INT())
    .column("b", DataTypes.STRING())
    .column("c", DataTypes.BIGINT())
    .build();

tableEnv.createTemporaryTable("CsvSinkTable", TableDescriptor.forConnector("filesystem")
    .schema(schema)
    .option("path", "/path/to/file")
    .format(FormatDescriptor.forFormat("csv")
        .option("field-delimiter", "|")
        .build())
    .build());

// compute a result Table using Table API operators and/or SQL queries
Table result = ...;

// Prepare the insert into pipeline
TablePipeline pipeline = result.insertInto("CsvSinkTable");

// Print explain details
pipeline.printExplain();

// emit the result Table to the registered TableSink
pipeline.execute();
// get a TableEnvironment
TableEnvironment tableEnv = ...; // see "Create a TableEnvironment" section

// create an output Table
final Schema schema = new Schema()
 .field("a", DataTypes.INT())
 .field("b", DataTypes.STRING())
 .field("c", DataTypes.BIGINT());
 
tableEnv.connect(new FileSystem().path("/path/to/file"))
 .withFormat(new Csv().fieldDelimiter('|').deriveSchema())
 .withSchema(schema)
 .createTemporaryTable("CsvSinkTable");
 
// compute a result Table using Table API operators and/or SQL queries
Table result = ...

// emit the result Table to the registered TableSink
result.executeInsert("CsvSinkTable");
package com.daidai.table;

import com.daidai.sink.domain.User;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.Table;
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;


import java.util.Arrays;

import static org.apache.flink.table.api.Expressions.$;

public class DataStreamtoTable {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        StreamTableEnvironment tableEnvironment = StreamTableEnvironment.create(env);

        DataStreamSource<User> source = env.fromCollection(Arrays.asList(
                new User(1, "user1", "password1"),
                new User(2, "user2", "password2"),
                new User(3, "user3", "password3")
        ));

        Table user = tableEnvironment.fromDataStream(source, $("id"), $("username"), $("password"));

        Table table = user.select($("id"), $("username"), $("password"));

        DataStream<User> appendStream = tableEnvironment.toAppendStream(table, TypeInformation.of(User.class));

        appendStream.print();

        env.execute();
    }
}

你可能感兴趣的:(Flink,java,flink,sql)