{"id":4425,"library":"apache-airflow-providers-tableau","title":"Apache Airflow Tableau Provider","description":"The Apache Airflow Tableau Provider enables seamless integration between Apache Airflow and Tableau Server/Online. It offers operators and hooks to automate various Tableau-related tasks, such as refreshing data sources, publishing workbooks, and managing server content, directly within Airflow DAGs. The provider is actively maintained as part of the Apache Airflow project, with regular releases aligning with Airflow's provider release cycles, currently at version 5.3.4.","status":"active","version":"5.3.4","language":"en","source_language":"en","source_url":"https://github.com/apache/airflow/tree/main/airflow/providers/tableau","tags":["airflow","tableau","data orchestration","etl","bi","provider"],"install":[{"cmd":"pip install apache-airflow-providers-tableau","lang":"bash","label":"Install latest version"}],"dependencies":[{"reason":"Core dependency for Airflow providers; requires >=2.11.0 for provider version 5.x.","package":"apache-airflow","optional":false},{"reason":"Underlying Python library for interacting with Tableau Server/Online REST API.","package":"tableauserverclient","optional":false}],"imports":[{"symbol":"TableauOperator","correct":"from airflow.providers.tableau.operators.tableau import TableauOperator"},{"symbol":"TableauHook","correct":"from airflow.providers.tableau.hooks.tableau import TableauHook"},{"symbol":"TableauJobStatusSensor","correct":"from airflow.providers.tableau.sensors.tableau_job_status import TableauJobStatusSensor"}],"quickstart":{"code":"import os\nfrom datetime import datetime\n\nfrom airflow import DAG\nfrom airflow.providers.tableau.operators.tableau import TableauOperator\n\nwith DAG(\n    dag_id='example_tableau_refresh_workbook',\n    start_date=datetime(2023, 1, 1),\n    schedule_interval=None,\n    catchup=False,\n    tags=['tableau', 'example'],\n    params={'workbook_id': os.environ.get('AIRFLOW_WORKBOOK_ID', 'your_workbook_id')}\n) as dag:\n    refresh_workbook_blocking = TableauOperator(\n        task_id='refresh_tableau_workbook_blocking',\n        resource='workbooks',\n        method='refresh',\n        find=\"{{ params.workbook_id }}\",\n        site_id=os.environ.get('AIRFLOW_TABLEAU_SITE_ID', ''), # Use '' for default site\n        blocking_refresh=True, # Waits until refresh is complete\n        tableau_conn_id=os.environ.get('AIRFLOW_TABLEAU_CONN_ID', 'tableau_default')\n    )","lang":"python","description":"This example DAG demonstrates how to use the `TableauOperator` to refresh a Tableau workbook. It shows a blocking refresh, meaning the task will wait until the refresh operation on Tableau Server/Online is completed. The `tableau_conn_id` parameter references an Airflow connection configured with Tableau credentials. The `site_id` should be provided if not using the default Tableau site, or an empty string ('') for the default site. Workbook ID can be passed via DAG params or environment variables."},"warnings":[{"fix":"Migrate to JSON Web Token (JWT) authentication for robust and scalable Airflow-Tableau integrations, especially in environments with parallel tasks.","message":"Authentication by personal access token (PAT) is officially deprecated in provider version 2.1.0 and later due to concurrency issues. Tableau automatically invalidates PATs if multiple parallel connections use the same token, leading to job failures.","severity":"deprecated","affected_versions":">=2.1.0"},{"fix":"Update imports and usage to the current `TableauOperator` and `TableauJobStatusSensor` patterns, which now handle these functionalities directly.","message":"Provider version 4.0.0 removed deprecated classes paths, specifically `tableau_job_status` and `tableau_refresh_workbook`.","severity":"breaking","affected_versions":"4.0.0"},{"fix":"Ensure your Apache Airflow instance is upgraded to at least version 2.2.0 (or newer for later provider versions) before installing or upgrading to `apache-airflow-providers-tableau` >= 3.0.0.","message":"Provider version 3.0.0 requires Apache Airflow 2.2.0 or newer. Installing this provider version on older Airflow instances may automatically upgrade Airflow.","severity":"breaking","affected_versions":"3.0.0"},{"fix":"Always specify the `site_id` parameter in your Tableau connection or operator if you are not using the default Tableau Server site. For the default site, use an empty string (e.g., `site_id=''`).","message":"Failure to provide the correct `site_id` for Tableau Online or a non-default Tableau Server site can lead to `NotSignedInError: Missing site ID` errors, even if other credentials are correct.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Ensure the certificate chain is correctly configured and accessible by the Airflow worker. If possible, use publicly recognized certificates. For self-signed certificates, ensure the full chain is provided and consider alternative verification methods if the issue persists.","message":"Using self-signed SSL certificates can result in `SSLCertVerificationError` even if `openssl s_client` validates the certificate, indicating potential deeper issues with how `tableauserverclient` handles custom CA bundles within Airflow.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-12T00:00:00.000Z","next_check":"2026-07-11T00:00:00.000Z"}