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

Some bug with "Detail: Unauthenticated Invalid bearer token provided. Detail: Unauthenticated" #11

Closed
YuriyGavrilov opened this issue Nov 6, 2023 · 26 comments

Comments

@YuriyGavrilov
Copy link

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.
Снимок экрана 2023-11-06 в 22 10 09

@prmoore77
Copy link
Collaborator

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?

@prmoore77
Copy link
Collaborator

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...

@prmoore77
Copy link
Collaborator

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....

@YuriyGavrilov
Copy link
Author

YuriyGavrilov commented Nov 30, 2023

@prmoore77 it seems I broke everything in my environment. receive

Снимок экрана 2023-12-01 в 00 21 45 even in dbeaver.

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


@prmoore77
Copy link
Collaborator

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...

@prmoore77
Copy link
Collaborator

The &token=null thing only worked in Tableau for me. It seems DBeaver sends in a string value of 'null'

@prmoore77
Copy link
Collaborator

@YuriyGavrilov - I believe I've fixed the issue. Could you validate?

@YuriyGavrilov
Copy link
Author

Yep, I'm sure it's true. Will fix my environment and retest. Many thx 🙏 for your help @prmoore77

@YuriyGavrilov
Copy link
Author

@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)

@prmoore77
Copy link
Collaborator

@YuriyGavrilov - by the way - is your solution now working ok? I just wanted to follow up... Thanks.

@YuriyGavrilov
Copy link
Author

@prmoore77 plan to test it today evening... will come back to you after.

@YuriyGavrilov
Copy link
Author

@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 12 23
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.

Снимок экрана 2023-12-04 в 21 20 41

@YuriyGavrilov
Copy link
Author

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&amp;user=flight_username&amp;password=flight_password&amp;disableCertificateVerification=true&amp;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='&quot;United States&quot;' />
  </semantic-values>
  <_.fcp.ObjectModelEncapsulateLegacy.true...object-graph />
</datasource>

@prmoore77
Copy link
Collaborator

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...

@YuriyGavrilov
Copy link
Author

it't ok. @prmoore77

for the 14.0.1 I get this message.

Снимок экрана 2023-12-05 в 00 14 56 Снимок экрана 2023-12-05 в 00 16 38

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.

@prmoore77
Copy link
Collaborator

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...

@YuriyGavrilov
Copy link
Author

YuriyGavrilov commented Dec 4, 2023

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

@prmoore77
Copy link
Collaborator

Did you remove other versions of the driver? Maybe there can only be one version in the folder...

@prmoore77
Copy link
Collaborator

Oh - also, I think you can now remove the &token=null from the JDBC url (since we updated the code)...

@YuriyGavrilov
Copy link
Author

Did you remove other versions of the driver? Maybe there can only be one version in the folder...

Yep, sure

@YuriyGavrilov
Copy link
Author

@prmoore77 Finally I run flight sql, but with kamu-cli project ... to be sure that tableau is working.

Снимок экрана 2023-12-05 в 23 05 56

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

@prmoore77
Copy link
Collaborator

prmoore77 commented Dec 5, 2023

@YuriyGavrilov - oh ok - there must be something in the kamu version of Flight SQL that we need to emulate here for DuckDB...

@prmoore77
Copy link
Collaborator

By the way - that kamu tool looks very cool! Thanks for sharing.

@prmoore77
Copy link
Collaborator

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:
Screenshot 2023-12-20 at 11 32 11 AM

Can you verify on your end?

@YuriyGavrilov
Copy link
Author

YuriyGavrilov commented Dec 20, 2023

@prmoore77 Yep, sure I will. Are you use Mac OS or Win?

@prmoore77
Copy link
Collaborator

prmoore77 commented Dec 20, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants