trinodb / trino

Official repository of Trino, the distributed SQL query engine for big data, formerly known as PrestoSQL (https://trino.io)
https://trino.io
Apache License 2.0
9.83k stars 2.85k forks source link

delta - Error: Unknown type: void while selecting registered delta table #20114

Closed AlakmarShafin closed 6 months ago

AlakmarShafin commented 6 months ago

while running simple command: _select * from deltalake.dl_standard_gmcmart.dimpoliciesgmc

dim_policiesgmc is a delta table in azure blob and registered using register_table procedure other similar tables are working fine.

Stack trace: org.jkiss.dbeaver.model.sql.DBSQLException: SQL Error [43]: Query failed (#20231214_090104_02315_ngirz): Unknown type: void at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:133) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:582) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$1(SQLQueryJob.java:491) at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:498) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:934) at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:3919) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:123) at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:121) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5101) at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:105) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) Caused by: java.sql.SQLException: Query failed (#20231214_090104_02315_ngirz): Unknown type: void at io.trino.jdbc.AbstractTrinoResultSet.resultsException(AbstractTrinoResultSet.java:1937) at io.trino.jdbc.TrinoResultSet.getColumns(TrinoResultSet.java:318) at io.trino.jdbc.TrinoResultSet.create(TrinoResultSet.java:61) at io.trino.jdbc.TrinoStatement.internalExecute(TrinoStatement.java:262) at io.trino.jdbc.TrinoStatement.execute(TrinoStatement.java:240) at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execute(JDBCStatementImpl.java:330) at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:131) ... 12 more Caused by: io.trino.spi.type.TypeNotFoundException: Unknown type: void at io.trino.plugin.deltalake.transactionlog.DeltaLakeSchemaSupport.buildType(DeltaLakeSchemaSupport.java:667) at io.trino.plugin.deltalake.transactionlog.DeltaLakeSchemaSupport.mapColumn(DeltaLakeSchemaSupport.java:443) at io.trino.plugin.deltalake.transactionlog.DeltaLakeSchemaSupport.lambda$getColumnMetadata$10(DeltaLakeSchemaSupport.java:430) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.ArrayList$Itr.forEachRemaining(ArrayList.java:1085) at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) at io.trino.plugin.deltalake.transactionlog.DeltaLakeSchemaSupport.getColumnMetadata(DeltaLakeSchemaSupport.java:431) at io.trino.plugin.deltalake.transactionlog.DeltaLakeSchemaSupport.lambda$extractSchema$8(DeltaLakeSchemaSupport.java:415) at java.base/java.util.Optional.map(Optional.java:260) at io.trino.plugin.deltalake.transactionlog.DeltaLakeSchemaSupport.extractSchema(DeltaLakeSchemaSupport.java:415) at io.trino.plugin.deltalake.DeltaLakeMetadata.getColumns(DeltaLakeMetadata.java:792) at io.trino.plugin.deltalake.DeltaLakeMetadata.getTableColumnMetadata(DeltaLakeMetadata.java:663) at io.trino.plugin.deltalake.DeltaLakeMetadata.getTableMetadata(DeltaLakeMetadata.java:621) at io.trino.spi.connector.ConnectorMetadata.getTableSchema(ConnectorMetadata.java:256) at io.trino.plugin.base.classloader.ClassLoaderSafeConnectorMetadata.getTableSchema(ClassLoaderSafeConnectorMetadata.java:270) at io.trino.tracing.TracingConnectorMetadata.getTableSchema(TracingConnectorMetadata.java:239) at io.trino.metadata.MetadataManager.getTableSchema(MetadataManager.java:454) at io.trino.tracing.TracingMetadata.getTableSchema(TracingMetadata.java:289) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.visitTable(StatementAnalyzer.java:2267) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.visitTable(StatementAnalyzer.java:497) at io.trino.sql.tree.Table.accept(Table.java:60) at io.trino.sql.tree.AstVisitor.process(AstVisitor.java:27) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.process(StatementAnalyzer.java:516) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.analyzeFrom(StatementAnalyzer.java:4581) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.visitQuerySpecification(StatementAnalyzer.java:3038) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.visitQuerySpecification(StatementAnalyzer.java:497) at io.trino.sql.tree.QuerySpecification.accept(QuerySpecification.java:155) at io.trino.sql.tree.AstVisitor.process(AstVisitor.java:27) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.process(StatementAnalyzer.java:516) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.process(StatementAnalyzer.java:524) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.visitQuery(StatementAnalyzer.java:1534) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.visitQuery(StatementAnalyzer.java:497) at io.trino.sql.tree.Query.accept(Query.java:118) at io.trino.sql.tree.AstVisitor.process(AstVisitor.java:27) at io.trino.sql.analyzer.StatementAnalyzer$Visitor.process(StatementAnalyzer.java:516) at io.trino.sql.analyzer.StatementAnalyzer.analyze(StatementAnalyzer.java:476) at io.trino.sql.analyzer.StatementAnalyzer.analyze(StatementAnalyzer.java:465) at io.trino.sql.analyzer.Analyzer.analyze(Analyzer.java:97) at io.trino.sql.analyzer.Analyzer.analyze(Analyzer.java:86) at io.trino.execution.SqlQueryExecution.analyze(SqlQueryExecution.java:274) at io.trino.execution.SqlQueryExecution.(SqlQueryExecution.java:209) at io.trino.execution.SqlQueryExecution$SqlQueryExecutionFactory.createQueryExecution(SqlQueryExecution.java:850) at io.trino.dispatcher.LocalDispatchQueryFactory.lambda$createDispatchQuery$0(LocalDispatchQueryFactory.java:153) at io.trino.$gen.Trino_434____20231213_112246_2.call(Unknown Source) 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)

ebyhr commented 6 months ago

void type isn't supported in Delta Lake connector. We could skip the column like JDBC-based connectors. You need to drop the column in Spark or other query engines as the workaround.

jkylling commented 6 months ago

There is a previous issue on this here: https://github.com/trinodb/trino/issues/15193 It was an oversight in Spark that creating such columns were allowed.