Hi??
????????????????????????kafkaTableSink??????AppendStreamTableSink????????????????????final_result2????????source1??group
 by??????final_result??mysql????join????????????group by??????StreamTable 
????????RetractStreamTableSink??????????????????
??????????AppendStreamTableSink??RetractStreamTableSink????????


???????????? ??     ?? ????????????????????????

??????????????



[email protected]
 
???????? ??????????????
?????????? 2020-07-21 10:23
???????? user-zh
?????? ?????? pyflink1.11.0window
??????
    
 ??????????????????????????????????????????????????????????????????????pyflink????????????demo??????????????
 
 
????
 
 
------------------ ???????? ------------------
??????:                                                                         
                                               "user-zh"                        
                                                            
<[email protected]&gt;;
????????:&nbsp;2020??7??20??(??????) ????8:42
??????:&nbsp;"user-zh"<[email protected]&gt;;
 
????:&nbsp;Re: pyflink1.11.0window
 
 
 
?????????????? ??????????insert mode??????????
BTW, ????????????????????"&amp;nbsp;"?? ????????????????
 
Best??
Shuiqiang
 
?????????????? <[email protected]&gt; ??2020??7??20?????? ????4:23??????
 
&gt; HI ??
&gt; &amp;nbsp; &amp;nbsp; 
??????????????????????????????????????????????????????kafka????????????
&gt; Traceback (most recent call last):
&gt; &amp;nbsp; File
&gt; "/usr/local/lib/python3.7/site-packages/pyflink/util/exceptions.py", line
&gt; 147, in deco
&gt; &amp;nbsp; &amp;nbsp; return f(*a, **kw)
&gt; &amp;nbsp; File "/usr/local/lib/python3.7/site-packages/py4j/protocol.py",
&gt; line 328, in get_return_value
&gt; &amp;nbsp; &amp;nbsp; format(target_id, ".", name), value)
&gt; py4j.protocol.Py4JJavaError: An error occurred while calling o5.sqlUpdate.
&gt; : org.apache.flink.table.api.TableException: AppendStreamTableSink
&gt; requires that Table has only insert changes.
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.scala:123)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.scala:48)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.table.planner.plan.nodes.exec.ExecNode$class.translateToPlan(ExecNode.scala:58)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.table.planner.plan.nodes.physical.stream.StreamExecSink.translateToPlan(StreamExecSink.scala:48)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.table.planner.delegation.StreamPlanner$$anonfun$translateToPlan$1.apply(StreamPlanner.scala:60)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.table.planner.delegation.StreamPlanner$$anonfun$translateToPlan$1.apply(StreamPlanner.scala:59)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; scala.collection.Iterator$class.foreach(Iterator.scala:891)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; scala.collection.AbstractIterable.foreach(Iterable.scala:54)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; scala.collection.AbstractTraversable.map(Traversable.scala:104)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.table.planner.delegation.StreamPlanner.translateToPlan(StreamPlanner.scala:59)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.table.planner.delegation.PlannerBase.translate(PlannerBase.scala:153)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.table.api.internal.TableEnvironmentImpl.translate(TableEnvironmentImpl.java:685)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.table.api.internal.TableEnvironmentImpl.sqlUpdate(TableEnvironmentImpl.java:495)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; java.lang.reflect.Method.invoke(Method.java:498)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.api.python.shaded.py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.api.python.shaded.py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; org.apache.flink.api.python.shaded.py4j.Gateway.invoke(Gateway.java:282)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.api.python.shaded.py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.api.python.shaded.py4j.commands.CallCommand.execute(CallCommand.java:79)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at
&gt; 
org.apache.flink.api.python.shaded.py4j.GatewayConnection.run(GatewayConnection.java:238)
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at 
java.lang.Thread.run(Thread.java:748)
&gt;
&gt;
&gt;
&gt;
&gt; During handling of the above exception, another exception occurred:
&gt;
&gt;
&gt; Traceback (most recent call last):
&gt; &amp;nbsp; File "tou.py", line 99, in <module&amp;gt;
&gt; &amp;nbsp; &amp;nbsp; from_kafka_to_kafka_demo()
&gt; &amp;nbsp; File "tou.py", line 33, in from_kafka_to_kafka_demo
&gt; &amp;nbsp; &amp;nbsp; st_env.sql_update("insert into flink_result select
&gt; id,type,rowtime from final_result2")
&gt; &amp;nbsp; File
&gt; 
"/usr/local/lib/python3.7/site-packages/pyflink/table/table_environment.py",
&gt; line 547, in sql_update
&gt; &amp;nbsp; &amp;nbsp; self._j_tenv.sqlUpdate(stmt)
&gt; &amp;nbsp; File 
"/usr/local/lib/python3.7/site-packages/py4j/java_gateway.py",
&gt; line 1286, in __call__
&gt; &amp;nbsp; &amp;nbsp; answer, self.gateway_client, self.target_id, 
self.name)
&gt; &amp;nbsp; File
&gt; "/usr/local/lib/python3.7/site-packages/pyflink/util/exceptions.py", line
&gt; 154, in deco
&gt; &amp;nbsp; &amp;nbsp; raise exception_mapping[exception](s.split(': ', 
1)[1],
&gt; stack_trace)
&gt; pyflink.util.exceptions.TableException: 'AppendStreamTableSink requires
&gt; that Table has only insert changes.'
&gt;
&gt;
&gt;
&gt;
&gt;
&gt; ??????????????????????????????????????????????????????????????????
&gt;
&gt;
&gt; from pyflink.datastream import StreamExecutionEnvironment,
&gt; TimeCharacteristic
&gt; from pyflink.table import StreamTableEnvironment, DataTypes,
&gt; EnvironmentSettings,DataTypes, CsvTableSource, CsvTableSink
&gt; from pyflink.table.descriptors import Schema, Kafka, Json, Rowtime
&gt; from pyflink.table.window import Tumble&amp;nbsp;
&gt;
&gt;
&gt;
&gt;
&gt; def from_kafka_to_kafka_demo():
&gt;
&gt;
&gt; &amp;nbsp; &amp;nbsp; # use blink table planner
&gt; &amp;nbsp; &amp;nbsp; env = 
StreamExecutionEnvironment.get_execution_environment()
&gt; &amp;nbsp; &amp;nbsp;
&gt; env.set_stream_time_characteristic(TimeCharacteristic.EventTime)
&gt; &amp;nbsp; &amp;nbsp; env_settings =
&gt; EnvironmentSettings.Builder().use_blink_planner().build()
&gt; &amp;nbsp; &amp;nbsp; st_env =
&gt; 
StreamTableEnvironment.create(stream_execution_environment=env,environment_settings=env_settings)
&gt;
&gt;
&gt; &amp;nbsp; &amp;nbsp; # register source and sink
&gt; &amp;nbsp; &amp;nbsp; register_rides_source(st_env)
&gt; &amp;nbsp; &amp;nbsp; register_rides_sink(st_env)
&gt; &amp;nbsp; &amp;nbsp; register_mysql_source(st_env)
&gt;
&gt;
&gt; &amp;nbsp; &amp;nbsp; query = """
&gt; &amp;nbsp; &amp;nbsp; select&amp;nbsp; cast(sum(t1.id) as int) as id, 
max(t1.type) as
&gt; type,cast(tumble_start(t1.time1, interval '4' second) as bigint) as rowtime
&gt; &amp;nbsp; &amp;nbsp; from source1 t1&amp;nbsp;
&gt; &amp;nbsp; &amp;nbsp; group by tumble(t1.time1, interval '4' second)
&gt; &amp;nbsp; &amp;nbsp; """
&gt; &amp;nbsp; &amp;nbsp; count_result = st_env.sql_query(query)
&gt; &amp;nbsp; &amp;nbsp; st_env.create_temporary_view('final_result', 
count_result)
&gt; &amp;nbsp; &amp;nbsp; query2 = """
&gt; &amp;nbsp; &amp;nbsp; select&amp;nbsp; t1.id,t2.type,t1.rowtime from 
final_result t1
&gt; left join dim_mysql t2 on t1.type=t2.id
&gt; &amp;nbsp; &amp;nbsp; """
&gt; &amp;nbsp; &amp;nbsp; count_result2 = st_env.sql_query(query2)
&gt; &amp;nbsp; &amp;nbsp; st_env.create_temporary_view('final_result2', 
count_result2)
&gt;
&gt;
&gt; &amp;nbsp; &amp;nbsp; st_env.sql_update("insert into flink_result select
&gt; id,type,rowtime from final_result2")
&gt; &amp;nbsp; &amp;nbsp; st_env.execute("2-from_kafka_to_kafka")
&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;
&gt;
&gt;
&gt;
&gt;
&gt; def register_rides_source(st_env):
&gt; &amp;nbsp; &amp;nbsp; source_ddl = \
&gt; &amp;nbsp; &amp;nbsp; """
&gt; &amp;nbsp; &amp;nbsp; create table source1(
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;id int,
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;time2 varchar ,
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;time1 as 
TO_TIMESTAMP(time2,'yyyyMMddHHmmss'),
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;type string,
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;WATERMARK FOR time1 as time1 - INTERVAL 
'2' SECOND
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;) with (
&gt; &amp;nbsp; &amp;nbsp; 'connector.type' = 'kafka',
&gt; &amp;nbsp; &amp;nbsp; 'connector.topic' = 'tp1',
&gt; &amp;nbsp; &amp;nbsp; 'connector.startup-mode' = 'latest-offset',
&gt; &amp;nbsp; &amp;nbsp; 'connector.properties.bootstrap.servers' = 
'localhost:9092',
&gt; &amp;nbsp; &amp;nbsp; 'connector.properties.zookeeper.connect' = 
'localhost:2181',
&gt; &amp;nbsp; &amp;nbsp; 'format.type' = 'json',
&gt; &amp;nbsp; &amp;nbsp; 'connector.version' = 'universal'
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&gt; &amp;nbsp; &amp;nbsp; """
&gt; &amp;nbsp; &amp;nbsp; st_env.sql_update(source_ddl)
&gt;
&gt;
&gt; def register_mysql_source(st_env):
&gt; &amp;nbsp; &amp;nbsp; source_ddl = \
&gt; &amp;nbsp; &amp;nbsp; """
&gt; &amp;nbsp; &amp;nbsp; CREATE TABLE dim_mysql (
&gt; &amp;nbsp; &amp;nbsp; id varchar,&amp;nbsp; --&amp;nbsp;
&gt; &amp;nbsp; &amp;nbsp; type varchar --&amp;nbsp;
&gt; &amp;nbsp; &amp;nbsp; ) WITH (
&gt; &amp;nbsp; &amp;nbsp; 'connector.type' = 'jdbc',
&gt; &amp;nbsp; &amp;nbsp; 'connector.url' = 'jdbc:mysql://localhost:3390/test',
&gt; &amp;nbsp; &amp;nbsp; 'connector.table' = 'flink_test',
&gt; &amp;nbsp; &amp;nbsp; 'connector.driver' = 'com.mysql.jdbc.Driver',
&gt; &amp;nbsp; &amp;nbsp; 'connector.username' = '****',
&gt; &amp;nbsp; &amp;nbsp; 'connector.password' = '*****',
&gt; &amp;nbsp; &amp;nbsp; 'connector.lookup.cache.max-rows' = '5000',
&gt; &amp;nbsp; &amp;nbsp; 'connector.lookup.cache.ttl' = '10min'
&gt; &amp;nbsp; &amp;nbsp; )
&gt; &amp;nbsp; &amp;nbsp; """&amp;nbsp; &amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; &amp;nbsp; st_env.sql_update(source_ddl)
&gt;
&gt;
&gt; def register_rides_sink(st_env):
&gt; &amp;nbsp; &amp;nbsp; sink_ddl = \
&gt; &amp;nbsp; &amp;nbsp; """
&gt; &amp;nbsp; &amp;nbsp; CREATE TABLE flink_result (
&gt; &amp;nbsp; &amp;nbsp; id int,&amp;nbsp; &amp;nbsp;
&gt; &amp;nbsp; &amp;nbsp; type varchar,
&gt; &amp;nbsp; &amp;nbsp; rtime bigint,
&gt; &amp;nbsp; &amp;nbsp; primary key(id)
&gt; &amp;nbsp; &amp;nbsp; ) WITH (
&gt; &amp;nbsp; &amp;nbsp; with (
&gt; &amp;nbsp; &amp;nbsp; 'connector.type' = 'kafka',
&gt; &amp;nbsp; &amp;nbsp; 'connector.topic' = 'tp4',
&gt; &amp;nbsp; &amp;nbsp; 'connector.startup-mode' = 'latest-offset',
&gt; &amp;nbsp; &amp;nbsp; 'connector.properties.bootstrap.servers' = 
'localhost:9092',
&gt; &amp;nbsp; &amp;nbsp; 'connector.properties.zookeeper.connect' = 
'localhost:2181',
&gt; &amp;nbsp; &amp;nbsp; 'format.type' = 'json',
&gt; &amp;nbsp; &amp;nbsp; 'connector.version' = 'universal'
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&gt; &amp;nbsp; &amp;nbsp; )
&gt; &amp;nbsp; &amp;nbsp; """
&gt; &amp;nbsp; &amp;nbsp; st_env.sql_update(sink_ddl)
&gt;
&gt;
&gt;
&gt;
&gt; if __name__ == '__main__':
&gt; &amp;nbsp; &amp;nbsp; from_kafka_to_kafka_demo()
&gt;
&gt;
&gt;
&gt;
&gt;
&gt; ------------------&amp;nbsp;????????&amp;nbsp;------------------
&gt; ??????:
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 "????????????"
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 <
&gt; [email protected]&amp;gt;;
&gt; ????????:&amp;nbsp;2020??7??15??(??????) ????5:30
&gt; ??????:&amp;nbsp;"user-zh"<[email protected]&amp;gt;;
&gt;
&gt; ????:&amp;nbsp;?????? pyflink1.11.0window
&gt;
&gt;
&gt;
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;??????????
&gt;
&gt;
&gt;
&gt;
&gt; ------------------ ???????? ------------------
&gt; ??????:
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 "user-zh"
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 <
&gt; [email protected]&amp;gt;;
&gt; ????????:&amp;nbsp;2020??7??15??(??????) ????5:23
&gt; ??????:&amp;nbsp;"user-zh"<[email protected]&amp;gt;;
&gt;
&gt; ????:&amp;nbsp;Re: pyflink1.11.0window
&gt;
&gt;
&gt;
&gt; ??????????????kafka????json???????????? ????????????????????es?? 
???????????????????? ?????????????????? ??????????????????????????????
&gt;
&gt; from pyflink.datastream import StreamExecutionEnvironment,
&gt; TimeCharacteristic
&gt; from pyflink.table import StreamTableEnvironment, DataTypes,
&gt; EnvironmentSettings
&gt; from pyflink.table.udf import udf
&gt;
&gt;
&gt; @udf(input_types=[DataTypes.INT()], result_type=DataTypes.STRING())
&gt; def platform_code_to_name(code):
&gt; &amp;nbsp; &amp;nbsp; return "mobile" if code == 0 else "pc"
&gt;
&gt;
&gt; def log_processing():
&gt; &amp;nbsp; &amp;nbsp; env = 
StreamExecutionEnvironment.get_execution_environment()
&gt; &amp;nbsp; &amp;nbsp;
&gt; env.set_stream_time_characteristic(TimeCharacteristic.EventTime)
&gt; &amp;nbsp; &amp;nbsp; env_settings =
&gt; EnvironmentSettings.Builder().use_blink_planner().build()
&gt; &amp;nbsp; &amp;nbsp; t_env =
&gt; StreamTableEnvironment.create(stream_execution_environment=env,
&gt; environment_settings=env_settings)
&gt;
&gt; &amp;nbsp; &amp;nbsp; source_ddl = """
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; CREATE TABLE
&gt; payment_msg(
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; createTime VARCHAR,
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; rt as TO_TIMESTAMP(createTime),
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; orderId BIGINT,
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; payAmount DOUBLE,
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; payPlatform INT,
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; paySource INT,
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; WATERMARK FOR rt as rt - INTERVAL '2' SECOND
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; ) WITH (
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;
&gt; 'connector.type' = 'kafka',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;
&gt; 'connector.version' = 'universal',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;
&gt; 'connector.topic' = 'payment_msg_2',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;
&gt; 'connector.properties.bootstrap.servers' = '0.0.0.0:9092',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; '
&gt; connector.properties.group.id' = 'test_3',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;
&gt; 'connector.startup-mode' = 'latest-offset',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;
&gt; 'format.type' = 'json'
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; )
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; """
&gt; &amp;nbsp; &amp;nbsp; t_env.sql_update(source_ddl)
&gt;
&gt; &amp;nbsp; &amp;nbsp; es_sink_ddl = """
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; CREATE TABLE
&gt; es_sink (
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; platform
&gt; VARCHAR,
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; pay_amount
&gt; DOUBLE,
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; rowtime
&gt; TIMESTAMP(3)
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; ) with (
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.type' = 'elasticsearch',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.version' = '7',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.hosts' = 'http://localhost:9200',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.index' = 'platform_pay_amount_1',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.document-type' = 'payment',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'update-mode' = 'upsert',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.flush-on-checkpoint' = 'true',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.key-delimiter' = '$',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.key-null-literal' = 'n/a',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.bulk-flush.max-size' = '42mb',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.bulk-flush.max-actions' = '32',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.bulk-flush.interval' = '1000',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'connector.bulk-flush.backoff.delay' = '1000',
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; 'format.type' = 'json'
&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp; )
&gt; &amp;nbsp; &amp;nbsp; """
&gt;
&gt; &amp;nbsp; &amp;nbsp; t_env.sql_update(es_sink_ddl)
&gt;
&gt; &amp;nbsp; &amp;nbsp; t_env.register_function('platformcodetoname',
&gt; platform_code_to_name)
&gt;
&gt; &amp;nbsp; &amp;nbsp; query = """
&gt; &amp;nbsp; &amp;nbsp; select platformcodetoname(payPlatform) as platform,
&gt; sum(payAmount)
&gt; as pay_amount, cast(tumble_start(rt, interval '5' seconds) as BIGINT)
&gt; as rowtime
&gt; &amp;nbsp; &amp;nbsp; from payment_msg
&gt; &amp;nbsp; &amp;nbsp; group by tumble(rt, interval '5' seconds), 
payPlatform
&gt; &amp;nbsp; &amp;nbsp; """
&gt;
&gt; &amp;nbsp; &amp;nbsp; count_result = t_env.sql_query(query)
&gt;
&gt; &amp;nbsp; &amp;nbsp; t_env.create_temporary_view('windowed_values', 
count_result)
&gt;
&gt; &amp;nbsp; &amp;nbsp; query2 = """
&gt; &amp;nbsp; &amp;nbsp; select platform, last_value(pay_amount), rowtime from
&gt; windowed_values group by platform, rowtime
&gt; &amp;nbsp; &amp;nbsp; """
&gt;
&gt; &amp;nbsp; &amp;nbsp; final_result = t_env.sql_query(query2)
&gt;
&gt; &amp;nbsp; &amp;nbsp; final_result.execute_insert(table_path='es_sink')
&gt;
&gt;
&gt; if __name__ == '__main__':
&gt; &amp;nbsp; &amp;nbsp; log_processing()
&gt;
&gt;
&gt; ?????????????? <[email protected]&amp;gt; ??2020??7??15?????? 
????4:40??????
&gt;
&gt; &amp;gt; &amp;amp;nbsp;Shuiqiang????????
&gt; &amp;gt; &amp;amp;nbsp; &amp;amp;nbsp;
&gt; &amp;gt;
&gt; 
&amp;amp;nbsp;hi????????????????????????????????????????????????????????2-from_kafka_to_kafka.py??????????????????????????????????????????????demo????????????????????????????????????demo??????????????????????????????????????????????????????????????????
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt; ????????????????????????????
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt; ??????
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt; 
------------------&amp;amp;nbsp;????????&amp;amp;nbsp;------------------
&gt; &amp;gt; ??????:
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; "user-zh"
&gt; 
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&gt; &amp;nbsp; <
&gt; &amp;gt; [email protected]&amp;amp;gt;;
&gt; &amp;gt; ????????:&amp;amp;nbsp;2020??7??15??(??????) ????11:25
&gt; &amp;gt; 
??????:&amp;amp;nbsp;"user-zh"<[email protected]&amp;amp;gt;;
&gt; &amp;gt;
&gt; &amp;gt; ????:&amp;amp;nbsp;Re: pyflink1.11.0window
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt;
&gt; &amp;gt; ????sql????
&gt; &amp;gt; select platformcodetoname(payPlatform) as platform, 
sum(payAmount) as
&gt; &amp;gt; pay_amount, cast(tumble_start(rt, interval '5' seconds) as 
BIGINT) as
&gt; &amp;gt; rowtime
&gt; &amp;gt; from payment_msg group by tumble(rt, interval '5' seconds),
&gt; payPlatform
&gt; &amp;gt; ????query ????5s??tumble????????????
&gt; &amp;gt;
&gt; &amp;gt; ?????????????? <[email protected]&amp;amp;gt; ??2020??7??15?????? 
????11:10??????
&gt; &amp;gt;
&gt; &amp;gt; &amp;amp;gt; Shuiqiang????????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;nbsp;
&gt; &amp;gt; 
&amp;amp;amp;nbsp;??????????????????????????????????????????????????????????????????????????????????????window??
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; 
------------------&amp;amp;amp;nbsp;????????&amp;amp;amp;nbsp;------------------
&gt; &amp;gt; &amp;amp;gt; ??????:
&gt; &amp;gt;
&gt; 
&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
&gt; &amp;gt; "user-zh"
&gt; &amp;gt;
&gt; 
&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
&gt; &amp;gt; <
&gt; &amp;gt; &amp;amp;gt; [email protected]&amp;amp;amp;gt;;
&gt; &amp;gt; &amp;amp;gt; ????????:&amp;amp;amp;nbsp;2020??7??15??(??????) 
????10:51
&gt; &amp;gt; &amp;amp;gt; 
??????:&amp;amp;amp;nbsp;"user-zh"<[email protected]
&gt; &amp;amp;amp;gt;;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; ????:&amp;amp;amp;nbsp;Re: pyflink1.11.0window
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; ??????????
&gt; &amp;gt; &amp;amp;gt; 
??????????org.apache.flink.table.api.ValidationException: A
&gt; tumble window
&gt; &amp;gt; &amp;amp;gt; expects a size value literal.
&gt; &amp;gt; &amp;amp;gt; ????????????tumble window????????????????????
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; Best,
&gt; &amp;gt; &amp;amp;gt; Shuiqiang
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; ?????????????? <[email protected]&amp;amp;amp;gt; 
??2020??7??15??????
&gt; ????10:27??????
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; ??????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
&amp;amp;amp;amp;nbsp;??????????????????????source??????????????????????????????????????????????????window??????????????????????????????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; Traceback (most recent call last):
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; File 
"tou.py", line 71, in
&gt; <module&amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; from_kafka_to_kafka_demo()
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; File 
"tou.py", line 21, in
&gt; &amp;gt; from_kafka_to_kafka_demo
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp; .select("
&gt; id,&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; time1 , time1 ")\
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; File
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; "/usr/local/lib/python3.7/site-packages/pyflink/table/table.py", 
line
&gt; &amp;gt; &amp;amp;gt; 907,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; in select
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp; return
&gt; &amp;gt; Table(self._j_table.select(fields),
&gt; &amp;gt; &amp;amp;gt; self._t_env)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; File
&gt; &amp;gt; &amp;amp;gt;
&gt; "/usr/local/lib/python3.7/site-packages/py4j/java_gateway.py",
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; line 1286, in __call__
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp; answer,
&gt; self.gateway_client,
&gt; &amp;gt; self.target_id,
&gt; &amp;gt; &amp;amp;gt; self.name)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; File
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; 
"/usr/local/lib/python3.7/site-packages/pyflink/util/exceptions.py",
&gt; &amp;gt; &amp;amp;gt; line
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; 147, in deco
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp; return
&gt; f(*a, **kw)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; File
&gt; &amp;gt; &amp;amp;gt; 
"/usr/local/lib/python3.7/site-packages/py4j/protocol.py",
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; line 328, in get_return_value
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; format(target_id, ".", name),
&gt; &amp;gt; value)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; py4j.protocol.Py4JJavaError: An 
error occurred
&gt; while calling
&gt; &amp;gt; &amp;amp;gt; o26.select.
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; :
&gt; org.apache.flink.table.api.ValidationException: A tumble
&gt; &amp;gt; window
&gt; &amp;gt; &amp;amp;gt; expects
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; a size value literal.
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.table.operations.utils.AggregateOperationFactory.getAsValueLiteral(AggregateOperationFactory.java:384)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.table.operations.utils.AggregateOperationFactory.validateAndCreateTumbleWindow(AggregateOperationFactory.java:302)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.table.operations.utils.AggregateOperationFactory.createResolvedWindow(AggregateOperationFactory.java:236)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.table.operations.utils.OperationTreeBuilder.windowAggregate(OperationTreeBuilder.java:250)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.table.api.internal.TableImpl$WindowGroupedTableImpl.select(TableImpl.java:794)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.table.api.internal.TableImpl$WindowGroupedTableImpl.select(TableImpl.java:781)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; 
java.lang.reflect.Method.invoke(Method.java:498)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.api.python.shaded.py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.api.python.shaded.py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; org.apache.flink.api.python.shaded.py4j.Gateway.invoke(Gateway.java:282)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.api.python.shaded.py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.api.python.shaded.py4j.commands.CallCommand.execute(CallCommand.java:79)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
org.apache.flink.api.python.shaded.py4j.GatewayConnection.run(GatewayConnection.java:238)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; at
&gt; &amp;gt; &amp;amp;gt; java.lang.Thread.run(Thread.java:748)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; def register_rides_source(st_env):
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; source_ddl = \
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp; """
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp; create
&gt; table source1(
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp;id int,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp;time1 timestamp,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp;type string,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp;WATERMARK FOR
&gt; &amp;gt; time1 as time1 -
&gt; &amp;gt; &amp;amp;gt; INTERVAL '2' SECOND
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp;) with (
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; 'connector.type' = 'kafka',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; 'update-mode' = 'append',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; 'connector.topic' = 'tp1',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; 'connector.properties.bootstrap.servers' =
&gt; &amp;gt; &amp;amp;gt; 'localhost:9092',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; 'connector.properties.zookeeper.connect' =
&gt; &amp;gt; &amp;amp;gt; 'localhost:2181',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; 'format.type' = 'json',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; 'format.derive-schema' =
&gt; &amp;gt; 'true',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; 'connector.version' =
&gt; &amp;gt; 'universal'
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp;)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp; """
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; st_env.sql_update(source_ddl)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp; s_env =
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; StreamExecutionEnvironment.get_execution_environment()
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; s_env.set_parallelism(1)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp; st_env =
&gt; &amp;gt; StreamTableEnvironment.create(s_env)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; register_rides_source(st_env)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; register_rides_sink(st_env)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; st_env.from_path("source1")\
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; .window(Tumble.over("2.secends").on("time1").alias("w")) \
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; .group_by("w") \
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; .select(" id,&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; time1 , time1 ")\
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;nbsp;
&gt; &amp;gt; .insert_into("sink1")
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;nbsp; 
&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; st_env.execute("2-from_kafka_to_kafka")
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; ????????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt;
&gt; 
------------------&amp;amp;amp;amp;nbsp;????????&amp;amp;amp;amp;nbsp;------------------
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; ??????:
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
&amp;amp;amp;gt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; "user-zh"
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
&amp;amp;amp;gt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; <
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; 
[email protected]&amp;amp;amp;amp;gt;;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; 
????????:&amp;amp;amp;amp;nbsp;2020??7??10??(??????) ????9:17
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; 
??????:&amp;amp;amp;amp;nbsp;"user-zh"<
&gt; [email protected]
&gt; &amp;gt; &amp;amp;amp;amp;gt;;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; ????:&amp;amp;amp;amp;nbsp;Re: 
pyflink1.11.0window
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; ??????????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; ????source ddl????????time1?? time 
attribute????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; create table source1(
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; id
&gt; &amp;gt; &amp;amp;gt; int,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; time1 timestamp,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; type
&gt; &amp;gt; &amp;amp;gt; string,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; WATERMARK FOR time1 as time1 -
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; INTERVAL '2' SECOND
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; ) with (...)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; ?????????????? 
<[email protected]&amp;amp;amp;amp;gt;
&gt; ??2020??7??10??????
&gt; &amp;gt; ????8:43??????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
------------------&amp;amp;amp;amp;amp;nbsp;????????&amp;amp;amp;amp;amp;nbsp;------------------
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; ??????:
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
&amp;amp;amp;amp;gt;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; "??????????????"
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt;
&gt; &amp;gt;
&gt; 
&amp;amp;amp;amp;gt;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; <
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
[email protected]
&gt; &amp;amp;amp;amp;amp;gt;;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; ????????:&amp;amp;amp;amp;amp;nbsp;2020??7??9??(??????) ????5:08
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; ??????:&amp;amp;amp;amp;amp;nbsp;"godfrey he"<
&gt; &amp;gt; [email protected]
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;amp;amp;gt;;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; ????:&amp;amp;amp;amp;amp;nbsp;pyflink1.11.0window
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; ??????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; 
&amp;amp;amp;amp;amp;nbsp;????????pyflink1.11????????window????????????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; :
&gt; &amp;gt; org.apache.flink.table.api.ValidationException: A group
&gt; &amp;gt; &amp;amp;gt; window
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; expects a
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; time attribute 
for grouping in
&gt; a stream
&gt; &amp;gt; environment.
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; 
????????????????????????????????????????????????????????????????????????????????????????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; ????????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; ????
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; def 
from_kafka_to_kafka_demo():
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; s_env =
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; StreamExecutionEnvironment.get_execution_environment()
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; s_env.set_parallelism(1)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; # use
&gt; &amp;gt; blink table planner
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; st_env =
&gt; &amp;gt; &amp;amp;gt; StreamTableEnvironment.create(s_env)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; #
&gt; &amp;gt; register source and sink
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; register_rides_source(st_env)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; register_rides_sink(st_env)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; st_env.from_path("source1")\
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; .window(Tumble.over("1.secends").on("time1").alias("w")) \
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; .group_by("w") \
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; .select(" id,&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; time1 , time1 ")\
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; .insert_into("sink1")
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; st_env.execute("2-from_kafka_to_kafka")
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; def
&gt; register_rides_source(st_env):
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; source_ddl = \
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; '''
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; create
&gt; &amp;gt; table source1(
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; id int,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp;time1 timestamp,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp;type string
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp;) with (
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; 'connector.type' = 'kafka',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; 'update-mode' = 'append',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; 'connector.topic' = 'tp1',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; 'connector.properties.bootstrap.servers' =
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; 'localhost:9092'
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp;)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; '''
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; st_env.sql_update(source_ddl)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; def
&gt; register_rides_sink(st_env):
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; sink_ddl
&gt; &amp;gt; = \
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; '''
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; create
&gt; &amp;gt; table sink1(
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; id int,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp;time1 timestamp,
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp;time2 timestamp
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp;) with (
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; 'connector.type' = 'kafka',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; 'update-mode' = 'append',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; 'connector.topic' = 'tp3',
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;gt; 'connector.properties.bootstrap.servers' =
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; 'localhost:9092'
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; &amp;amp;amp;amp;amp;nbsp;)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp; '''
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; st_env.sql_update(sink_ddl)
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; if __name__ == 
'__main__':
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;
&gt; &amp;gt; from_kafka_to_kafka_demo()
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt;
&gt; &amp;gt; &amp;amp;gt; &amp;amp;amp;gt; &amp;amp;amp;amp;gt; 
&amp;amp;amp;amp;amp;nbsp;
&gt; &amp;amp;amp;amp;amp;nbsp;

回复