Pritam Kumar created FLINK-40264:
------------------------------------

             Summary: nested legacyTimestampMapping
                 Key: FLINK-40264
                 URL: https://issues.apache.org/jira/browse/FLINK-40264
             Project: Flink
          Issue Type: Bug
          Components: Formats (JSON, Avro, Parquet, ORC, SequenceFile)
    Affects Versions: 2.3.0, 2.2.0, 1.20.0
            Reporter: Pritam Kumar


h2. Problem

  {{AvroToRowDataConverters#createConverter}} dispatches a nested {{ROW}} to 
the single argument overload:

  {code:java}
  case ROW:
      return createRowConverter((RowType) type);
  {code}

  {{createRowConverter(RowType)}} defaults {{legacyTimestampMapping}} to 
{{true}}, so the flag is dropped for every nesting level below the top one. 
Since {{TIMESTAMP_LTZ}} is only supported by the non legacy mapping, a nested 
{{TIMESTAMP_LTZ}}
  column fails even when the non legacy mapping was explicitly requested:

  {noformat}
  java.lang.UnsupportedOperationException: Unsupported type: TIMESTAMP_LTZ(3) 
NOT NULL
  {noformat}

  The failure happens while the deserialization schema is being constructed, so 
the job never starts.

  h2. Reproduction

  {code:java}
  DataType dataType =
          ROW(
                  FIELD("id", INT().notNull()),
                  FIELD("nested", ROW(FIELD("ltz3", 
TIMESTAMP_LTZ(3).notNull())).notNull()))
          .notNull();
  RowType rowType = (RowType) dataType.getLogicalType();

  new AvroRowDataDeserializationSchema(
          rowType,
          InternalTypeInfo.of(rowType),
          AvroEncoding.BINARY,
          false /* legacyTimestampMapping */);   // throws
  {code}

  {{AvroSchemaConverter#convertToSchema}} handles the same type correctly with 
{{legacyTimestampMapping = false}}, and {{RowDataToAvroConverters}} propagates 
the flag properly, so only the deserialization side is affected.

  h2. Fix

  Propagate the flag:

  {code:java}
  case ROW:
      return createRowConverter((RowType) type, legacyTimestampMapping);
  {code}

  Strictly a widening: the only code paths whose behaviour changes are ones 
that throw today.

  h2. Introduced by

  FLINK-33198, first released in 1.19.0.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to