Redash
Important Capabilities
| Capability | Status | Notes | 
|---|---|---|
| Table-Level Lineage | ✅ | Enabled by default | 
This plugin extracts the following:
- Redash dashboards and queries/visualization
- Redash chart table lineages (disabled by default)
CLI based Ingestion
Install the Plugin
The redash source works out of the box with acryl-datahub.
Starter Recipe
Check out the following recipe to get started with ingestion! See below for full configuration options.
For general pointers on writing and running a recipe, see our main recipe guide.
source:
  type: "redash"
  config:
    connect_uri: http://localhost:5000/
    api_key: REDASH_API_KEY
    # Optionals
    # api_page_limit: 1 #default: None, no limit on ingested dashboards and charts API pagination
    # skip_draft: true  #default: true, only ingest published dashboards and charts
    # dashboard_patterns:
    #   deny:
    #     - ^denied dashboard.*
    #   allow:
    #     - .*allowed dashboard.*
    # chart_patterns:
    #   deny:
    #     - ^denied chart.*
    #   allow:
    #     - .*allowed chart.*
    # parse_table_names_from_sql: false
Config Details
- Options
- Schema
Note that a . is used to denote nested fields in the YAML recipe.
| Field | Description | 
|---|---|
| api_key string | Redash user API key. Default: REDASH_API_KEY | 
| api_page_limit integer | Limit on number of pages queried for ingesting dashboards and charts API during pagination. Default: 9223372036854775807 | 
| connect_uri string | Redash base URL. Default: http://localhost:5000 | 
| page_size integer | Limit on number of items to be queried at once. Default: 25 | 
| parallelism integer | Parallelism to use while processing. Default: 1 | 
| parse_table_names_from_sql boolean | See note below. Default: False | 
| skip_draft boolean | Only ingest published dashboards and charts. Default: True | 
| env string | Environment to use in namespace when constructing URNs. Default: PROD | 
| chart_patterns AllowDenyPattern | regex patterns for charts to filter for ingestion. Default: {'allow': ['.*'], 'deny': [], 'ignoreCase': True} | 
| chart_patterns.ignoreCase boolean | Whether to ignore case sensitivity during pattern matching. Default: True | 
| chart_patterns.allow array | List of regex patterns to include in ingestion Default: ['.*'] | 
| chart_patterns.allow.string string | |
| chart_patterns.deny array | List of regex patterns to exclude from ingestion. Default: [] | 
| chart_patterns.deny.string string | |
| dashboard_patterns AllowDenyPattern | regex patterns for dashboards to filter for ingestion. Default: {'allow': ['.*'], 'deny': [], 'ignoreCase': True} | 
| dashboard_patterns.ignoreCase boolean | Whether to ignore case sensitivity during pattern matching. Default: True | 
| dashboard_patterns.allow array | List of regex patterns to include in ingestion Default: ['.*'] | 
| dashboard_patterns.allow.string string | |
| dashboard_patterns.deny array | List of regex patterns to exclude from ingestion. Default: [] | 
| dashboard_patterns.deny.string string | 
The JSONSchema for this configuration is inlined below.
{
  "title": "RedashConfig",
  "type": "object",
  "properties": {
    "connect_uri": {
      "title": "Connect Uri",
      "description": "Redash base URL.",
      "default": "http://localhost:5000",
      "type": "string"
    },
    "api_key": {
      "title": "Api Key",
      "description": "Redash user API key.",
      "default": "REDASH_API_KEY",
      "type": "string"
    },
    "dashboard_patterns": {
      "title": "Dashboard Patterns",
      "description": "regex patterns for dashboards to filter for ingestion.",
      "default": {
        "allow": [
          ".*"
        ],
        "deny": [],
        "ignoreCase": true
      },
      "allOf": [
        {
          "$ref": "#/definitions/AllowDenyPattern"
        }
      ]
    },
    "chart_patterns": {
      "title": "Chart Patterns",
      "description": "regex patterns for charts to filter for ingestion.",
      "default": {
        "allow": [
          ".*"
        ],
        "deny": [],
        "ignoreCase": true
      },
      "allOf": [
        {
          "$ref": "#/definitions/AllowDenyPattern"
        }
      ]
    },
    "skip_draft": {
      "title": "Skip Draft",
      "description": "Only ingest published dashboards and charts.",
      "default": true,
      "type": "boolean"
    },
    "page_size": {
      "title": "Page Size",
      "description": "Limit on number of items to be queried at once.",
      "default": 25,
      "type": "integer"
    },
    "api_page_limit": {
      "title": "Api Page Limit",
      "description": "Limit on number of pages queried for ingesting dashboards and charts API during pagination.",
      "default": 9223372036854775807,
      "type": "integer"
    },
    "parallelism": {
      "title": "Parallelism",
      "description": "Parallelism to use while processing.",
      "default": 1,
      "type": "integer"
    },
    "parse_table_names_from_sql": {
      "title": "Parse Table Names From Sql",
      "description": "See note below.",
      "default": false,
      "type": "boolean"
    },
    "env": {
      "title": "Env",
      "description": "Environment to use in namespace when constructing URNs.",
      "default": "PROD",
      "type": "string"
    }
  },
  "additionalProperties": false,
  "definitions": {
    "AllowDenyPattern": {
      "title": "AllowDenyPattern",
      "description": "A class to store allow deny regexes",
      "type": "object",
      "properties": {
        "allow": {
          "title": "Allow",
          "description": "List of regex patterns to include in ingestion",
          "default": [
            ".*"
          ],
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "deny": {
          "title": "Deny",
          "description": "List of regex patterns to exclude from ingestion.",
          "default": [],
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ignoreCase": {
          "title": "Ignorecase",
          "description": "Whether to ignore case sensitivity during pattern matching.",
          "default": true,
          "type": "boolean"
        }
      },
      "additionalProperties": false
    }
  }
}
Note! The integration can use an SQL parser to try to parse the tables the chart depends on. This parsing is disabled by default,
but can be enabled by setting parse_table_names_from_sql: true. The parser is based on the sqlglot package.
Code Coordinates
- Class Name: datahub.ingestion.source.redash.RedashSource
- Browse on GitHub
Questions
If you've got any questions on configuring ingestion for Redash, feel free to ping us on our Slack.