I have encountered some problems. Here is my setup:
I have a 6 worket HDP 2.5.3. I have created the CORP.tables and data and tested through DBVisualizer (pheonix-thin) and Zeppelin notebook. Queries against the tables work just fine.
Windows Server 2012 R2 on VM-ware Fusion with Tableau Desktop 10. I place the tableau.tdc file in the Current User\Documents\My Tableau Repository\Datasources as per instructions.
SELECT "PRODUCT"."PRODUCT_CLASS_ID" AS "PRODUCT_CLASS_ID" FROM "CORP"."CUSTOMER" "CUSTOMER" INNER JOIN "CORP"."FACT_SALES" "FACT_SALES" ON ("CUSTOMER"."CUSTOMER_ID" = "FACT_SALES"."CUSTOMER_ID") INNER JOIN "CORP"."PRODUCT" "PRODUCT" ON ("FACT_SALES"."PRODUCT_ID" = "PRODUCT"."PRODUCT_ID") INNER JOIN "CORP"."STORE" "STORE" ON ("FACT_SALES"."STORE_ID" = "STORE"."STORE_ID") GROUP BY "PRODUCT_CLASS_ID"
ERROR 502 (42702): Column reference ambiguous or duplicate names. columnName=PRODUCT_CLASS_ID class org.apache.phoenix.schema.AmbiguousColumnException...
Query runs fine.
I found the problem. Somehow the tableau .tdc file was corrupt. I replace its content with the XML from the Git repo and everything works fine. Quite excited - response times on a 10mil file are very good (if properly indexed :).
There is a problem when proxying the ODBC traffic through Knox to the PQS. The PQS fails to parse the request because the http request coming out of ODBC is not urlencoded, but the content is urlencoded after Knox.
After tracing all the calls, it seems that it is caused by ODBC driver sending out Avatica Http request with content-type set to "application/x-www-form-urlencoded”, even though the content is NOT urlencoded at all. But, when the request passes through Knox, it comes out as urlencoded.
The PQS seems not able to parse urlencoded content. It seems to take the input as it is for both Protobuf and JSON.
In comparison, the jdbc thin driver sends out http request with content-type “application/octet-stream” which seems more appropriate.
Is there any way to change the content type of ODBC driver to use content type “application/octet-stream” instead since the content is not urlencoded?
This driver is totally useless for inserts. It does not support batch upserts. JDBC driver supports batch upserts either via batchUpsert for series of upserts followed by commit.