[
https://issues.apache.org/jira/browse/FLINK-38418?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated FLINK-38418:
-----------------------------------
Labels: pull-request-available (was: )
> Collecting TIMESTAMP_LTZ values in PyFlink fails with pickling error
> --------------------------------------------------------------------
>
> Key: FLINK-38418
> URL: https://issues.apache.org/jira/browse/FLINK-38418
> Project: Flink
> Issue Type: Bug
> Components: API / Python
> Reporter: Mika Naylor
> Priority: Major
> Labels: pull-request-available
>
> It is possible to insert Python {{datetime}} values into a table with a
> {{TIMESTAMP_LTZ}} column, but attempting to extract the values out again when
> collecting {{TIMESTAMP_LTZ}} value fails with a pickling exception. For
> example:
> {code:java}
> from pyflink.table import TableEnvironment, EnvironmentSettings
> from pyflink.table.expressions import col
> settings = EnvironmentSettings.in_streaming_mode()
> env = TableEnvironment.create(settings)
> env.execute_sql(
> """
> CREATE TABLE MyTable (
> a TIMESTAMP_LTZ
> ) WITH ('connector' = 'datagen')
> """
> )
> result =
> env.from_path("MyTable").select(col("a")).limit(1).execute().collect()
> for r in result:
> print(r)
> {code}
>
> Produces:
>
> {code:java}
> py4j.protocol.Py4JJavaError: An error occurred while calling
> z:org.apache.flink.api.common.python.PythonBridgeUtils.getPickledBytesFromRow.
> : org.apache.flink.api.python.shaded.net.razorvine.pickle.PickleException:
> couldn't introspect javabean: java.lang.IllegalArgumentException: wrong
> number of arguments {code}
> This is because
> [PythonBridgeUtils.getPickledBytesFromRow|https://github.com/confluentinc/flink/blob/release-1.19-confluent/flink-python/src/main/java/org/apache/flink/api/common/python/PythonBridgeUtils.java#L166]
> does not contain a case for a LocalZonedTimestampType, so it falls into the
> default clause at the end which just tries to pickle the value object. The
> value object is an Instant which cant be pickled properly.
> The {{java.sql.Timestamp}} class which we pickle {{TimestampType}} with does
> have a method of constructing one from an Instant, so I think it could be
> possible to fix this via
> {{{}pickler.dumps(Timestamp.from((Instant) obj)){}}}, but this might also
> have to modify the to/from sql type logic in the python
> {{LocalZonedTimestampType}} since the pickling would return a datetime object
> and not a timestamp.
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)