voltrondata / flight-sql-server-example

An example Flight SQL Server implementation - with DuckDB and SQLite back-ends.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

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

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

Снимок экрана 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


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

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>

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.

Снимок экрана 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.

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.

Снимок экрана 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

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

Can you verify on your end?

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