flink創建視圖的幾種方式

import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
import org.apache.flink.api.java.typeutils.RowTypeInfo;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.DataTypes;
import org.apache.flink.table.api.java.StreamTableEnvironment;
import org.apache.flink.table.descriptors.Json;
import org.apache.flink.table.descriptors.Kafka;
import org.apache.flink.table.descriptors.Schema;

/**
 * @Auther: Created By gaoxing
 * @Date: 2020/4/7 14:07
 * @Description: flink-1.10.0版本中幾種創建table的方法,即創建數據源的方法
 */
public class CreateView {

    public static void main(String[] args) throws Exception {

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

        /**
         * 第一種方法
         * stream to view
         */
        DataStreamSource<String> socketLines = env.socketTextStream("localhost", 8888);
        tableEnv.createTemporaryView("t_socket", socketLines, "row_data");

        /**
         * 第二種方法
         * 使用flink的connect連接器
         * 該方法沒有任何的返回值,直接註冊一張臨時視圖出來
         */
        tableEnv.connect(
                new Kafka()
                        .version("universal")
                        .topic("sql-json-test")
                        .startFromEarliest()
                        .property("zookeeper.connect", "")
                        .property("bootstrap.servers", "")
                        .property("group.id", "flink")
        ).withFormat(
                new Json()
                        .failOnMissingField(true)
                // 如果不指定schema信息,則會自動推斷信息,派生出來schema,這個行爲默認是生效的,不再需要顯式申明
//                        .schema(new RowTypeInfo(
//                                new BasicTypeInfo[]{BasicTypeInfo.STRING_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO},
//                                new String[]{"id", "name"}
//                        ))
        ).withSchema(
                new Schema()
                        .field("id", DataTypes.STRING())
                        .field("name", DataTypes.STRING())
        ).inAppendMode()
                .createTemporaryTable("kafka_test");


        /**
         * 第三種方法
         * 使用create table的sSQL語句進行創建
         */

        tableEnv.sqlUpdate(
                "CREATE TABLE t_kafka(" +
                        " id int," +
                        " name string" +
                        " ) WITH (" +
                        " 'connector.type' = 'kafka'," +
                        " 'connector.version' = 'universal'," +
                        " 'connector.topic' = 'sql-json-test', " +
                        " 'connector.startup-mode' = 'earliest-offset'," +
                        " 'connector.properties.zookeeper.connect' = ''," +
                        " 'connector.properties.bootstrap.servers' = ''," +
                        " 'update-mode' = 'append'," +
                        " 'format.type' = 'json'," +
                        " 'format.derive-schema' = 'true'," +
                        " 'format.fail-on-missing-field' = 'true'"
        );

        env.execute("CreateTable");


    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章