Use this skill when the user wants to convert an Airflow task that uses TableauOperator or TableauRefreshWorkbookOperator (apache-airflow-providers-tableau) into an equivalent Orchestra pipeline task targeting Tableau Cloud. Triggers: any mention of migrating or rewriting Tableau Airflow tasks to Orchestra; Airflow DAG code containing TableauOperator, TableauRefreshWorkbookOperator, or TableauJobStatusSensor.
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Airflow's TableauRefreshWorkbookOperator (or TableauOperator) triggers a Tableau workbook or extract refresh and optionally waits for it to complete. TableauJobStatusSensor polls a running job. In Orchestra the equivalent is a task under the TABLEAU_CLOUD integration.
| Airflow parameter | Orchestra YAML field | Notes |
|---|---|---|
tableau_conn_id | connection: | The name of the Orchestra connection to Tableau Cloud (stores server URL, site ID, and PAT or Connected App credentials) |
workbook_name | parameters.workbook_name | Name of the workbook to refresh |
site_id | Configured on the Orchestra connection | Set the Tableau site on the connection, not per-task |
blocking / TableauJobStatusSensor | (always) | Orchestra always waits for job completion |
task_id | name: | Human-readable task name |
upstream >> chains | depends_on: |
version: v1
name: <pipeline-name>
pipeline:
<stage-uuid>:
tasks:
<task-uuid>:
integration: TABLEAU_CLOUD
integration_job: TABLEAU_REFRESH_WORKBOOK
name: <task_id value from Airflow>
connection: <orchestra-tableau-cloud-connection-name>
parameters:
project_name: <tableau-project-name> # required
workbook_name: <tableau-workbook-name> # required
depends_on: []
condition: null
tags: []Datasource refresh — if refreshing a published datasource instead of a workbook, use
integration_job: TABLEAU_REFRESH_EXTRACTandparameters.datasource_name.
TableauRefreshWorkbookOperator or TableauOperator. Note workbook_name, site_id, and tableau_conn_id.TableauJobStatusSensor — Orchestra's task already polls for completion.>> chains to depends_on:.from airflow.providers.tableau.operators.tableau import TableauOperator
refresh_sales_wb = TableauOperator(
task_id="refresh_sales_dashboard",
resource="workbooks",
method="refresh",
find="Sales Dashboard",
match_with="name",
tableau_conn_id="tableau_cloud_prod",
blocking_refresh=True,
)version: v1
name: my-pipeline
pipeline:
stage-001:
tasks:
task-001:
integration: TABLEAU_CLOUD
integration_job: TABLEAU_REFRESH_WORKBOOK
name: refresh_sales_dashboard
connection: tableau_cloud_prod_12345
parameters:
project_name: Sales # required — Tableau project containing the workbook
workbook_name: Sales Dashboard
depends_on: []
condition: null
tags: []site_id is a task parameter, Orchestra stores it on the connection. If you refresh workbooks across multiple Tableau sites, you need one Orchestra connection per site.tableau_auth_type PAT (token name + value) or CONNECTED_APP (client ID, secret ID, secret value, username). A PAT allows only one in-flight request at a time, so prefer a Connected App when several tasks refresh concurrently through one connection. Connected Apps need Tableau Cloud (Dec 2025 release+) or Tableau Server 2025.3+. Username/password auth isn't an option — move to one of these when creating the Orchestra connection.TableauOperator with resource="datasources": map to TABLEAU_REFRESH_EXTRACT in Orchestra, using parameters.datasource_name instead of workbook_name.blocking_refresh=False + sensor pattern: both collapse into one Orchestra task.If the Airflow DAG uses on_failure_callback or on_success_callback for Slack/email notifications, replace those with an alerts block in the pipeline YAML. Alerts fire based on overall pipeline status and support Slack, Email, PagerDuty, Microsoft Teams, and Webhook destinations.
version: v1
name: my-pipeline
alerts:
- name: on-failure
statuses:
- FAILED
destinations:
- integration: SLACK
destination: '#data-alerts'
custom_message: 'Optional context message.'
- name: on-success
statuses:
- SUCCEEDED
destinations:
- integration: SLACK
destination: '#data-alerts'
pipeline:
# ... tasks unchangedValid statuses: FAILED, SUCCEEDED, CANCELLED, WARNING, SKIPPED. Multiple alerts with different destinations are supported — each needs a unique name. See the slack-airflow-to-orchestra skill for full schema details.
orchestra-hq/orchestra-skills
a200887
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.