GithubHelp home page GithubHelp logo

tableau / connector-plugin-sdk Goto Github PK

View Code? Open in Web Editor NEW
102.0 32.0 105.0 28.12 MB

SDK for Developing Tableau Connector Plugins

Home Page: https://tableau.github.io/connector-plugin-sdk/

License: MIT License

Python 98.42% Shell 0.03% JavaScript 1.55%
tableau tableau-connector tableau-taco

connector-plugin-sdk's Introduction

Tableau Connector SDK

Tableau Supported Connector Packaging CI Status TDVT CI Status

This project consists of documentation, example files, the Tableau Datasource Verification Tool (TDVT) test harness, and a packaging tool that you can use to build and customize a Tableau Connector that uses an ODBC or JDBC driver.

The latest version of the SDK is always targeted towards the latest, non-beta version of Tableau. Right now, this is Tableau Desktop/Server 2024.1. This means that the samples may not work on older versions of Tableau, and connectors packaged with newer versions of the SDK may not work in older versions of Tableau. You can download past releases of the SDK to work with older versions of Tableau if necessary.

Tool Latest Version
Connector SDK for Tableau 2023.3 03-26-2024
Connector SDK for Tableau 2023.2 11-06-2023
Connector SDK for Tableau 2023.1 06-15-2023
Connector SDK for Tableau 2022.4 03-15-2023
Connector SDK for Tableau 2022.3 12-14-2022
Connector SDK for Tableau 2022.2 10-18-2022
Connector SDK for Tableau 2022.1 06-29-2022
Connector SDK for Tableau 2021.4 03-31-2022
Connector SDK for Tableau 2021.3 12-15-2021
Connector SDK for Tableau 2021.2 09-09-2021
Connector SDK for Tableau 2021.1 07-14-2021
Connector SDK for Tableau 2020.4 03-29-2021
Connector SDK for Tableau 2020.3 12-07-2020
Connector SDK for Tableau 2020.2 8-12-2020
Connector SDK for Tableau 2020.1 5-08-2020
Connector SDK for Tableau 2019.4 3-13-2020
Connector Packager SDK (Beta) for Tableau 2019.3 12-11-2019
TDVT 2.7.0 (10-28-2022)
1.5.24 (04-13-2020)
Connector Packager 2.1.0 (05-08-2020)

Why Connectors?

At Tableau, we pride ourselves in helping people see and understand their data... wherever it may be. A key investment for us has been creating a way to enable both partners and customers help us in this mission. Thank you for expressing your interest in joining us on that mission. On behalf of the Connectivity team at Tableau, I’d like to announce the early release of our Connector SDK!

Get started

Review the Tableau Connector SDK developer guide to help you design, build, and test your connector.

You can also watch our Tableau Conference 2019 talk, where two of our developers walk through the basics of creating a custom Tableau connector and packaging it into a single .taco file.

Samples

The SDK includes several standalone example connectors that use ODBC and JDBC.

Prerequisites

To work with connectors, you need the following:

  • Windows or Mac
  • Tableau Desktop or Server 2020.4
  • Python 3.9 or higher
  • An ODBC or JDBC data source and driver
  • The provided test data loaded in your data source

To package the connector into a .taco file, you will also need:

  • JDK 8 or higher

For a JDBC connector, your driver must fulfill the following requirements:

  • You must have read permissions on the .jar file.
  • Tableau requires a JDBC 4.0 or later driver.
  • Tableau requires a Type 4 JDBC driver.

Get Help

This SDK is supported, so if you have problems getting the test harness set up, find defects, or have questions related to the configuration or testing of your connector:

  • Start by submitting a GitHub Issue here in this project
  • or you can reach us on the Developer Forums in Tableau Community.

FAQ

If I build a connector, will Tableau include it?

Not necessarily. We plan to include connectors on a case by case basis. The work needed to include connectors with a shipping Tableau product extends well beyond the code itself and into continuous integration and supportability concerns. We have included a few partner built connectors, and we are looking at providing a way to include third-party connectors in the future through some exciting new features, as well as a more formal validation program. Make sure to get in touch with our Technology Partner team for the latest news: https://www.tableau.com/partners/become?data=technology

Why would I build a connector instead of just telling users to use the Other Databases (ODBC/JDBC) connector?

Connectors allow for a much more extensive level of customization than using the generic Other Databases (ODBC/JDBC) connector does. When you build a connector, it's possible to apply many of the optimizations that current "native" connectors in Tableau use.

Can I make a connector for OLAP Cubes, file-based, or REST API-based connections? We intend for the Connector SDK to eventually support additional connector types, but we're starting with ODBC and JDBC.

How do I distribute a connector to my customers? Starting with Tableau 2019.4, you can package and sign your connector using a public certificate: https://tableau.github.io/connector-plugin-sdk/docs/package-sign

To run your packaged connector, Simply drop the .taco file, into your "My Tableau Respository/Connectors" folder: https://tableau.github.io/connector-plugin-sdk/docs/run-taco

What types of things might change that impact my connector development? Many things might change, but the most likely changes are how a connector is packaged, and the extension points for new Auth Modes like Kerberos or OAuth. We highly encourage you to sign up here in GitHub or email us to get the latest information. Partners participating in the open sprint demos will get notice of any breaking changes in real-time.

Visit the project website and documentation here.

Known Issues

Current

Support links that are not fully qualified throw error when clicked on Support links that are not fully qualified (ie include the https:// header) will throw an error when the user clicks on them. This only affects in-development connectors, as we check for this when packaging a connector into a Taco.

Fixed

(Mac Only) Packaged Connectors (.taco files) throws unexpected error in 2019.4 You can work around this by skipping signature verification with the command line argument -DDisableVerifyConnectorPluginSignature=true. Fixed in 2019.4.1.

The properties builder JavaScript truncates values containing the equals sign '=' in 2019.4 A bug in the JavaScript translation layer means that you cannot return values containing the '=' character from the JavaScript properties builder. Fixed in 2019.4.1.

Contributions

Code contributions and improvements by the community are welcomed! See the LICENSE file for current open-source licensing and use information.

Before we can accept pull requests from contributors, we require a signed Contributor License Agreement (CLA)

connector-plugin-sdk's People

Contributors

atalukdar123 avatar chrisjunlee avatar danliusf avatar devanshsoni9 avatar erademacher avatar ethan-pyke avatar gs-manvig avatar icooptableau avatar jainam1995 avatar jd-dean avatar jinli-dev avatar jkoskela avatar jordanw-bq avatar kpwilson avatar krhodes-tableau avatar lingyanyin avatar liyunbao avatar lukewrites avatar pvanderknyff avatar rosswbrown avatar saugatt avatar sidwray avatar sonia0504 avatar sonia9703 avatar suwei111333 avatar sxlin avatar tabsdavis avatar tsjoblad avatar wangxinlei avatar yellowyou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

connector-plugin-sdk's Issues

Stored procedures via ODBC now possible?

Name: Bob Looney
Company: Senturus

We're looking to support stored procedures via an odbc based connector plugin. Is this possible?

We see that we can set the capability CAP_CONNECT_STORED_PROCEDURE. Do we then just need to support ODBC's SQLProcedures and SQLProcedureColumns methods in order for this feature to work? Anything else?

I know the plugin drives partly off the underlying connection type, and I didn't think Tableau's ODBC connector supports stored procedures based on this support file (only SAP, SQL Server, Teradata, and Oracle connectors):
https://onlinehelp.tableau.com/current/pro/desktop/en-gb/connect_basic_stored_procedures.htm

Just making sure this is possible before we invest the time and if anything unique to Tableau is needed to make this work. Thanks!

Other errors in TDVT

I have many TDVT queries that their Error Message and Error Type (in the combined output file) say "Error.". They are all of Test Type = "expression".
How do I find what is the issue?

Kerberos Authentication Examples

Hi Logan,
Thanks for publishing detailed article and example provided. I managed to use the Postgres example and build a mysql connector to connect to MEMSQL. I am currently trying to add Kerberos authentication and wanted to check if you could either share example or SDK documentation?

Multiple authentication option in Dialog

Hi,

Like what we can see in Hortonworks Hadoop connector I want to design dialog with a ComboBox choose the authentication type from and each type should have specific fields that will be shown in the dialog if the realted type is chosen. For example if "username and password" type was set on the ComboBox just username and password field should be shown to the user.
Currently the following is my .tcd file contents"
`

<authentication-mode value='ComboBox' />
<authentication-options>
  <option name="UsernameAndPassword" />
  <option name="Username" />
  <option name="No Authentication" />
</authentication-options>
<db-name-prompt value="Database: " />
<has-pre-connect-database value="true" />
<port-prompt value="Port: " default="1234" />
` The above .tcd file just show the ComboBox field which I can choose the options there but for all options just username and password field will be shown. I wanted to have specific fields for each type of the UsernameAndPassword, Username and No Authentication.

How can I design such a form?

2019.2 Beta Appears to try to load built-in plugins twice

{"ts":"2019-04-28T22:05:20.586","pid":17338,"tid":"41ee7b","sev":"error","req":"-","sess":"-","site":"-","user":"-","k":"connector-plugin-error","e":{"log-code":"0e9acd07","log-source":"needs-classification"},"v":"Class already registered: memsql"}

DOCS: confusing default dialect

I am testing a JDBC connector I'm working on and I get mixed results based on the base dialects I'm using in my tests.

According to the documentation here:

base N Specifies a base dialect to build upon. If a certain property or function isn’t defined in a dialect definition file, the connector will fall back to its base dialect’s behavior if a base is defined, and SQL-92 default behavior if there is no base. Important: This must be a valid, existing dialect. If the specified base does not exist, the connector will fail to load. For a list of bases, see Dialect base classes.

My dialect.tdd file header is the following (and the rest of the file is empty):

<?xml version="1.0" encoding="utf-8"?>
<dialect name='Custom'
         class='custom_jdbc'
         version='18.1'>
		 <!--base='SQL92Dialect'-->
   <function-map>

Having the dialect.tdd file without a base (as shown above) my tests output:

Total time: 194.51126885414124
Total failed tests 633
Total tests ran 715

According to the documentation, if there is a base, that dialect will be used, if there is no base then SQL-92 default behavior is used. My second test was adding as base SQL92Dialect:

<?xml version="1.0" encoding="utf-8"?>
<dialect name='Custom'
         class='custom_jdbc'
         base='SQL92Dialect'
         version='18.1'>
		 <!---->
   <function-map>

This dialect is not listed here, but the tests ran and they generated a different output, even though I would have assumed (based on the docs) that the same dialect should have been used and, implicitly, the same output should have been generated:

Total time: 227.23913717269897
Total failed tests 690
Total tests ran 811

As you can see, the number of tests that ran is different, the same can be said about the number of failed tests.

  1. is the documentation correct regarding the base dialect fallback?
  2. is SQL92Dialect a valid base dialect? If it is, the statement saying SQL-92 default behavior is used means a different base dialect is used by default?
  3. in the samples one can find full_dialect.tdd file, but I would be interested in seeing other DBs dialects, for example PostgreSQL90Dialect. Are these available somewhere?

Many thanks.

Tableau does not attempt to load plugin, or insufficient debugging information on load

I have a fairly new attempt at a plugin and while 2019.1 and 2019.2 Beta load the shipped plugins fine I'm unable to get much debugging information out of the one I built. If the git repro repository is simply cloned from the following repository

https://github.com/jkew/airtable.tableau

I'll get an error about the .git directory:

{"ts":"2019-04-28T22:11:34.574","pid":17463,"tid":"4201b9","sev":"error","req":"-","sess":"-","site":"-","user":"-","k":"connector-plugin-error","e":{"log-code":"3834cf96","log-source":"needs-classification"},"v":"Failed to validate /Users/johnkew/Develop/airtable.tableau/.git"}

Removing that doesn't provide any additional insight into what went wrong though.

I'm using the following command line options:

/Applications/Tableau\ Desktop\ 2019.2.app/Contents/MacOS/Tableau -DConnectPluginsPath=/Users/johnkew/Develop/airtable.tableau/ -DLogLevel=Debug

Better classpath support

Currently we have to copy the JDBC jars to %ProgramFiles%\Tableau\Drivers. This raises certain issues:

  • It requires elevated privileges, which we'd like to avoid.
  • It may cause conflicts with other vendors drivers (all drivers in the same classpath)
  • We'd like to support side-by-side versions of our driver (e.g. bug fixes or performance enhancements).
    Proposed solution: If a user activates a custom connector, extend the JDBC classpath with that connector's classpath, either via a fixed folder (e.g. a 'jars' folder within the connector), or from some config file within the connector (which should be relative to the connector's location).

SDK docs don't give a minimum Tableau version

I can't find a reference to the minimum Tableau version needed anywhere in the docs. One good place to put it could be in the bulleted list under "Before you begin" at the bottom of the Get Started page. If it requires a pre-release version at this point, we might also want to link to the directions for getting a beta.

Hive Example with SSL

Hi

Can you please provide sample plugin with Hive authentication mode using SSL. Thanks

Cannot able to work with existing workbook directly

Started implementing Tableau plugin feature for our named connector. I have the following questions,

  1. When I open the saved workbook by double-click on the workbook, Tableau Desktop shows "Tableau doesn't recognize the data source type....". Every time I need to run Tableau using the "-DConnectPluginsPath" command-line argument and open the workbook from there. Is there any solution for that?

  2. We have existing workbooks that are all created using "Other Database(ODBC)" with our ODBC connector in the Tableau Desktop. How can we open and work with that existing workbook with the newly developed tableau plugin named connector?

Complex connection dialog options are missing

Hello,

I'm checking out the connector SDK and trying to build a small custom example. I noticed that the current examples contain very basic connection dialogs. Would it be possible to expose the full set of available options in Tableau? Also, can you add to the repository more complex examples that show how to make dropdowns, how to disable certain options when a particular field value is chosen, how to redirect connection to a web page etc?

Bogdan

Testing the connector in Desktop

I noticed that this line in the documentation

tableau.exe -DConnectPluginsPath =C:\tableau_connectors

should not have a space after DConnectPluginsPath.

I was able to get things working with this:

tableau.exe -DConnectPluginsPath=C:\tableau_connectors

Any ETA for this SDK?

Well, someone's got to file the first issue, so why not let it be the obvious question when we'll be able to see the actual SDK on this repo. The timing works really well for us so we're eager to get started.
Or should we really give you guys a chance to get home from New Orleans first? :-)

Add Generic UI form components

Generic TCD types with specified parameters would be useful for building and customizing UI:

String: Custom name, optional default value
Boolean: Custom name, optional default value
Int: Custom Name, optional default value
Enum: Custom Name, custom enum types, optional default value

Alternatives to the "-DConnectPluginsPath" command line arg

The problem with a command line arg is that the user has to launch tableau with it each time, instead of using the shortcut created by the installation.
We provide a batch script to simply this, which the user can shortcut, but it's a compromise.
Suggestion: if "-DConnectPluginsPath" is not specified, scan for plugins at "%USERPROFILE%\Documents\My Tableau Repository\Plugins" - standard tableau folder which does not require elevated permissions.

Connector plugins are not working with Tableau Server

I am following the same steps as given in the document to achieve connector in tableau server, but i'm getting below error. Please suggest

C:\Users\Administrator>tsm configuration set -k native_api.connect_plugins_path -v C:/tableau_connectors
Logging in as user 'Workstation\Administrator' since no --username flag was given.
Password:
Configuration error: At least one configuration value you specified does not match a known configuration key. This applies to the following keys: '[native_api.connect_plugins_path]'

Use this parameter to override unknown key error: --force-keys

Extended-properties does not work

I want to configure additional parameters in the dialog box. For this, I'm trying to use the extended-dialog option, but it doesn't seem to work:

ConnectionDialogParser::ParseDialog: Error: Error(15,23): element 'extended-properties' is not allowed for content model '(authentication-mode?,authentication-options?,connection-options?,db-name-prompt?,default-ssl-mode?,extended-properties?,has-databases?,has-pre-connect-database?,has-schemas?,port-prompt?,server-prompt?,service-prompt?,show-connection-prompt?,show-db-browse-button?,show-encryption-checkbox?,show-import-ssl-cert-label?,show-service-prompt?,show-ssl-checkbox?,show-uncommitted-data-checkbox?,ssl-requires-certificate?,warehouse-prompt?)' (id: )"}
{"ts":"2019-02-27T12:31:56.603","pid":7548,"tid":"af0","sev":"error","req":"-","sess":"-","site":"-","user":"-","k":"connector-plugin-error","e":{"category":"needs-classification","log-code":"0e9a4f13"},"v":"Error loading connection dialog file (.tcd) for class 'example'. Skipping plugin."}

TCD - any hooks for adding dynamic data into a dropdown?

Is there any way to take the username, password, and server from the dialog the TCD creates, then call an API / ODBC function, then update the TCD dialog with choices in a dropdown?

Or is there a way to override the browse action of the database browse button to do something like that?

Different data type after 'CASE WHEN xxx THEN' and 'ELSE'

About You:
Name: Jon
Company: MaxCompute

Your question:
Hi,

The test case 'logical.case.null' generates a SQL statements as follows:

SELECT (CASE WHEN ((8 + DATEDIFF(`calcs`.`date1`,NEXT_DAY(CAST(`calcs`.`date1` AS DATE),'SU'))) IN (7, 1)) THEN CAST(NULL AS TIMESTAMP) ELSE `calcs`.`date1` END) AS `temp_test__4257957843__0_`
FROM `odpsdemo_dev`.`calcs` `calcs`
GROUP BY (CASE WHEN ((8 + DATEDIFF(`calcs`.`date1`,NEXT_DAY(CAST(`calcs`.`date1` AS DATE),'SU'))) IN (7, 1)) THEN CAST(NULL AS TIMESTAMP) ELSE `calcs`.`date1` END)

The data type of the field after 'CASE WHEN xxx THEN' is TIMESTAMP while the data type of the field calcs.date1 after 'ELSE' is DATE.

We have tried to run the same query on hive and hive could not accept this query as well.

So, is it possible for us to safely skip this test case? Or if this test case is really important, what should we do to get it passed?

Thank you very much for your time!
Jon

Additional input types (other than string)

One of our fields is boolean. We'd like to somehow define it in the .tcd file and have it shown as a checkbox instead of a textbox where the user needs to type "true" or "false".

Unable to make the database optional?

We're trying to make the database name optional on our Connector.

We created the connectionRequired.js file...
image

We set it up in the TDR file...
image

But when we view the connector, it is always required / won't let you hit "Sign In" until you type in something.
image

(after you type a letter in database, the button enables)
image

Is this a bug or are we missing a trick?

JDBC Connectivity gives "An error occurred while communicating"

Describe the bug
We created a custom connector using the Actian JDBC Driver and found that JDBC Connectivity is inconsistent with many "Unable to complete action. An error occurred while communicating with the data source." errors. The connection is already established as it is able to obtain metadata.

Note that the same errors happen with the Generic JDBC option.

A couple of examples where the error occurs consistently:

  • data source data preview: When Clicking on the button labeled "Update Now":
Unable to complete action
An error occurred while communicating with the data source.
  • when trying to add a calculated field in a worksheet (dropping it in the sheet). The query that is given with the error message runs fine outside of Tableau:
An error occurred while communicating with data source 'my_table (actian)'.

Bad Connection: Tableau could not connect to the data source.
An error occurred while communicating with the data source.

SELECT 'test' AS "Calculation_3586272695231557632"
FROM "actian"."my_table" "my_table"
HAVING (COUNT(1) > 0)

Desktop (please complete the following information):

  • OS: Windows (10)
  • Tableau Version 2019.2.1

About you:
Name: Cris Ianculovici
Company: Actian

Support for CAP_QUERY_TOP_N

Name: Cris Ianculovici
Company: Actian

The Actian/Ingres query syntax supports the behavior required for CAP_QUERY_TOP_N=yes in the form of
SELECT FIRST n ... FROM ...
How can I get that to work?

Could not connect to MySQL data source

When all was configured according to the document, I run
python3 -m tdvt.tdvt --run test4dmp
to test mysql connector(via jdbc), however, the following error occur

hyperd server version 9.1.0 build version master.0.0.0.5690.r3a6612de
LoadDatasource TableauException:
Unable to establish connection: Data source "MySQL" is not licensed) 无法建立连接: 数据源“MySQL”未得到许可。

any wrong with my config?

Connector Plugin TDVT Issue.

I'm struggling with below error with custom named connector TDVT running some some Test Cases.

"LoadDatasource DataSourceException: Execution of a connector plugin script component exceeded the 3000ms timeout."

I'm using Tableau Main version and TDVT 1.4.4

Can you please help what changes i have to made.

Custom ordering of input fields in the dialog

We organized the fields in the .tcd files in a certain way (popular/required fields first, then the rest), but they're not displayed in the same order in the actual dialog.
We'd like them to be displayed in the same order, or alternatively a syntax to enforce order.

Appending to the default ODBC catalog content

Hi,
great to see the SDK is now available for public consumption / production. Building a simple connector wrapping an existing ODBC or JDBC driver seems straightforward (we'll be starting that very soon), but we're curious about possibilities to append additional information to the ODBC (or JDBC) catalog content that Tableau automatically retrieves once the connection has been established. More to the point, our database supports some back-end BI modeling capabilities of its own (dimension info, pretty names, ...) and we'd like to be able to leverage that metadata when Tableau builds a .tds file or at least the data source browser in which you build that.
Any suggestions on how we could inject that information are much appreciated.

Thanks,
benjamin

Errors in TDVT

I tun TDVT and have a long section of queries that end with an error -
Tableau was unable to generate a query to perform this operation.

How can I find the details why did that happen?
I am using a .tdd file

Mapping a TDVT query to a tdd section

Is there an easy way to understand how a query running through TDVT was formed so I can handle it with the right dialect section?
I have few queries that fail, but I do not know how to map them to the right element in the .tdd file. I am using the full tdd example.

Documentation improvement - String Extras to connectionBuilder.js

Since many of us are likely coming from the ODBC connector, one thing that wasn't clear right away is that all the "String Extras" should go into params in the connectionBuilder.js file.

Can you update this page, section 4 to speak more clearly to that for anyone else that runs into this issue?
https://tableau.github.io/connector-plugin-sdk/docs/example

Between the connection dialog options, manifest options, and connectionBuilder options all sounding very similar, its a bit hard to tell where each setting lands.

Disable "Server" field in Dialog

My airtable connector does not need a server field, because it is a well-known API endpoint. Is there a way to remove this from the dialog?

Disabling Initial SQL in Dialog

My Airtable connector cannot support initial sql right now, or at least it doesn't make sense within the context of this connection. Is there a way to disable it?

TDVT generates incorrect SQL with Hive12Dialect

About You:
Name: Jon
Company: Max compute

Your question:
Hi.

Thanks for providing Hive12Dialect! But with this dialect, it seems some generated SQL statement is not correct.

Here is the dialect we are using:

<?xml version="1.0" encoding="utf-8"?>
<dialect name='MaxCompute'
         class='maxcompute_jdbc'
         base='Hive12Dialect'
         version='18.1'>
  <function-map>
      <date-function name='DATENAME' return-type='str'>
      <formula part='year'>CAST(YEAR(%2) AS STRING)</formula>
      <formula part='quarter'>CAST(CAST((MONTH(%2) - 1) / 3 + 1 AS BIGINT) AS STRING)</formula>
      <formula part='month'>CAST(MONTH(%2) AS STRING)</formula>
      <formula part='dayofyear'>CAST(DATEDIFF(TO_DATE(%2), TO_DATE(CAST(TRUNC(%2,&apos;YY&apos;) AS DATE))) + 1 AS STRING)</formula>
      <formula part='day'>CAST(DAY(%2) AS STRING)</formula>
      <formula part='weekday'>CAST((8 + DATEDIFF(CAST(%2 AS DATE),NEXT_DAY(%2,&apos;SU&apos;))) AS STRING)</formula>
      <formula part='week'>CAST(FLOOR((14 + DATEDIFF(%2, TRUNC(%2,&apos;YY&apos;)) + DATEDIFF(TRUNC(%2,&apos;YY&apos;),NEXT_DAY(TRUNC(%2,&apos;YY&apos;),&apos;SU&apos;)))/7) AS STRING)</formula>
      <formula part='hour'>CAST(HOUR(%2) AS STRING)</formula>
      <formula part='minute'>COALESCE(CAST(MINUTE(%2) AS STRING), &apos;&apos;)</formula>
      <formula part='second'>COALESCE(CAST(SECOND(%2) AS STRING), &apos;&apos;)</formula>
      <argument type='localstr' />
      <argument type='datetime' />
    </date-function>
    <date-function name='DATENAME' return-type='str'>
      <formula part='year'>CAST(YEAR(%2) AS STRING)</formula>
      <formula part='quarter'>CAST(CAST((MONTH(%2) - 1) / 3 + 1 AS BIGINT) AS STRING)</formula>
      <formula part='month'>CAST(MONTH(%2) AS STRING)</formula>
      <formula part='dayofyear'>CAST(DATEDIFF(TO_DATE(%2), TO_DATE(CAST(TRUNC(%2,&apos;YY&apos;) AS DATE))) + 1 AS STRING)</formula>
      <formula part='day'>CAST(DAY(%2) AS STRING)</formula>
      <formula part='weekday'>CAST((8 + DATEDIFF(CAST(%2 AS DATE),NEXT_DAY(%2,&apos;SU&apos;))) AS STRING)</formula>
      <formula part='week'>CAST(FLOOR((14 + DATEDIFF(%2, TRUNC(%2,&apos;YY&apos;)) + DATEDIFF(TRUNC(%2,&apos;YY&apos;),NEXT_DAY(TRUNC(%2,&apos;YY&apos;),&apos;SU&apos;)))/7) AS STRING)</formula>
      <formula part='hour'>CAST(HOUR(%2) AS STRING)</formula>
      <formula part='minute'>COALESCE(CAST(MINUTE(%2) AS STRING), &apos;&apos;)</formula>
      <formula part='second'>COALESCE(CAST(SECOND(%2) AS STRING), &apos;&apos;)</formula>
      <argument type='localstr' />
      <argument type='datetime' />
      <argument type='localstr' />
    </date-function>
    </function-map>
</dialect>

And for test case date.datename.sow.week, DATENAME('week', [date2], 'monday'), the generated SQL statement was:

SELECT  AS `temp_test__499182808__0_`
FROM `odpsdemo_dev`.`calcs` `calcs`

Also, I noticed that in the hive dialect above, the formula part of the two 'DATENAME' functions are identical even through they have different argument list. It seems that the third argument of the second 'DATENAME' function does not present in the formula part at all.

Thank you very much for your time!

Jon
Max Compute, Alibaba

TDVT expected value contains a special date part

Hi,

I am a developer at MaxCompute.

There is a case in TDVT, the test category is calcs_data and the test name is calcs_data.

The SQL statement is:

SELECT `calcs`.`time1` AS `temp_test__665897456__0_`
FROM `odpsdemo_dev`.`calcs` `calcs`
GROUP BY `calcs`.`time1`

The type of calcs.time1 is TIME and in dataset TestV1 this field only contains data like "hh:MM:ss".

But the expected value is:

%null%
#1901-01-31 00:05:57#
#1901-01-31 02:05:25#
#1901-01-31 04:40:49#
#1901-01-31 04:48:07#
#1901-01-31 09:33:31#
#1901-01-31 12:33:57#
#1901-01-31 18:58:41#
#1901-01-31 19:36:22#
#1901-01-31 19:48:23#
#1901-01-31 19:57:33#
#1901-01-31 22:20:14#
#1901-01-31 22:50:16#

The "1901-01-31" part is quite confusing. I guess it may be an internal default date of Tableau. And it can be really hard for MaxCompute to pass this case.

Here is the snapshot of the test result:
image

Thank you very much for your time!

StaplesDataTest doesn't use the LogicalConfig in the .ini file

In my database the column names of the Staples table use underscore instead of space. I'm using the following LogicalConfig in the .ini file, but the generated Staple tests ignore the underscore requirement:

[LogicalConfig]
Name = tableau_tdvt
tablename = $dsName
tablePrefix = [tableau_tdvt].
tablenameUpper = True
tablenameLower = True
boolUnderscore = True
fieldnameDate_underscore = True
fieldnameLower = True
fieldnameUpper = True
fieldnameNoSpace = True
fieldnameLower_underscore = True
fieldnameUnderscoreNotSpace = True

Connection customizations are not loaded

I'm using the following manifest.xml file:

<?xml version='1.0' encoding='utf-8' ?>

<connector-plugin class='myconnector' superclass='odbc' plugin-version='0.0.0' name='MyConnector' version='18.1'>
  <connection-customization class="myconnector" enabled="true" version="10.0">
    <vendor name="vendor"/>
    <driver name="driver"/>
    <customizations>
    ....
    </customizations>
  </connection-customization>
  <connection-dialog file='connection-dialog.tcd'/>
  <connection-resolver file="connectionResolver.tdr"/>
  <dialect file='dialect.tdd'/>
</connector-plugin>

I successfully connect to my data source, that is the calcs tdvt table and I save the .tds file with the 'Add to the saved datasources' option. The saved file does not contain the list of customizations I added in the manifest.xml file. Is this normal? If not, how can it be fixed? @

@lriggs

Better clarity on the dialect base classes

Some of the dialect base classes listed in the documentation make sense, and some do not. For instance; I'm not aware of any database that is a snowflake derivative. It seems like the base classes should be limited to things which would be reasonably extended.

https://tableau.github.io/connector-plugin-sdk/docs/design

It would also be good to have more information on the dialect itself. I'm not sure what each dialect actually provides for each base class, and therefore what I need to override. Is there a way to create a "dialect base class" reference?

I do like the xsd available at:

https://github.com/tableau/connector-plugin-sdk/blob/master/validation/tdd_latest.xsd

... but I would like to see the existing implementations for some common classes

[BUG] Document Improvement on INI part

The document of TDVT mentioned following properties in "INI file structure" part:

#You can add a new logical config here and use it above. These are example attributes; you wouldn't set them all since some are mutually exclusive.

tablenameUpper = True
tablenameLower = True
boolUnderscore = True
fieldnameDate_underscore = True
fieldnameLower = True
fieldnameUpper = True
fieldnameNoSpace = True
fieldnameLower_underscore = True
fieldnameUnderscoreNotSpace = True

As mentioned in the comment some of the attributes are "mutually exclusive" so we tried to turn some of them to "False".

The confusing part is that it makes no difference to change the value to "False". TDVT code (eg. line 40 of tdvt/tdvt/config_gen/gentests.py) only checks if the corresponding key is present and ignore whatever the value is. The only way to turn the switch off is to remove or comment the line from INI file.

It might be better to clarify this behavior in the comment since the form "key = True" is really misleading.

Abstract query SELECT [field] is not defined

About You:
Name: Jon
Company: MaxCompute

Your question:
Hi,

I am trying to figure out the root cause of two failed test cases, lod.17_Nesting and lod.16_As Group.

Since you said you didn't get much information from the Tableau log, I checked the log of our db and it seemed everything worked fine. Tabquery did nothing except read the metadata of table 'Staples'. I am afraid that Tabquery failed before executing any test case.

Then I noticed that both of the failed case printed an error message like "Abstract query [field] is not defined".

Here is an example:

Abstract query [ship_mode] is not defined

Then I found a related issue: https://kb.tableau.com/articles/issue/error-abstract-query-is-not-defined-when-viewing-data-in-a-google-bigquery-connection?lang=fr-fr

Is it possible that the failures are caused by this issue?

I have attached the test case, hope that could help.

setup.lod.17_Nesting.odpsdemo_dev_logical.xml.zip

Thank you very much!
Jon

Search option not present under Schema in Tableau Desktop and cannot able to list the DSN in the connection dialog

Hi,
Started implementing Tableau plugin feature for our named connector. The connection is successful to my data source from my named Plugin and I can able to list the schema and tables. But we have a few problems,

  1. I'm unable to see any Search option under the Schema (Select Schema), with that search option we are doing some customized search. So how to get that?

  2. On the initial connection dialog for the plugin, how to show the list of DSN under the system?

Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.