Some bug with "Detail: Unauthenticated Invalid bearer token provided. Detail: Unauthenticated"
Closed this issue · 26 comments
Dbeaver log:
cfjd.org.apache.arrow.flight.FlightRuntimeException: UNAUTHENTICATED: Invalid bearer token provided. Detail: Unauthenticated
cfjd.org.apache.arrow.flight.FlightRuntimeException: UNAUTHENTICATED: Invalid bearer token provided. Detail: Unauthenticated
Invalid bearer token provided. Detail: Unauthenticated
Tableau log:
Unable to complete action
Bad Connection: Tableau could not connect to the data source.
Error Code: FAB9A2C5
cfjd.org.apache.arrow.flight.FlightRuntimeException: UNAUTHENTICATED: Invalid bearer token provided. Detail: Unauthenticated
Generic JDBC connection error
cfjd.org.apache.arrow.flight.FlightRuntimeException: UNAUTHENTICATED: Invalid bearer token provided. Detail: Unauthenticated
Context:
After docker run I can properly get access to dbever. but when I just try to connect with tableau it show UNAUTHENTICATION issue . After I go back to dbever and it shows same UNAUTHENTICATION issue till I restart docker.
This is terminal docker log.
2023-11-06 22:06:30 Client running SQL command:
2023-11-06 22:06:30 SELECT * FROM "customer"; # Dbeaver select
2023-11-06 22:06:30
2023-11-06 22:06:35 Client running SQL command:
2023-11-06 22:06:35 SELECT VERSION(); # dbeaver version select
2023-11-06 22:06:35
2023-11-06 22:07:17 Bearer Token verification failed with exception: failed to verify signature: VerifyFinal failed #Tableau try to access
2023-11-06 22:07:17 Client running SQL command:
2023-11-06 22:07:17 SELECT 1;
2023-11-06 22:07:17
It happens when I try to connect from Tableau with "Mysql" dialect and Postgres dialect. It shows nothing with SQL92.
hi @YuriyGavrilov - the JDBC client can cache tokens - so it may likely be trying to use a token that was generated for localhost before you ran in Docker.
I would suggest using a different value for the FLIGHT_PASSWORD
environment variable when you start Docker - that should force the client to invalidate the cache, and you should get a new token. Could you try that, and let me know if it works?
Also - I used the PostgreSQL dialect when I tested on my end - it seemed to work well. I did not test MySQL - as DuckDB seems to use more of a PostgreSQL dialect...
I found that adding &token=null
to the jdbc URL in Tableau helped. It seems to force Tableau to grab a fresh auth token using username/password....
@prmoore77 it seems I broke everything in my environment. receive
jdbc:arrow-flight-sql://localhost:31337?useEncryption=true&user=flight_username&password=flight_password1&disableCertificateVerification=true
docker run --name flight-sql \
--detach \
--rm \
--tty \
--init \
--publish 31337:31337 \
--env FLIGHT_PASSWORD="flight_password1" \
--env PRINT_QUERIES="1" \
--env INIT_SQL_COMMANDS="SET threads = 1; SET memory_limit = '1GB';" \
--pull missing \
voltrondata/flight-sql:latest
logs
-extensions v3_usr_extensions
2023-12-01 00:12:22 Certificate request self-signature ok
2023-12-01 00:12:22 subject=C = US, ST = CA, O = "MyOrg, Inc.", CN = localhost
2023-12-01 00:12:22 + openssl pkcs8 -in cert0.key -topk8 -nocrypt
2023-12-01 00:12:22 + openssl pkcs8 -in cert1.key -topk8 -nocrypt
2023-12-01 00:12:22 /opt/flight_sql
2023-12-01 00:12:22 Apache Arrow version: 14.0.1
2023-12-01 00:12:22 Using TLS Cert file: "/opt/flight_sql/tls/cert0.pem"
2023-12-01 00:12:22 Using TLS Key file: "/opt/flight_sql/tls/cert0.key"
2023-12-01 00:12:22 DuckDB version: v0.9.2
2023-12-01 00:12:22 Running Init SQL command:
2023-12-01 00:12:22 SET autoinstall_known_extensions = true;
2023-12-01 00:12:22 Running Init SQL command:
2023-12-01 00:12:22 SET autoload_known_extensions = true;
2023-12-01 00:12:22 Running Init SQL command:
2023-12-01 00:12:22 SET threads = 1;
2023-12-01 00:12:22 Running Init SQL command:
2023-12-01 00:12:22 SET memory_limit = '1GB';
2023-12-01 00:12:22 Using database file: "/opt/flight_sql/data/TPC-H-small.duckdb"
2023-12-01 00:12:22 Print Queries option is set to: true
2023-12-01 00:12:22 Apache Arrow Flight SQL server - with engine: duckdb - listening on grpc+tls://0.0.0.0:31337
2023-12-01 00:17:46 Bearer Token verification failed with exception: invalid token supplied
Thanks for testing... It seems we need to overhaul either the server's auth code, or allow a way to force a token refresh in the JDBC driver with an argument. I'll research this more and try to find a good strategy...
The &token=null
thing only worked in Tableau for me. It seems DBeaver sends in a string value of 'null'
@YuriyGavrilov - I believe I've fixed the issue. Could you validate?
Yep, I'm sure it's true. Will fix my environment and retest. Many thx 🙏 for your help @prmoore77
@prmoore77 I've also made some changes in arrow. May be you should know it to make some adoption. apache/arrow#38253 (apache/arrow#38737 - this PR) or may be need to add different issue it but anyway I put it here may be nothing needs to do)
@YuriyGavrilov - by the way - is your solution now working ok? I just wanted to follow up... Thanks.
@prmoore77 plan to test it today evening... will come back to you after.
@prmoore77 Making tests ... in dbeaver everything is good but in tableau not so... some driver issue. come back to arrow 10 version and make test again. receive this in tableau log:
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
2023-12-04T21:09:08.039287 Protocol Server starting.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by cfjd.io.netty.util.internal.ReflectionUtil (file:/Users/yuriygavrilov/Library/Tableau/Drivers/flight-sql-jdbc-driver-10.0.0.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of cfjd.io.netty.util.internal.ReflectionUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2023-12-04 21:09:10.750 +0300 (,,,,1,9) grpc-default-executor-1 : ERROR com.tableausoftware.jdbc.JDBCProtocolImpl - Error in getDialectPropertiesImpl
java.lang.NullPointerException: null
at org.apache.arrow.driver.jdbc.ArrowDatabaseMetadata.getSqlInfoEnumOptionAndCacheIfCacheIsEmpty(ArrowDatabaseMetadata.java:758) ~[?:?]
at org.apache.arrow.driver.jdbc.ArrowDatabaseMetadata.supportsANSI92EntryLevelSQL(ArrowDatabaseMetadata.java:343) ~[?:?]
at com.tableausoftware.jdbc.JDBCProtocolImpl.getSQL92Level(JDBCProtocolImpl.java:1038) ~[jdbcserver.jar:5.23.0]
at com.tableausoftware.jdbc.JDBCProtocolImpl.getDialectPropertiesImpl(JDBCProtocolImpl.java:1168) ~[jdbcserver.jar:5.23.0]
at com.tableausoftware.jdbc.JDBCProtocolImpl.getDialectProperties(JDBCProtocolImpl.java:1189) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.service.ProtocolService.getDialectProperties(ProtocolService.java:260) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.grpc.GrpcProtocolService.lambda$getDialectProperties$15(GrpcProtocolService.java:220) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.grpc.GrpcProtocolService.wrap(GrpcProtocolService.java:280) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.grpc.GrpcProtocolService.getDialectProperties(GrpcProtocolService.java:219) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.generated.ProtocolServiceGrpc$MethodHandlers.invoke(ProtocolServiceGrpc.java:1536) ~[jdbcserver.jar:5.23.0]
at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182) ~[jdbcserver.jar:5.23.0]
at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35) ~[jdbcserver.jar:5.23.0]
at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23) ~[jdbcserver.jar:5.23.0]
at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40) ~[jdbcserver.jar:5.23.0]
at io.grpc.Contexts$ContextualizedServerCallListener.onHalfClose(Contexts.java:86) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:354) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:866) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[jdbcserver.jar:5.23.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
at java.lang.Thread.run(Unknown Source) ~[?:?]
2023-12-04 21:09:10.750 +0300 (,,,,1,9) grpc-default-executor-1 : ERROR com.tableau.connect.util.GrpcServiceHelper - Failed in getDialectProperties.
java.lang.NullPointerException: null
at org.apache.arrow.driver.jdbc.ArrowDatabaseMetadata.getSqlInfoEnumOptionAndCacheIfCacheIsEmpty(ArrowDatabaseMetadata.java:758) ~[?:?]
at org.apache.arrow.driver.jdbc.ArrowDatabaseMetadata.supportsANSI92EntryLevelSQL(ArrowDatabaseMetadata.java:343) ~[?:?]
at com.tableausoftware.jdbc.JDBCProtocolImpl.getSQL92Level(JDBCProtocolImpl.java:1038) ~[jdbcserver.jar:5.23.0]
at com.tableausoftware.jdbc.JDBCProtocolImpl.getDialectPropertiesImpl(JDBCProtocolImpl.java:1168) ~[jdbcserver.jar:5.23.0]
at com.tableausoftware.jdbc.JDBCProtocolImpl.getDialectProperties(JDBCProtocolImpl.java:1189) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.service.ProtocolService.getDialectProperties(ProtocolService.java:260) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.grpc.GrpcProtocolService.lambda$getDialectProperties$15(GrpcProtocolService.java:220) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.grpc.GrpcProtocolService.wrap(GrpcProtocolService.java:280) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.grpc.GrpcProtocolService.getDialectProperties(GrpcProtocolService.java:219) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.generated.ProtocolServiceGrpc$MethodHandlers.invoke(ProtocolServiceGrpc.java:1536) ~[jdbcserver.jar:5.23.0]
at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182) ~[jdbcserver.jar:5.23.0]
at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35) ~[jdbcserver.jar:5.23.0]
at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23) ~[jdbcserver.jar:5.23.0]
at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40) ~[jdbcserver.jar:5.23.0]
at io.grpc.Contexts$ContextualizedServerCallListener.onHalfClose(Contexts.java:86) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:354) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:866) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[jdbcserver.jar:5.23.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
at java.lang.Thread.run(Unknown Source) ~[?:?]
2023-12-04 21:09:10.750 +0300 (,,,,1,9) grpc-default-executor-1 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 9 /getDialectProperties.
2023-12-04 21:09:10.754 +0300 (,,,,1,10) grpc-default-executor-1 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 10 /isConnected.
2023-12-04 21:09:10.755 +0300 (,,,,1,10) grpc-default-executor-1 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 10 /isConnected.
2023-12-04 21:09:10.758 +0300 (,,,,1,11) grpc-default-executor-1 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 11 /closeProtocol.
2023-12-04 21:09:10.758 +0300 (,,,,1,11) grpc-default-executor-1 : INFO com.tableausoftware.jdbc.JDBCProtocolImpl - Closing connection 1.
2023-12-04 21:09:10.769 +0300 (,,,,1,11) grpc-default-executor-1 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 11 /closeProtocol.
Will try to find the main reason of this.
If I change dialect from sql 92 to Portgres - receive this:
and it seems to be good enough but I just didn't see any tables inside tableau ... just can't chose it in UI.
2023-12-04 21:15:34.185 +0300 (,,,,2,13) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 13 /constructProtocol.
2023-12-04 21:15:34.185 +0300 (,,,,2,13) grpc-default-executor-2 : INFO com.tableausoftware.jdbc.JDBCDriverManager - Get driver from isolatedDrivers.
2023-12-04 21:15:34.186 +0300 (,,,,2,13) grpc-default-executor-2 : INFO com.tableausoftware.jdbc.JDBCProtocolImpl - Connecting to *******
2023-12-04 21:15:34.186 +0300 (,,,,2,13) grpc-default-executor-2 : INFO com.tableausoftware.jdbc.JDBCProtocolImpl - Connection properties {password=*******, user=flight_username}
2023-12-04 21:15:34.217 +0300 (,,,,2,13) grpc-default-executor-2 : INFO com.tableausoftware.jdbc.JDBCDriverManager - Connected using driver {org.apache.arrow.driver.jdbc.ArrowFlightJdbcDriver} from isolatedDriver.
2023-12-04 21:15:34.232 +0300 (,,,,2,13) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 13 /constructProtocol.
2023-12-04 21:15:34.233 +0300 (,,,,2,14) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 14 /setCapability.
2023-12-04 21:15:34.233 +0300 (,,,,2,14) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 14 /setCapability.
2023-12-04 21:15:34.234 +0300 (,,,,2,15) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 15 /setCapability.
2023-12-04 21:15:34.235 +0300 (,,,,2,15) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 15 /setCapability.
2023-12-04 21:15:34.236 +0300 (,,,,2,16) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 16 /setCapability.
2023-12-04 21:15:34.236 +0300 (,,,,2,16) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 16 /setCapability.
2023-12-04 21:15:34.237 +0300 (,,,,2,17) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 17 /setCapability.
2023-12-04 21:15:34.237 +0300 (,,,,2,17) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 17 /setCapability.
2023-12-04 21:15:34.238 +0300 (,,,,2,18) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 18 /setCapability.
2023-12-04 21:15:34.238 +0300 (,,,,2,18) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 18 /setCapability.
2023-12-04 21:15:34.240 +0300 (,,,,2,19) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 19 /setCapability.
2023-12-04 21:15:34.240 +0300 (,,,,2,19) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 19 /setCapability.
2023-12-04 21:15:34.241 +0300 (,,,,2,20) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 20 /setCapability.
2023-12-04 21:15:34.241 +0300 (,,,,2,20) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 20 /setCapability.
2023-12-04 21:15:34.248 +0300 (,,,,2,21) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 21 /runQuery.
2023-12-04 21:15:34.250 +0300 (,,,,2,21) grpc-default-executor-2 : INFO com.tableau.connect.service.ProtocolService - Running query
CREATE LOCAL TEMPORARY TABLE "#Tableau______DBA_A___AC___B__A_______DAF__D____1_Connect_Check" (
"COL" INTEGER
) ON COMMIT PRESERVE ROWS
2023-12-04 21:15:34.252 +0300 (,,,,2,21) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 21 /runQuery.
2023-12-04 21:15:34.298 +0300 (,,,,2,21) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting max result buffer size to 322122547 bytes, 30% of the max heap size.
2023-12-04 21:15:34.298 +0300 (,,,,2,21) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting adaptive fetch size to 2000.
2023-12-04 21:15:34.317 +0300 (,,,,2,21) pool-6-thread-1 : INFO com.tableausoftware.data.ProtobufJDBCResultSet - BindingInfo{columnName='Count', columnTypeName='BIGINT', columnLabel='Count', columnType=-5, precision=0, scale=0, columnDisplaySize=0, protobufType=LONG, nullable=noNulls}
2023-12-04 21:15:34.331 +0300 (,,,,2,23) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 23 /closeQuery.
2023-12-04 21:15:34.337 +0300 (,,,,2,21) pool-6-thread-1 : INFO com.tableau.connect.service.QueryTask - Query task for protocol 2 completed.
2023-12-04 21:15:34.338 +0300 (,,,,2,23) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 23 /closeQuery.
2023-12-04 21:15:34.341 +0300 (,,,,2,24) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 24 /startInsertData.
2023-12-04 21:15:34.341 +0300 (,,,,2,24) grpc-default-executor-2 : INFO com.tableau.connect.service.ProtocolService - Creating data inserter for protocol 2
2023-12-04 21:15:34.341 +0300 (,,,,2,24) grpc-default-executor-2 : INFO com.tableausoftware.jdbc.JDBCProtocolImpl - Prepare insert statement:
INSERT INTO "#Tableau______DBA_A___AC___B__A_______DAF__D____1_Connect_Check" ("COL")
VALUES...<truncated>
2023-12-04 21:15:34.352 +0300 (,,,,2,24) grpc-default-executor-2 : INFO com.tableausoftware.jdbc.JDBCProtocolImpl - [Time] JDBCProtocolImpl: Prepare statement took: 0,009000 sec.
2023-12-04 21:15:34.353 +0300 (,,,,2,24) grpc-default-executor-2 : INFO com.tableausoftware.jdbc.DataInserter - Creating data inserter with 0 parameters of types:
2023-12-04 21:15:34.353 +0300 (,,,,2,24) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 24 /startInsertData.
2023-12-04 21:15:34.358 +0300 (,,,,2,25) grpc-default-executor-2 : ERROR com.tableau.connect.util.GrpcServiceHelper - Failed in insertData.
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at com.tableausoftware.jdbc.DataInserter.bindColumn(DataInserter.java:119) ~[jdbcserver.jar:5.23.0]
at com.tableausoftware.jdbc.DataInserter.bindColumn(DataInserter.java:115) ~[jdbcserver.jar:5.23.0]
at com.tableausoftware.jdbc.DataInserter.insertData(DataInserter.java:86) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.service.ProtocolService.insertData(ProtocolService.java:243) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.grpc.GrpcProtocolService.lambda$insertData$12(GrpcProtocolService.java:188) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.grpc.GrpcProtocolService.wrap(GrpcProtocolService.java:280) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.grpc.GrpcProtocolService.insertData(GrpcProtocolService.java:187) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.generated.ProtocolServiceGrpc$MethodHandlers.invoke(ProtocolServiceGrpc.java:1528) ~[jdbcserver.jar:5.23.0]
at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182) ~[jdbcserver.jar:5.23.0]
at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35) ~[jdbcserver.jar:5.23.0]
at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23) ~[jdbcserver.jar:5.23.0]
at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40) ~[jdbcserver.jar:5.23.0]
at io.grpc.Contexts$ContextualizedServerCallListener.onHalfClose(Contexts.java:86) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:354) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:866) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[jdbcserver.jar:5.23.0]
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[jdbcserver.jar:5.23.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
at java.lang.Thread.run(Unknown Source) ~[?:?]
2023-12-04 21:15:34.360 +0300 (,,,,2,26) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 26 /isConnected.
2023-12-04 21:15:34.361 +0300 (,,,,2,26) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 26 /isConnected.
2023-12-04 21:15:34.364 +0300 (,,,,2,27) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 27 /endInsertData.
2023-12-04 21:15:34.364 +0300 (,,,,2,27) grpc-default-executor-2 : INFO com.tableausoftware.jdbc.DataInserter - [Time] DataInserter: Total time spent binding 0 rows: 0,000000 sec.
2023-12-04 21:15:34.364 +0300 (,,,,2,27) grpc-default-executor-2 : INFO com.tableausoftware.jdbc.DataInserter - [Time] DataInserter: Total driver time spent inserting 0 rows: 0,000000 sec.
2023-12-04 21:15:34.369 +0300 (,,,,2,27) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 27 /endInsertData.
2023-12-04 21:15:34.371 +0300 (,,,,2,28) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 28 /runQuery.
2023-12-04 21:15:34.371 +0300 (,,,,2,28) grpc-default-executor-2 : INFO com.tableau.connect.service.ProtocolService - Running query
DROP TABLE "#Tableau______DBA_A___AC___B__A_______DAF__D____1_Connect_Check"
2023-12-04 21:15:34.371 +0300 (,,,,2,28) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 28 /runQuery.
2023-12-04 21:15:34.387 +0300 (,,,,2,28) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting max result buffer size to 322122547 bytes, 30% of the max heap size.
2023-12-04 21:15:34.387 +0300 (,,,,2,28) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting adaptive fetch size to 2000.
2023-12-04 21:15:34.387 +0300 (,,,,2,28) pool-6-thread-1 : INFO com.tableausoftware.data.ProtobufJDBCResultSet - BindingInfo{columnName='Success', columnTypeName='BOOLEAN', columnLabel='Success', columnType=16, precision=0, scale=0, columnDisplaySize=0, protobufType=BOOL, nullable=noNulls}
2023-12-04 21:15:34.389 +0300 (,,,,2,30) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 30 /closeQuery.
2023-12-04 21:15:34.392 +0300 (,,,,2,28) pool-6-thread-1 : INFO com.tableau.connect.service.QueryTask - Query task for protocol 2 completed.
2023-12-04 21:15:34.392 +0300 (,,,,2,30) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 30 /closeQuery.
2023-12-04 21:15:34.394 +0300 (,,,,2,31) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 31 /runQuery.
2023-12-04 21:15:34.394 +0300 (,,,,2,31) grpc-default-executor-2 : INFO com.tableau.connect.service.ProtocolService - Running query
SELECT "COL"
FROM (SELECT 1 AS "COL") AS "SUBQUERY"
2023-12-04 21:15:34.394 +0300 (,,,,2,31) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 31 /runQuery.
2023-12-04 21:15:34.410 +0300 (,,,,2,31) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting max result buffer size to 322122547 bytes, 30% of the max heap size.
2023-12-04 21:15:34.410 +0300 (,,,,2,31) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting adaptive fetch size to 2000.
2023-12-04 21:15:34.411 +0300 (,,,,2,31) pool-6-thread-1 : INFO com.tableausoftware.data.ProtobufJDBCResultSet - BindingInfo{columnName='COL', columnTypeName='INTEGER', columnLabel='COL', columnType=4, precision=0, scale=0, columnDisplaySize=0, protobufType=LONG, nullable=noNulls}
2023-12-04 21:15:34.414 +0300 (,,,,2,33) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 33 /closeQuery.
2023-12-04 21:15:34.416 +0300 (,,,,2,31) pool-6-thread-1 : INFO com.tableau.connect.service.QueryTask - Query task for protocol 2 completed.
2023-12-04 21:15:34.417 +0300 (,,,,2,33) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 33 /closeQuery.
2023-12-04 21:15:34.418 +0300 (,,,,2,34) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 34 /runQuery.
2023-12-04 21:15:34.418 +0300 (,,,,2,34) grpc-default-executor-2 : INFO com.tableau.connect.service.ProtocolService - Running query
SELECT "COL"
FROM (SELECT 1 AS "COL") AS "CHECKTOP"
LIMIT 1
2023-12-04 21:15:34.419 +0300 (,,,,2,34) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 34 /runQuery.
2023-12-04 21:15:34.436 +0300 (,,,,2,34) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting max result buffer size to 322122547 bytes, 30% of the max heap size.
2023-12-04 21:15:34.436 +0300 (,,,,2,34) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting adaptive fetch size to 2000.
2023-12-04 21:15:34.436 +0300 (,,,,2,34) pool-6-thread-1 : INFO com.tableausoftware.data.ProtobufJDBCResultSet - BindingInfo{columnName='COL', columnTypeName='INTEGER', columnLabel='COL', columnType=4, precision=0, scale=0, columnDisplaySize=0, protobufType=LONG, nullable=noNulls}
2023-12-04 21:15:34.439 +0300 (,,,,2,36) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 36 /closeQuery.
2023-12-04 21:15:34.441 +0300 (,,,,2,34) pool-6-thread-1 : INFO com.tableau.connect.service.QueryTask - Query task for protocol 2 completed.
2023-12-04 21:15:34.442 +0300 (,,,,2,36) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 36 /closeQuery.
2023-12-04 21:15:34.444 +0300 (,,,,2,37) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 37 /runQuery.
2023-12-04 21:15:34.444 +0300 (,,,,2,37) grpc-default-executor-2 : INFO com.tableau.connect.service.ProtocolService - Running query
SELECT "SUBCOL" AS "COL"
FROM (
SELECT 1 AS "SUBCOL"
) "SUBQUERY"
GROUP BY 1
2023-12-04 21:15:34.444 +0300 (,,,,2,37) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 37 /runQuery.
2023-12-04 21:15:34.460 +0300 (,,,,2,37) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting max result buffer size to 322122547 bytes, 30% of the max heap size.
2023-12-04 21:15:34.460 +0300 (,,,,2,37) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting adaptive fetch size to 2000.
2023-12-04 21:15:34.460 +0300 (,,,,2,37) pool-6-thread-1 : INFO com.tableausoftware.data.ProtobufJDBCResultSet - BindingInfo{columnName='COL', columnTypeName='INTEGER', columnLabel='COL', columnType=4, precision=0, scale=0, columnDisplaySize=0, protobufType=LONG, nullable=noNulls}
2023-12-04 21:15:34.463 +0300 (,,,,2,39) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 39 /closeQuery.
2023-12-04 21:15:34.465 +0300 (,,,,2,37) pool-6-thread-1 : INFO com.tableau.connect.service.QueryTask - Query task for protocol 2 completed.
2023-12-04 21:15:34.465 +0300 (,,,,2,39) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 39 /closeQuery.
2023-12-04 21:15:34.467 +0300 (,,,,2,40) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 40 /runQuery.
2023-12-04 21:15:34.467 +0300 (,,,,2,40) grpc-default-executor-2 : INFO com.tableau.connect.service.ProtocolService - Running query
SELECT "SUBCOL" AS "COL"
FROM (
SELECT 1 AS "SUBCOL"
) "SUBQUERY"
GROUP BY 2
2023-12-04 21:15:34.467 +0300 (,,,,2,40) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 40 /runQuery.
2023-12-04 21:15:34.472 +0300 (,,,,2,40) pool-6-thread-1 : ERROR com.tableausoftware.jdbc.JDBCProtocolImpl - Exception Error while executing SQL "SELECT "SUBCOL" AS "COL"
FROM (
SELECT 1 AS "SUBCOL"
) "SUBQUERY"
GROUP BY 2": Can't prepare statement: 'SELECT "SUBCOL" AS "COL"
FROM (
SELECT 1 AS "SUBCOL"
) "SUBQUERY"
GROUP BY 2' - Error: Binder Error: GROUP BY term out of range - should be between 1 and 1 for query:
SELECT "SUBCOL" AS "COL"
FROM (
SELECT 1 AS "SUBCOL"
) "SUBQUERY"
GROUP BY 2
2023-12-04 21:15:34.472 +0300 (,,,,2,40) pool-6-thread-1 : ERROR com.tableau.connect.service.QueryTask - Query for protocol 2 exiting with error class java.sql.SQLException
2023-12-04 21:15:34.472 +0300 (,,,,2,41) grpc-default-executor-2 : ERROR com.tableau.connect.grpc.GrpcProtocolService - Failed in fetchResults. SQLState=null, ErrorCode=0.
java.sql.SQLException: Error while executing SQL "SELECT "SUBCOL" AS "COL"
FROM (
SELECT 1 AS "SUBCOL"
) "SUBQUERY"
GROUP BY 2": Can't prepare statement: 'SELECT "SUBCOL" AS "COL"
FROM (
SELECT 1 AS "SUBCOL"
) "SUBQUERY"
GROUP BY 2' - Error: Binder Error: GROUP BY term out of range - should be between 1 and 1
at cfjd.org.apache.calcite.avatica.Helper.createException(Helper.java:56) ~[?:?]
at cfjd.org.apache.calcite.avatica.Helper.createException(Helper.java:41) ~[?:?]
at cfjd.org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:163) ~[?:?]
at cfjd.org.apache.calcite.avatica.AvaticaStatement.execute(AvaticaStatement.java:217) ~[?:?]
at com.tableausoftware.jdbc.JDBCProtocolImpl.runQuery(JDBCProtocolImpl.java:595) ~[jdbcserver.jar:5.23.0]
at com.tableausoftware.jdbc.JDBCProtocolImpl.runQuery(JDBCProtocolImpl.java:655) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.service.QueryTask.readData(QueryTask.java:124) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.service.QueryTask.call(QueryTask.java:91) ~[jdbcserver.jar:5.23.0]
at com.tableau.connect.service.QueryTask.call(QueryTask.java:41) ~[jdbcserver.jar:5.23.0]
at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
at java.lang.Thread.run(Unknown Source) ~[?:?]
Caused by: cfjd.org.apache.arrow.flight.FlightRuntimeException: Can't prepare statement: 'SELECT "SUBCOL" AS "COL"
FROM (
SELECT 1 AS "SUBCOL"
) "SUBQUERY"
GROUP BY 2' - Error: Binder Error: GROUP BY term out of range - should be between 1 and 1
at cfjd.org.apache.arrow.flight.CallStatus.toRuntimeException(CallStatus.java:131) ~[?:?]
at cfjd.org.apache.arrow.flight.grpc.StatusUtils.fromGrpcRuntimeException(StatusUtils.java:164) ~[?:?]
at cfjd.org.apache.arrow.flight.grpc.StatusUtils$1.next(StatusUtils.java:250) ~[?:?]
at cfjd.org.apache.arrow.flight.sql.FlightSqlClient$PreparedStatement.<init>(FlightSqlClient.java:912) ~[?:?]
at cfjd.org.apache.arrow.flight.sql.FlightSqlClient.prepare(FlightSqlClient.java:724) ~[?:?]
at cfjd.org.apache.arrow.flight.sql.FlightSqlClient.prepare(FlightSqlClient.java:704) ~[?:?]
at org.apache.arrow.driver.jdbc.client.ArrowFlightSqlClientHandler.prepare(ArrowFlightSqlClientHandler.java:170) ~[?:?]
at org.apache.arrow.driver.jdbc.ArrowFlightMetaImpl.prepareAndExecute(ArrowFlightMetaImpl.java:144) ~[?:?]
at cfjd.org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675) ~[?:?]
at cfjd.org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156) ~[?:?]
... 10 more
2023-12-04 21:15:34.475 +0300 (,,,,2,42) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 42 /isConnected.
2023-12-04 21:15:34.475 +0300 (,,,,2,42) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 42 /isConnected.
2023-12-04 21:15:34.476 +0300 (,,,,2,43) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 43 /closeQuery.
2023-12-04 21:15:34.476 +0300 (,,,,2,43) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 43 /closeQuery.
2023-12-04 21:15:34.483 +0300 (,,,,2,44) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 44 /enumerateNames.
2023-12-04 21:15:34.500 +0300 (,,,,2,44) grpc-default-executor-2 : ERROR com.tableausoftware.jdbc.JDBCProtocolImpl - Exception in getCatalogs: Failed to transform VectorSchemaRoot.
2023-12-04 21:15:34.501 +0300 (,,,,2,44) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 44 /enumerateNames.
2023-12-04 21:15:34.502 +0300 (,,,,2,45) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 45 /enumerateNames.
2023-12-04 21:15:34.515 +0300 (,,,,2,45) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 45 /enumerateNames.
2023-12-04 21:15:34.516 +0300 (,,,,2,46) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 46 /setCapability.
2023-12-04 21:15:34.516 +0300 (,,,,2,46) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 46 /setCapability.
2023-12-04 21:15:34.517 +0300 (,,,,2,47) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 47 /enumerateNames.
2023-12-04 21:15:34.548 +0300 (,,,,2,47) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 47 /enumerateNames.
2023-12-04 21:15:34.588 +0300 (,,,,2,48) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 48 /runQuery.
2023-12-04 21:15:34.588 +0300 (,,,,2,48) grpc-default-executor-2 : INFO com.tableau.connect.service.ProtocolService - Running query
SELECT 1
2023-12-04 21:15:34.589 +0300 (,,,,2,48) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 48 /runQuery.
2023-12-04 21:15:34.607 +0300 (,,,,2,48) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting max result buffer size to 322122547 bytes, 30% of the max heap size.
2023-12-04 21:15:34.607 +0300 (,,,,2,48) pool-6-thread-1 : INFO com.tableausoftware.jdbc.FetchSizeHelpers - Setting adaptive fetch size to 2000.
2023-12-04 21:15:34.607 +0300 (,,,,2,48) pool-6-thread-1 : INFO com.tableausoftware.data.ProtobufJDBCResultSet - BindingInfo{columnName='1', columnTypeName='INTEGER', columnLabel='1', columnType=4, precision=0, scale=0, columnDisplaySize=0, protobufType=LONG, nullable=noNulls}
2023-12-04 21:15:34.610 +0300 (,,,,2,50) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - Start local request 50 /closeQuery.
2023-12-04 21:15:34.612 +0300 (,,,,2,48) pool-6-thread-1 : INFO com.tableau.connect.service.QueryTask - Query task for protocol 2 completed.
2023-12-04 21:15:34.613 +0300 (,,,,2,50) grpc-default-executor-2 : INFO com.tableau.connect.grpc.GrpcProtocolService - End local request 50 /closeQuery.
it is normal that tableau trying to create some temp tables inside DB. So it is normal for it.
But not normal that it can't read tables.
tried to save it in tableau data source format (file type .tds ) ... here it is:
but nothing more.
<?xml version='1.0' encoding='utf-8' ?>
<!-- build 20233.23.1017.0948 -->
<datasource formatted-name='test' inline='true' source-platform='mac' version='18.1' xmlns:user='http://www.tableausoftware.com/xml/user'>
<document-format-change-manifest>
<_.fcp.ObjectModelEncapsulateLegacy.true...ObjectModelEncapsulateLegacy />
<_.fcp.SchemaViewerObjectModel.true...SchemaViewerObjectModel />
</document-format-change-manifest>
<connection class='federated'>
<named-connections>
<named-connection caption='flight_test' name='genericjdbc.12hwsjw1gsbpsm18opwlx1c1c0sg'>
<connection class='genericjdbc' dbname='main' dialect='postgres' jdbcproperties='' jdbcurl='jdbc:arrow-flight-sql://localhost:31337?useEncryption=true&user=flight_username&password=flight_password&disableCertificateVerification=true&token=null' port='31337' schema='main' server='localhost' username='flight_username' warehouse=''>
<connection-customization class='genericjdbc' enabled='false' version='18.1'>
<vendor name='genericjdbc' />
<driver name='arrow-flight-sql' />
<customizations>
<customization name='CAP_CONNECT_CUSTOM_SQL_WITHOUT_SCHEMA' value='no' />
<customization name='CAP_CREATE_TEMP_TABLES' value='no' />
<customization name='CAP_CUSTOM_NOSQL' value='no' />
<customization name='CAP_EXTRACT_ONLY' value='no' />
<customization name='CAP_ISOLATION_LEVEL_READ_COMMITTED' value='no' />
<customization name='CAP_ISOLATION_LEVEL_READ_UNCOMMITTED' value='no' />
<customization name='CAP_ISOLATION_LEVEL_REPEATABLE_READS' value='no' />
<customization name='CAP_ISOLATION_LEVEL_SERIALIZABLE' value='no' />
<customization name='CAP_JDBC_BIND_DETECT_ALIAS_CASE_FOLDING' value='no' />
<customization name='CAP_JDBC_SUPPRESS_EMPTY_CATALOG_NAME' value='no' />
<customization name='CAP_JDBC_SUPPRESS_ENUMERATE_DATABASES' value='no' />
<customization name='CAP_JDBC_SUPPRESS_ENUMERATE_SCHEMAS' value='no' />
<customization name='CAP_JDBC_SUPPRESS_ENUMERATE_TABLES' value='no' />
<customization name='CAP_QUERY_BOOLEXPR_TO_INTEXPR' value='yes' />
<customization name='CAP_QUERY_FROM_REQUIRES_ALIAS' value='no' />
<customization name='CAP_QUERY_GROUP_ALLOW_DUPLICATES' value='yes' />
<customization name='CAP_QUERY_GROUP_BY_ALIAS' value='no' />
<customization name='CAP_QUERY_GROUP_BY_DEGREE' value='yes' />
<customization name='CAP_QUERY_HAVING_REQUIRES_GROUP_BY' value='no' />
<customization name='CAP_QUERY_HAVING_UNSUPPORTED' value='no' />
<customization name='CAP_QUERY_JOIN_ACROSS_SCHEMAS' value='no' />
<customization name='CAP_QUERY_JOIN_REQUIRES_SCOPE' value='no' />
<customization name='CAP_QUERY_NULL_REQUIRES_CAST' value='no' />
<customization name='CAP_QUERY_SELECT_ALIASES_SORTED' value='yes' />
<customization name='CAP_QUERY_SORT_BY_DEGREE' value='yes' />
<customization name='CAP_QUERY_SUBQUERIES' value='yes' />
<customization name='CAP_QUERY_SUBQUERIES_WITH_TOP' value='yes' />
<customization name='CAP_QUERY_SUBQUERY_QUERY_CONTEXT' value='yes' />
<customization name='CAP_QUERY_TOPSTYLE_LIMIT' value='no' />
<customization name='CAP_QUERY_TOPSTYLE_ROWNUM' value='no' />
<customization name='CAP_QUERY_TOPSTYLE_TOP' value='yes' />
<customization name='CAP_QUERY_TOP_0_METADATA' value='no' />
<customization name='CAP_QUERY_TOP_N' value='yes' />
<customization name='CAP_QUERY_WHERE_FALSE_METADATA' value='no' />
<customization name='CAP_SELECT_INTO' value='yes' />
<customization name='CAP_SELECT_TOP_INTO' value='yes' />
<customization name='CAP_SET_ISOLATION_LEVEL_VIA_ODBC_API' value='no' />
<customization name='CAP_SET_ISOLATION_LEVEL_VIA_SQL' value='no' />
<customization name='CAP_SUPPRESS_CONNECTION_POOLING' value='no' />
<customization name='CAP_SUPPRESS_DISCOVERY_QUERIES' value='no' />
</customizations>
</connection-customization>
</connection>
</named-connection>
</named-connections>
</connection>
<layout _.fcp.SchemaViewerObjectModel.false...dim-percentage='0.5' _.fcp.SchemaViewerObjectModel.false...measure-percentage='0.4' dim-ordering='alphabetic' measure-ordering='alphabetic' show-structure='true' />
<semantic-values>
<semantic-value key='[Country].[Name]' value='"United States"' />
</semantic-values>
<_.fcp.ObjectModelEncapsulateLegacy.true...object-graph />
</datasource>
hi @YuriyGavrilov - unfortunately, my Tableau trial license expired - so I'm unable to test things with it now. Before it expired, I believe I had it all working with the Arrow Flight SQL JDBC driver version: 14.0.1
, however. I chose the PostgreSQL dialect - and I was able to view tables, etc. - but I didn't capture screenshots, unfortunately.
I wish I could help more, but it may take me a while to get a Tableau license...
it't ok. @prmoore77
for the 14.0.1 I get this message.
I ve download it with this artifact:
<dependency>
<groupId>org.apache.arrow</groupId>
<artifactId>flight-sql-jdbc-driver</artifactId>
<version>14.0.1</version>
</dependency>
it works fine in dbeaver.
I'm running macOS - and I had to put the driver jar file in: ~/Library/Tableau/Drivers
- I'm not sure if that applies here...
I use this doc to locate it https://help.tableau.com/current/pro/desktop/en-us/examples_otherdatabases_jdbc.htm?_gl=1*13o39fp*_ga*NjU2NzcyNDc5LjE3MDA5NDA1MDc.*_ga_8YLN0SNXVS*MTcwMTcyNTgzOS41LjEuMTcwMTcyNTg3MS4wLjAuMA..
Specify the right JDBC driver
JDBC drivers are self-contained .jar files. Place the .jar files in the folder for your operating system. (You need to create the folder if it doesn't already exist.)
Windows: C:\Program Files\Tableau\Drivers
Mac: ~/Library/Tableau/Drivers
Linux: /opt/tableau/tableau_driver/jdbc
I also use Mac OS
Did you remove other versions of the driver? Maybe there can only be one version in the folder...
Oh - also, I think you can now remove the &token=null
from the JDBC url (since we updated the code)...
Did you remove other versions of the driver? Maybe there can only be one version in the folder...
Yep, sure
@prmoore77 Finally I run flight sql, but with kamu-cli project ... to be sure that tableau is working.
tables showed properly and with sql92 dialect. (ok, 98% properly :), some sql errors still exist
based on this example https://github.com/kamu-data/kamu-cli/tree/master/examples/trading
and run this
cd trading
kamu init
kamu add . --recursive
kamu pull --all
kamu sql server --flight-sql
Connect using URL: jdbc:arrow-flight-sql://127.0.0.1:10000?useEncryption=false
Use 'kamu' as login and password
@YuriyGavrilov - oh ok - there must be something in the kamu version of Flight SQL that we need to emulate here for DuckDB...
By the way - that kamu
tool looks very cool! Thanks for sharing.
hi @YuriyGavrilov - I got a Tableau license - and tested with the default TPC-H database that comes with the docker image for this example Flight SQL server.
I started the Flight SQL server with:
docker run --name flight-sql \
--detach \
--rm \
--tty \
--init \
--publish 31337:31337 \
--env FLIGHT_PASSWORD="flight_password" \
--env PRINT_QUERIES="1" \
--pull missing \
voltrondata/flight-sql:latest
I am using the 14.0.2 JDBC driver version - with JDBC url: jdbc:arrow-flight-sql://localhost:31337?useEncryption=true&disableCertificateVerification=true
I choose: PostgreSQL
dialect - and it seems that all is working:
Can you verify on your end?
@prmoore77 Yep, sure I will. Are you use Mac OS or Win?