NO.1 code
A DataStream
can be registered directly as a view (possibly enriched with a schema).
Views created from a DataStream
can only be registered as temporary views. Due to their inline/anonymous nature, it is not possible to register them in a permanent catalog.
The following code shows how to use createTemporaryView
for different scenarios.
import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.streaming.api.datastream.DataStream; // create some DataStream DataStream<Tuple2<Long, String>> dataStream = env.fromElements( Tuple2.of(12L, "Alice"), Tuple2.of(0L, "Bob")); // === EXAMPLE 1 === // register the DataStream as view "MyView" in the current session // all columns are derived automatically tableEnv.createTemporaryView("MyView", dataStream); tableEnv.from("MyView").printSchema(); // prints: // ( // `f0` BIGINT NOT NULL, // `f1` STRING // ) // === EXAMPLE 2 === // register the DataStream as view "MyView" in the current session, // provide a schema to adjust the columns similar to `fromDataStream` // in this example, the derived NOT NULL information has been removed tableEnv.createTemporaryView( "MyView", dataStream, Schema.newBuilder() .column("f0", "BIGINT") .column("f1", "STRING") .build()); tableEnv.from("MyView").printSchema(); // prints: // ( // `f0` BIGINT, // `f1` STRING // ) // === EXAMPLE 3 === // use the Table API before creating the view if it is only about renaming columns tableEnv.createTemporaryView( "MyView", tableEnv.fromDataStream(dataStream).as("id", "name")); tableEnv.from("MyView").printSchema(); // prints: // ( // `id` BIGINT NOT NULL, // `name` STRING // )