blob: 94f45fc8e41fc8be19cd67841252c8ea99493a1c [file] [log] [blame]
.. ################################################################################
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.
################################################################################
==============
Compiled Plans
==============
CompiledPlan
------------
Represents an immutable, fully optimized, and executable entity that has been compiled from a
Table & SQL API pipeline definition. It encodes operators, expressions, functions, data types,
and table connectors.
Every new Flink version might introduce improved optimizer rules, more efficient operators,
and other changes that impact the behavior of previously defined pipelines. In order to ensure
backwards compatibility and enable stateful streaming job upgrades, compiled plans can be
persisted and reloaded across Flink versions. See the
`website documentation <https://flink.apache.org/documentation/>`_ for more information about
provided guarantees during stateful pipeline upgrades.
A plan can be compiled from a SQL query using
:func:`~pyflink.table.TableEnvironment.compile_plan_sql`.
It can be persisted using :func:`~pyflink.table.CompiledPlan.write_to_file` or by manually
extracting the JSON representation with func:`~pyflink.table.CompiledPlan.as_json_string`.
A plan can be loaded back from a file or a string using
:func:`~pyflink.table.TableEnvironment.load_plan` with a :class:`~pyflink.table.PlanReference`.
Instances can be executed using :func:`~pyflink.table.CompiledPlan.execute`.
Depending on the configuration, permanent catalog metadata (such as information about tables
and functions) will be persisted in the plan as well. Anonymous/inline objects will be
persisted (including schema and options) if possible or fail the compilation otherwise.
For temporary objects, only the identifier is part of the plan and the object needs to be
present in the session context during a restore.
JSON encoding is assumed to be the default representation of a compiled plan in all API
endpoints, and is the format used to persist the plan to files by default.
For advanced use cases, :func:`~pyflink.table.CompiledPlan.as_smile_bytes` provides a binary
format representation of the compiled plan.
.. note::
Plan restores assume a stable session context. Configuration, loaded modules and
catalogs, and temporary objects must not change. Schema evolution and changes of function
signatures are not supported.
.. currentmodule:: pyflink.table
.. autosummary::
:toctree: api/
CompiledPlan.as_json_string
CompiledPlan.as_smile_bytes
CompiledPlan.write_to_file
CompiledPlan.get_flink_version
CompiledPlan.print_json_string
CompiledPlan.execute
CompiledPlan.explain
CompiledPlan.print_explain
PlanReference
-------------
Unresolved pointer to a persisted plan.
A plan represents a static, executable entity that has been compiled from a Table & SQL API
pipeline definition.
You can load the content of this reference into a :class:`~pyflink.table.CompiledPlan`
using :func:`~pyflink.table.TableEnvironment.load_plan` with a
:class:`~pyflink.table.PlanReference`, or you can directly load and execute it with
:func:`~pyflink.table.TableEnvironment.execute_plan`.
.. seealso:: :class:`~pyflink.table.CompiledPlan`
.. currentmodule:: pyflink.table
.. autosummary::
:toctree: api/
PlanReference.from_file
PlanReference.from_json_string
PlanReference.from_smile_bytes