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
10.15k stars 2.93k forks source link

Add support for MongoDB Atlas Data Lake #4544

Open ebyhr opened 4 years ago

ebyhr commented 4 years ago

While we can use MongoDB Atlas now, we cannot get table from Atlas "Data Lake".

presto> desc datalake."bucket-name"."table-name";
Query 20200723_021137_00004_qmtfd failed: com.mongodb.MongoCommandException: Command failed with error 115 (CommandNotSupported): 'command createIndexes is unsupported, correlationID = 16243fc903c0eaa5e65428e8' on server hostname:27017. The full response is { "ok" : 0, "errmsg" : "command createIndexes is unsupported, correlationID = 16243fc903c0eaa5e65428e8", "code" : 115, "codeName" : "CommandNotSupported" }
com.google.common.util.concurrent.UncheckedExecutionException: com.mongodb.MongoCommandException: Command failed with error 115 (CommandNotSupported): 'command createIndexes is unsupported, correlationID = 16243fc903c0eaa5e65428e8' on server hostname:27017. The full response is { "ok" : 0, "errmsg" : "command createIndexes is unsupported, correlationID = 16243fc903c0eaa5e65428e8", "code" : 115, "codeName" : "CommandNotSupported" }
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2051)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3951)
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4958)
    at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4964)
    at io.prestosql.plugin.mongodb.MongoSession.getTable(MongoSession.java:171)
    at io.prestosql.plugin.mongodb.MongoMetadata.getTableHandle(MongoMetadata.java:80)
    at io.prestosql.plugin.mongodb.MongoMetadata.getTableHandle(MongoMetadata.java:55)
    at io.prestosql.metadata.MetadataManager.getTableHandle(MetadataManager.java:331)
    at io.prestosql.sql.rewrite.ShowQueriesRewrite$Visitor.visitShowColumns(ShowQueriesRewrite.java:378)
    at io.prestosql.sql.rewrite.ShowQueriesRewrite$Visitor.visitShowColumns(ShowQueriesRewrite.java:160)
    at io.prestosql.sql.tree.ShowColumns.accept(ShowColumns.java:68)
    at io.prestosql.sql.tree.AstVisitor.process(AstVisitor.java:27)
    at io.prestosql.sql.rewrite.ShowQueriesRewrite.rewrite(ShowQueriesRewrite.java:157)
    at io.prestosql.sql.rewrite.StatementRewrite.rewrite(StatementRewrite.java:57)
    at io.prestosql.sql.analyzer.Analyzer.analyze(Analyzer.java:80)
    at io.prestosql.sql.analyzer.Analyzer.analyze(Analyzer.java:75)
    at io.prestosql.execution.SqlQueryExecution.analyze(SqlQueryExecution.java:246)
    at io.prestosql.execution.SqlQueryExecution.<init>(SqlQueryExecution.java:180)
    at io.prestosql.execution.SqlQueryExecution$SqlQueryExecutionFactory.createQueryExecution(SqlQueryExecution.java:746)
    at io.prestosql.dispatcher.LocalDispatchQueryFactory.lambda$createDispatchQuery$0(LocalDispatchQueryFactory.java:121)
    at io.prestosql.$gen.Presto_339____20200723_020952_2.call(Unknown Source)
    at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
    at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69)
    at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.mongodb.MongoCommandException: Command failed with error 115 (CommandNotSupported): 'command createIndexes is unsupported, correlationID = 16243fc903c0eaa5e65428e8' on server datalake0-glgjy.a.query.mongodb.net:27017. The full response is { "ok" : 0, "errmsg" : "command createIndexes is unsupported, correlationID = 16243fc903c0eaa5e65428e8", "code" : 115, "codeName" : "CommandNotSupported" }
    at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:179)
    at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:293)
    at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:255)
    at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:99)
    at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:444)
    at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:72)
    at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:200)
    at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:269)
    at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:131)
    at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:123)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:242)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:233)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:170)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:163)
    at com.mongodb.operation.CreateIndexesOperation$1.call(CreateIndexesOperation.java:174)
    at com.mongodb.operation.CreateIndexesOperation$1.call(CreateIndexesOperation.java:169)
    at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:448)
    at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:410)
    at com.mongodb.operation.CreateIndexesOperation.execute(CreateIndexesOperation.java:169)
    at com.mongodb.operation.CreateIndexesOperation.execute(CreateIndexesOperation.java:70)
    at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:193)
    at com.mongodb.client.internal.MongoCollectionImpl.executeCreateIndexes(MongoCollectionImpl.java:805)
    at com.mongodb.client.internal.MongoCollectionImpl.createIndexes(MongoCollectionImpl.java:788)
    at com.mongodb.client.internal.MongoCollectionImpl.createIndexes(MongoCollectionImpl.java:783)
    at com.mongodb.client.internal.MongoCollectionImpl.createIndex(MongoCollectionImpl.java:768)
    at io.prestosql.plugin.mongodb.MongoSession.getTableMetadata(MongoSession.java:440)
    at io.prestosql.plugin.mongodb.MongoSession.loadTableSchema(MongoSession.java:196)
    at com.google.common.cache.CacheLoader$FunctionToCacheLoader.load(CacheLoader.java:165)
    at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
    at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
    ... 27 more
ebyhr commented 4 years ago

The failed place is storing table definition in schema, so we can access the table if create it manually as the workaround.

findepi commented 4 years ago

@ebyhr is there a way to test Atlas Data Lake compatibility in a continuous fashion?

academy-codex commented 3 years ago

@findepi @ebyhr I think this can be fixed #8956 with the createIndex flag ?

ebyhr commented 3 years ago

@academy-codex I guess so. However, we need to add tests as @findepi mentioned.

academy-codex commented 3 years ago

@findepi How do we go about testing this, lets close this ?