Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Trino has a bug of Merge Statement from Iceberg Catalog #21619

Closed
cheetile opened this issue Apr 19, 2024 · 2 comments · Fixed by #21697
Closed

Trino has a bug of Merge Statement from Iceberg Catalog #21619

cheetile opened this issue Apr 19, 2024 · 2 comments · Fixed by #21697
Labels
bug Something isn't working correctness

Comments

@cheetile
Copy link

cheetile commented Apr 19, 2024

I only tested on Iceberg Catalog.

Setting:

create table iceberg.test.test_tbl (
	id integer not null,
	msg varchar not null,
	msg_2 varchar not null
)
with (format = 'PARQUET');
insert into iceberg.test.test_tbl(id, msg, msg_2) values (1, 'aa', 'bb');

Test Query:

merge into iceberg.test.test_tbl t
using (select 2 as id, 'cc' as msg) s on t.id = s.id
when matched 
	then update set 
		msg = s.msg
when not matched 
	then insert (id, msg) values(s.id, s.msg)
;

The execution of Test Query is succeeded.
And then when run next query, raise exception.

select * from iceberg.test.test_tbl;
Caused by: java.sql.SQLException: Query failed (#20240419_012952_00969_eenyh): Failed to read Parquet file: ~~~~~~~~~~.parquet
	at io.trino.jdbc.AbstractTrinoResultSet.resultsException(AbstractTrinoResultSet.java:1937)
	at io.trino.jdbc.TrinoResultSet$ResultsPageIterator.computeNext(TrinoResultSet.java:294)
	at io.trino.jdbc.TrinoResultSet$ResultsPageIterator.computeNext(TrinoResultSet.java:254)
	at io.trino.jdbc.$internal.guava.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145)
	at io.trino.jdbc.$internal.guava.collect.AbstractIterator.hasNext(AbstractIterator.java:140)
	at java.base/java.util.Spliterators$IteratorSpliterator.tryAdvance(Unknown Source)
	at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.lambda$initPartialTraversalState$0(Unknown Source)
	at java.base/java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.fillBuffer(Unknown Source)
	at java.base/java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.doAdvance(Unknown Source)
	at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.tryAdvance(Unknown Source)
	at java.base/java.util.Spliterators$1Adapter.hasNext(Unknown Source)
	at io.trino.jdbc.TrinoResultSet$AsyncIterator.lambda$new$1(TrinoResultSet.java:179)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: io.trino.spi.TrinoException: Failed to read Parquet file: ~~~~~~~~~~~.parquet
	at io.trino.plugin.iceberg.IcebergPageSourceProvider.handleException(IcebergPageSourceProvider.java:1515)
	at io.trino.plugin.iceberg.IcebergPageSourceProvider.lambda$createParquetPageSource$26(IcebergPageSourceProvider.java:1081)
	at io.trino.parquet.reader.ParquetBlockFactory$ParquetBlockLoader.load(ParquetBlockFactory.java:75)
	at io.trino.spi.block.LazyBlock$LazyData.load(LazyBlock.java:361)
	at io.trino.spi.block.LazyBlock$LazyData.getFullyLoadedBlock(LazyBlock.java:340)
	at io.trino.spi.block.LazyBlock.getLoadedBlock(LazyBlock.java:235)
	at io.trino.spi.Page.getLoadedPage(Page.java:241)
	at io.trino.operator.TableScanOperator.getOutput(TableScanOperator.java:269)
	at io.trino.operator.Driver.processInternal(Driver.java:398)
	at io.trino.operator.Driver.lambda$process$8(Driver.java:301)
	at io.trino.operator.Driver.tryWithLock(Driver.java:704)
	at io.trino.operator.Driver.process(Driver.java:293)
	at io.trino.operator.Driver.processForDuration(Driver.java:264)
	at io.trino.execution.SqlTaskExecution$DriverSplitRunner.processFor(SqlTaskExecution.java:887)
	at io.trino.execution.executor.dedicated.SplitProcessor.run(SplitProcessor.java:76)
	at io.trino.execution.executor.dedicated.TaskEntry$VersionEmbedderBridge.lambda$run$0(TaskEntry.java:191)
	at io.trino.$gen.Trino_439____20240408_170237_2.run(Unknown Source)
	at io.trino.execution.executor.dedicated.TaskEntry$VersionEmbedderBridge.run(TaskEntry.java:192)
	at io.trino.execution.executor.scheduler.FairScheduler.runTask(FairScheduler.java:174)
	at io.trino.execution.executor.scheduler.FairScheduler.lambda$submit$0(FairScheduler.java:161)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
	at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:131)
	at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:76)
	at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:82)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.IndexOutOfBoundsException: Range [0, 0 + 4) out of bounds for length 0
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromIndexSize(Preconditions.java:118)
	at java.base/jdk.internal.util.Preconditions.checkFromIndexSize(Preconditions.java:397)
	at java.base/java.util.Objects.checkFromIndexSize(Objects.java:437)
	at io.airlift.slice.Slice.getInt(Slice.java:278)
	at io.trino.parquet.reader.decoders.PlainByteArrayDecoders$BinaryPlainValueDecoder.read(PlainByteArrayDecoders.java:156)
	at io.trino.parquet.reader.decoders.PlainByteArrayDecoders$BinaryPlainValueDecoder.read(PlainByteArrayDecoders.java:135)
	at io.trino.parquet.reader.flat.FlatColumnReader$DataValuesBuffer.readNonNullValues(FlatColumnReader.java:358)
	at io.trino.parquet.reader.flat.FlatColumnReader.readNonNull(FlatColumnReader.java:188)
	at io.trino.parquet.reader.flat.FlatColumnReader.readPrimitive(FlatColumnReader.java:90)
	at io.trino.parquet.reader.ParquetReader.readPrimitive(ParquetReader.java:463)
	at io.trino.parquet.reader.ParquetReader.readColumnChunk(ParquetReader.java:553)
	at io.trino.parquet.reader.ParquetReader.readBlock(ParquetReader.java:536)
	at io.trino.parquet.reader.ParquetReader.lambda$nextPage$3(ParquetReader.java:251)
	at io.trino.parquet.reader.ParquetBlockFactory$ParquetBlockLoader.load(ParquetBlockFactory.java:72)
	... 24 more
@ebyhr ebyhr added the bug Something isn't working label Apr 19, 2024
@ebyhr
Copy link
Member

ebyhr commented Apr 19, 2024

I can reproduce the issue on master.

@chenjian2664
Copy link
Contributor

The msg_2 is not null, but in the merge insert not specify the column, I think it' should fail in first merge. @djsstarburst

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working correctness
Development

Successfully merging a pull request may close this issue.

4 participants