[
https://issues.apache.org/jira/browse/FLINK-39171?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
tianfy updated FLINK-39171:
---------------------------
Description:
In Oracle CDC {*}pipeline mode{*}, transform projection can fail when
projection uses quoted uppercase source columns (for example {{{}`ID`{}}}),
with:
{{Column 'ID' not found in any table}}
Observed behavior suggests Oracle pipeline schema columns are normalized to
lowercase internally (for example {{{}id{}}}), while transform SQL validation
treats quoted identifiers as exact/case-sensitive, causing mismatch.
h3. Reproduction
# Create Oracle table (unquoted column names, Oracle stores as uppercase):
{{ TESTUSER.ORDERS(ID, PRODUCT_ID, QUANTITY, UPDATED_AT)}}
2. Run Oracle pipeline with transform projection using quoted uppercase
source columns, e.g.:
pipeline:
schema.change.behavior: LENIENT
transform:
- source-table: ORCL19.TESTUSER.ORDERS
primary-keys: id
projection: "`ID` as `id`,`PRODUCT_ID` as `product_id`,`QUANTITY` as
`quantity`,`UPDATED_AT` as `updated_at`"
source:
type: oracle
database: ORCL19
tables: ORCL19.TESTUSER.ORDERS
scan.startup.mode: initial
3. Start the job.
h3. Actual behavior
Job fails during post-transform schema handling:
*
org.apache.flink.cdc.runtime.operators.transform.exceptions.TransformException
* Caused by: org.apache.calcite.sql.validate.SqlValidatorException: Column
'ID' not found in any table
Stack path includes: PostTransformOperator ->
TransformParser.generateProjectionColumns -> Calcite validator
h3. Expected behavior
Oracle pipeline should use a consistent column-name strategy between schema and
transform projection:
# Either preserve Oracle column case consistently, or
2. Normalize both schema and projection consistently, or
3. Resolve quoted identifiers safely for Oracle semantics.
At minimum, projection generated from source metadata should not fail with
column-not-found because of internal case normalization mismatch.
h3. Impact
* Oracle pipeline job fails at startup for common projection patterns using
original DB column names.
* Blocks end-to-end sync in transform-enabled pipelines.
h3. Workaround
* Convert Oracle source field names in projection to lowercase before
submission (for example {{id}} instead of {{{}ID{}}}).
* Avoid quoted uppercase source identifiers in transform projection.
h3. Additional notes
If needed, I can provide a minimal runnable reproducer (DDL + full pipeline
YAML + complete stack trace).
was:
In Oracle CDC {*}pipeline mode{*}, transform projection can fail when
projection uses quoted uppercase source columns (for example {{{}`ID`{}}}),
with:
{{Column 'ID' not found in any table}}
Observed behavior suggests Oracle pipeline schema columns are normalized to
lowercase internally (for example {{{}id{}}}), while transform SQL validation
treats quoted identifiers as exact/case-sensitive, causing mismatch.
h3. Reproduction
# Create Oracle table (unquoted column names, Oracle stores as uppercase):
* {{TESTUSER.ORDERS(ID, PRODUCT_ID, QUANTITY, UPDATED_AT)}}
2. Run Oracle pipeline with transform projection using quoted uppercase
source columns, e.g.:
pipeline:
schema.change.behavior: LENIENT
transform:
- source-table: ORCL19.TESTUSER.ORDERS
primary-keys: id
projection: "`ID` as `id`,`PRODUCT_ID` as `product_id`,`QUANTITY` as
`quantity`,`UPDATED_AT` as `updated_at`"
source:
type: oracle
database: ORCL19
tables: ORCL19.TESTUSER.ORDERS
scan.startup.mode: initial
3. Start the job.
h3. Actual behavior
Job fails during post-transform schema handling:
*
org.apache.flink.cdc.runtime.operators.transform.exceptions.TransformException
* Caused by: org.apache.calcite.sql.validate.SqlValidatorException: Column
'ID' not found in any table
Stack path includes: PostTransformOperator ->
TransformParser.generateProjectionColumns -> Calcite validator
h3. Expected behavior
Oracle pipeline should use a consistent column-name strategy between schema and
transform projection:
# Either preserve Oracle column case consistently, or
# Normalize both schema and projection consistently, or
# Resolve quoted identifiers safely for Oracle semantics.
At minimum, projection generated from source metadata should not fail with
column-not-found because of internal case normalization mismatch.
h3. Impact
* Oracle pipeline job fails at startup for common projection patterns using
original DB column names.
* Blocks end-to-end sync in transform-enabled pipelines.
h3. Workaround
* Convert Oracle source field names in projection to lowercase before
submission (for example {{id}} instead of {{{}ID{}}}).
* Avoid quoted uppercase source identifiers in transform projection.
h3. Additional notes
If needed, I can provide a minimal runnable reproducer (DDL + full pipeline
YAML + complete stack trace).
> Oracle pipeline transform fails with quoted uppercase projection columns
> ------------------------------------------------------------------------
>
> Key: FLINK-39171
> URL: https://issues.apache.org/jira/browse/FLINK-39171
> Project: Flink
> Issue Type: Improvement
> Components: Flink CDC
> Affects Versions: cdc-3.6.0
> Environment: * Flink: 1.20.1
> * Oracle: 19c (Non-CDB,)
> * Startup mode: {{initial}}
> * Flink CDC:3.6.0
> Reporter: tianfy
> Priority: Major
>
> In Oracle CDC {*}pipeline mode{*}, transform projection can fail when
> projection uses quoted uppercase source columns (for example {{{}`ID`{}}}),
> with:
> {{Column 'ID' not found in any table}}
> Observed behavior suggests Oracle pipeline schema columns are normalized to
> lowercase internally (for example {{{}id{}}}), while transform SQL validation
> treats quoted identifiers as exact/case-sensitive, causing mismatch.
> h3. Reproduction
> # Create Oracle table (unquoted column names, Oracle stores as uppercase):
> {{ TESTUSER.ORDERS(ID, PRODUCT_ID, QUANTITY, UPDATED_AT)}}
> 2. Run Oracle pipeline with transform projection using quoted
> uppercase source columns, e.g.:
> pipeline:
> schema.change.behavior: LENIENT
>
> transform:
> - source-table: ORCL19.TESTUSER.ORDERS
> primary-keys: id
> projection: "`ID` as `id`,`PRODUCT_ID` as `product_id`,`QUANTITY` as
> `quantity`,`UPDATED_AT` as `updated_at`"
>
> source:
> type: oracle
> database: ORCL19
> tables: ORCL19.TESTUSER.ORDERS
> scan.startup.mode: initial
>
> 3. Start the job.
> h3. Actual behavior
> Job fails during post-transform schema handling:
> *
> org.apache.flink.cdc.runtime.operators.transform.exceptions.TransformException
> * Caused by: org.apache.calcite.sql.validate.SqlValidatorException: Column
> 'ID' not found in any table
> Stack path includes: PostTransformOperator ->
> TransformParser.generateProjectionColumns -> Calcite validator
> h3. Expected behavior
> Oracle pipeline should use a consistent column-name strategy between schema
> and transform projection:
> # Either preserve Oracle column case consistently, or
> 2. Normalize both schema and projection consistently, or
> 3. Resolve quoted identifiers safely for Oracle semantics.
> At minimum, projection generated from source metadata should not fail with
> column-not-found because of internal case normalization mismatch.
> h3. Impact
> * Oracle pipeline job fails at startup for common projection patterns using
> original DB column names.
> * Blocks end-to-end sync in transform-enabled pipelines.
> h3. Workaround
> * Convert Oracle source field names in projection to lowercase before
> submission (for example {{id}} instead of {{{}ID{}}}).
> * Avoid quoted uppercase source identifiers in transform projection.
> h3. Additional notes
> If needed, I can provide a minimal runnable reproducer (DDL + full pipeline
> YAML + complete stack trace).
>
>
>
>
>
>
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)