flink icon indicating copy to clipboard operation
flink copied to clipboard

[hotfix][Table SQL / API] fix create table from values decimal issue

Open empathy87 opened this issue 1 year ago • 1 comments

What is the purpose of the change

The following code fails on the second fromValues:

List<Row> rows1 = new ArrayList<>();
rows1.add(Row.of(new BigDecimal("1.01")));
final Table table1 = tableEnv().fromValues(rows1);
List<Row> rows2 = new ArrayList<>();
rows2.add(Row.of(new BigDecimal("0.01")));
final Table table2 = tableEnv().fromValues(rows2);

with an exception

org.apache.flink.table.api.ValidationException: Decimal scale must be between 0 and the precision 1 (both inclusive).

	at org.apache.flink.table.types.logical.DecimalType.<init>(DecimalType.java:76)
	at org.apache.flink.table.types.logical.DecimalType.<init>(DecimalType.java:85)
	at org.apache.flink.table.api.DataTypes.DECIMAL(DataTypes.java:283)
	at org.apache.flink.table.types.utils.ValueDataTypeConverter.convertToDecimalType(ValueDataTypeConverter.java:131)
	at org.apache.flink.table.types.utils.ValueDataTypeConverter.extractDataType(ValueDataTypeConverter.java:69)
	at org.apache.flink.table.expressions.ValueLiteralExpression.deriveDataTypeFromValue(ValueLiteralExpression.java:354)

The reason is that the object new BigDecimal("0.01") has scale = 2 and precision = 1, which is not appropriate for Flink Decimal type. So, Flink Decimal type creation from BigDecimal value should be adjusted.

Brief change log

  • Added precision adjustment in ValueDataTypeConverter::convertToDecimalType to reflect that BigDecimal could have precision less than scale

Verifying this change

This change is a trivial rework / code cleanup without any test coverage.

Does this pull request potentially affect one of the following parts:

  • Dependencies (does it add or upgrade a dependency): (yes / no)
  • The public API, i.e., is any changed class annotated with @Public(Evolving): (yes / no)
  • The serializers: (yes / no / don't know)
  • The runtime per-record code paths (performance sensitive): (yes / no / don't know)
  • Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn, ZooKeeper: (yes / no / don't know)
  • The S3 file system connector: (yes / no / don't know)

Documentation

  • Does this pull request introduce a new feature? (yes / no)
  • If yes, how is the feature documented? (not applicable / docs / JavaDocs / not documented)

empathy87 avatar Jun 25 '24 17:06 empathy87

CI report:

  • bdb76285d78797c9e77b4e9c236c51e8fc1dd251 Azure: SUCCESS
Bot commands The @flinkbot bot supports the following commands:
  • @flinkbot run azure re-run the last Azure build

flinkbot avatar Jun 25 '24 17:06 flinkbot

This PR is being marked as stale since it has not had any activity in the last 90 days. If you would like to keep this PR alive, please leave a comment asking for a review. If the PR has merge conflicts, update it with the latest from the base branch.

If you are having difficulty finding a reviewer, please reach out to the community, contact details can be found here: https://flink.apache.org/what-is-flink/community/

If this PR is no longer valid or desired, please feel free to close it. If no activity occurs in the next 30 days, it will be automatically closed.

github-actions[bot] avatar Apr 06 '25 06:04 github-actions[bot]

This PR has been closed since it has not had any activity in 120 days. If you feel like this was a mistake, or you would like to continue working on it, please feel free to re-open the PR and ask for a review.

github-actions[bot] avatar May 06 '25 06:05 github-actions[bot]