| #!/usr/bin/env python | 
 | ################################################################################ | 
 | #  Licensed to the Apache Software Foundation (ASF) under one | 
 | #  or more contributor license agreements.  See the NOTICE file | 
 | #  distributed with this work for additional information | 
 | #  regarding copyright ownership.  The ASF licenses this file | 
 | #  to you under the Apache License, Version 2.0 (the | 
 | #  "License"); you may not use this file except in compliance | 
 | #  with the License.  You may obtain a copy of the License at | 
 | # | 
 | #      http://www.apache.org/licenses/LICENSE-2.0 | 
 | # | 
 | #  Unless required by applicable law or agreed to in writing, software | 
 | #  distributed under the License is distributed on an "AS IS" BASIS, | 
 | #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | #  See the License for the specific language governing permissions and | 
 | # limitations under the License. | 
 | ################################################################################ | 
 | import platform | 
 | import sys | 
 |  | 
 | from pyflink.common import * | 
 | from pyflink.datastream import * | 
 | from pyflink.table import * | 
 | from pyflink.table.catalog import * | 
 | from pyflink.table.descriptors import * | 
 | from pyflink.table.window import * | 
 | from pyflink.metrics import * | 
 |  | 
 | utf8_out = open(sys.stdout.fileno(), mode='w', encoding='utf8', buffering=1) | 
 |  | 
 | print("Using Python version %s (%s, %s)" % ( | 
 |     platform.python_version(), | 
 |     platform.python_build()[0], | 
 |     platform.python_build()[1])) | 
 |  | 
 | welcome_msg = u''' | 
 |                          \u2592\u2593\u2588\u2588\u2593\u2588\u2588\u2592 | 
 |                      \u2593\u2588\u2588\u2588\u2588\u2592\u2592\u2588\u2593\u2592\u2593\u2588\u2588\u2588\u2593\u2592 | 
 |                   \u2593\u2588\u2588\u2588\u2593\u2591\u2591        \u2592\u2592\u2592\u2593\u2588\u2588\u2592  \u2592 | 
 |                 \u2591\u2588\u2588\u2592   \u2592\u2592\u2593\u2593\u2588\u2593\u2593\u2592\u2591      \u2592\u2588\u2588\u2588\u2588 | 
 |                 \u2588\u2588\u2592         \u2591\u2592\u2593\u2588\u2588\u2588\u2592    \u2592\u2588\u2592\u2588\u2592 | 
 |                   \u2591\u2593\u2588            \u2588\u2588\u2588   \u2593\u2591\u2592\u2588\u2588 | 
 |                     \u2593\u2588       \u2592\u2592\u2592\u2592\u2592\u2593\u2588\u2588\u2593\u2591\u2592\u2591\u2593\u2593\u2588 | 
 |                   \u2588\u2591 \u2588   \u2592\u2592\u2591       \u2588\u2588\u2588\u2593\u2593\u2588 \u2592\u2588\u2592\u2592\u2592 | 
 |                   \u2588\u2588\u2588\u2588\u2591   \u2592\u2593\u2588\u2593      \u2588\u2588\u2592\u2592\u2592 \u2593\u2588\u2588\u2588\u2592 | 
 |                \u2591\u2592\u2588\u2593\u2593\u2588\u2588       \u2593\u2588\u2592    \u2593\u2588\u2592\u2593\u2588\u2588\u2593 \u2591\u2588\u2591 | 
 |          \u2593\u2591\u2592\u2593\u2588\u2588\u2588\u2588\u2592 \u2588\u2588         \u2592\u2588    \u2588\u2593\u2591\u2592\u2588\u2592\u2591\u2592\u2588\u2592 | 
 |         \u2588\u2588\u2588\u2593\u2591\u2588\u2588\u2593  \u2593\u2588           \u2588   \u2588\u2593 \u2592\u2593\u2588\u2593\u2593\u2588\u2592 | 
 |       \u2591\u2588\u2588\u2593  \u2591\u2588\u2591            \u2588  \u2588\u2592 \u2592\u2588\u2588\u2588\u2588\u2588\u2593\u2592 \u2588\u2588\u2593\u2591\u2592 | 
 |      \u2588\u2588\u2588\u2591 \u2591 \u2588\u2591          \u2593 \u2591\u2588 \u2588\u2588\u2588\u2588\u2588\u2592\u2591\u2591    \u2591\u2588\u2591\u2593  \u2593\u2591 | 
 |     \u2588\u2588\u2593\u2588 \u2592\u2592\u2593\u2592          \u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2591       \u2592\u2588\u2592 \u2592\u2593 \u2593\u2588\u2588\u2593 | 
 |  \u2592\u2588\u2588\u2593 \u2593\u2588 \u2588\u2593\u2588       \u2591\u2592\u2588\u2588\u2588\u2588\u2588\u2593\u2593\u2592\u2591         \u2588\u2588\u2592\u2592  \u2588 \u2592  \u2593\u2588\u2592 | 
 |  \u2593\u2588\u2593  \u2593\u2588 \u2588\u2588\u2593 \u2591\u2593\u2593\u2593\u2593\u2593\u2593\u2593\u2592              \u2592\u2588\u2588\u2593           \u2591\u2588\u2592 | 
 |  \u2593\u2588    \u2588 \u2593\u2588\u2588\u2588\u2593\u2592\u2591              \u2591\u2593\u2593\u2593\u2588\u2588\u2588\u2593          \u2591\u2592\u2591 \u2593\u2588 | 
 |  \u2588\u2588\u2593    \u2588\u2588\u2592    \u2591\u2592\u2593\u2593\u2588\u2588\u2588\u2593\u2593\u2593\u2593\u2593\u2588\u2588\u2588\u2588\u2588\u2588\u2593\u2592            \u2593\u2588\u2588\u2588  \u2588 | 
 | \u2593\u2588\u2588\u2588\u2592 \u2588\u2588\u2588   \u2591\u2593\u2593\u2592\u2591\u2591   \u2591\u2593\u2588\u2588\u2588\u2588\u2593\u2591                  \u2591\u2592\u2593\u2592  \u2588\u2593 | 
 | \u2588\u2593\u2592\u2592\u2593\u2593\u2588\u2588  \u2591\u2592\u2592\u2591\u2591\u2591\u2592\u2592\u2592\u2592\u2593\u2588\u2588\u2593\u2591                            \u2588\u2593 | 
 | \u2588\u2588 \u2593\u2591\u2592\u2588   \u2593\u2593\u2593\u2593\u2592\u2591\u2591  \u2592\u2588\u2593       \u2592\u2593\u2593\u2588\u2588\u2593    \u2593\u2592          \u2592\u2592\u2593 | 
 | \u2593\u2588\u2593 \u2593\u2592\u2588  \u2588\u2593\u2591  \u2591\u2592\u2593\u2593\u2588\u2588\u2592            \u2591\u2593\u2588\u2592   \u2592\u2592\u2592\u2591\u2592\u2592\u2593\u2588\u2588\u2588\u2588\u2588\u2592 | 
 |  \u2588\u2588\u2591 \u2593\u2588\u2592\u2588\u2592  \u2592\u2593\u2593\u2592  \u2593\u2588                \u2588\u2591      \u2591\u2591\u2591\u2591   \u2591\u2588\u2592 | 
 |  \u2593\u2588   \u2592\u2588\u2593   \u2591     \u2588\u2591                \u2592\u2588              \u2588\u2593 | 
 |   \u2588\u2593   \u2588\u2588         \u2588\u2591                 \u2593\u2593        \u2592\u2588\u2593\u2593\u2593\u2592\u2588\u2591 | 
 |    \u2588\u2593 \u2591\u2593\u2588\u2588\u2591       \u2593\u2592                  \u2593\u2588\u2593\u2592\u2591\u2591\u2591\u2592\u2593\u2588\u2591    \u2592\u2588 | 
 |     \u2588\u2588   \u2593\u2588\u2593\u2591      \u2592                    \u2591\u2592\u2588\u2592\u2588\u2588\u2592      \u2593\u2593 | 
 |      \u2593\u2588\u2592   \u2592\u2588\u2593\u2592\u2591                         \u2592\u2592 \u2588\u2592\u2588\u2593\u2592\u2592\u2591\u2591\u2592\u2588\u2588 | 
 |       \u2591\u2588\u2588\u2592    \u2592\u2593\u2593\u2592                     \u2593\u2588\u2588\u2593\u2592\u2588\u2592 \u2591\u2593\u2593\u2593\u2593\u2592\u2588\u2593 | 
 |         \u2591\u2593\u2588\u2588\u2592                          \u2593\u2591  \u2592\u2588\u2593\u2588  \u2591\u2591\u2592\u2592\u2592 | 
 |             \u2592\u2593\u2593\u2593\u2593\u2593\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2591\u2591\u2593\u2593  \u2593\u2591\u2592\u2588\u2591 | 
 |  | 
 |               F L I N K - P Y T H O N - S H E L L | 
 |  | 
 | NOTE: Use the prebound Table Environment to implement batch or streaming Table programs. | 
 |  | 
 |   Streaming - Use 's_env' and 'st_env' variables | 
 |  | 
 | ``` | 
 | import os | 
 | import shutil | 
 | import tempfile | 
 |  | 
 | sink_path = tempfile.gettempdir() + '/streaming.csv' | 
 | if os.path.exists(sink_path): | 
 |     if os.path.isfile(sink_path): | 
 |         os.remove(sink_path) | 
 |     else: | 
 |         shutil.rmtree(sink_path) | 
 |  | 
 | s_env.set_parallelism(1) | 
 | t = st_env.from_elements([(1, 'hi', 'hello'), (2, 'hi', 'hello')], ['a', 'b', 'c']) | 
 |  | 
 | st_env.create_temporary_table("stream_sink", TableDescriptor.for_connector("filesystem") | 
 |                               .schema(Schema.new_builder() | 
 |                                       .column("a", DataTypes.BIGINT()) | 
 |                                       .column("b", DataTypes.STRING()) | 
 |                                       .column("c", DataTypes.STRING()) | 
 |                                       .build()) | 
 |                               .option("path", sink_path) | 
 |                               .format(FormatDescriptor.for_format("csv") | 
 |                                       .option("field-delimiter", ",") | 
 |                                       .build()) | 
 |                               .build()) | 
 |  | 
 | t.select(col('a') + 1, col('b'), col('c')).insert_into("stream_sink") | 
 | st_env.execute("stream_job") | 
 |  | 
 | # show the results | 
 | with open(os.path.join(sink_path, os.listdir(sink_path)[0]), 'r') as f: | 
 |     print(f.read()) | 
 |  | 
 | ``` | 
 | ''' | 
 | utf8_out.write(welcome_msg) | 
 |  | 
 | s_env = StreamExecutionEnvironment.get_execution_environment() | 
 |  | 
 | st_env = StreamTableEnvironment.create(s_env) |