Skip to content

ashish10alex/vscode-dataform-tools

Repository files navigation

Dataform tools - a vscode extension

πŸŽ₯ Click here for YouTube video with installation steps and demo β†’

Version Installs Linux macOS Windows

"Buy Me A Coffee"

πŸŽ‰ Officially recommended by Google1. Though not an officially supported Google product.

VS Code extension for Dataform with following features

Feature Description
Compiled Query & Dry run stats Compiled query with dry run stats in a vertical split
Dependancy graph Interative dependancy graph with external sources higlighted in distinct colors
Inline diagnostics on .sqlx file 🚨 Native LSP like experience with diagnostics being directly put on sqlx file
Preview query results Preview query results in a table by running the file
Cost estimator πŸ’Έ Estimate the cost of running a Tag
Go to definition Go to definition for source in $ref{("my_source")} and javascript blocks in .sqlx files
Auto-completion - Column names of current model
- Dependencies and declarations in ${ref("..")} trigger when $ character is typed
- Dependencies when " or ' is typed inside the config block which has dependencies keyword is in the line prefix
- tags when " or ' is typed inside the config block which has tags keyword is in the line prefix
Code actions Apply dry run suggestions at the speed of thought
Run file(s)/tag(s) Run file(s)/tag(s), optionally with dependencies/dependents/full refresh using vscode command pallet / menu icons
Format using Sqlfluff πŸͺ„ Fromat .sqlx files using sqlfluff
BigQuery snippets Code snippets for generic BigQuery functions taken from vscode-langauge-sql-bigquery extension

Requirements

  1. Dataform cli

    # requires nodejs
    npm i -g @dataform/cli

    Run dataform compile from the root of your Dataform project to ensure that you are able to use the cli

  2. Install gcloud cli and run

    gcloud init
    gcloud auth application-default login
     gcloud config set project <project_id> #replace with your gcp project id
  3. To enable formatting using sqlfluff install sqlfluff

    # install python and run
    pip install sqlfluff
  4. To enable prettier diagnostics install Error Lens extension [ optional ]

Note

Trouble installing ? Please see FAQ section, if you are still stuck, please raise an issue here

Features

compilation

depgraph

diagnostics

preview_query_results

cost_estimator

Go to definition for source in $ref{("my_source")}. Takes you to my_source.sqlx or sources.js at the line where my_source is defined. There is also support for go to definiton from a javascript variable/module from a .sqlx file to js block or .js file where the virable or module declaration exsists

go-to-definition

Auto completion support for dependencies when " or ' is typed inside the config block which has dependencies keyword is in the line prefix

auto-completion

Declarations in ${ref("..")} trigger when $ character is typed

auto-completion

Auto completion support for tags when " or ' is typed inside the config block which has tags keyword is in the line prefix

auto-completion

formatting

Open vscode command pallet by pressing CTLR + SHIFT + p or CMD + SHIFT + p on mac and run one of the required commands

Commands
Dataform: Run current file
Dataform: Run current file with dependencies
Dataform: Run current file with dependents
Dataform: Run current tag
Dataform: Run current tag with dependencies
Dataform: Run current tag with dependents
Dataform: Format current file
Dataform: Run file(s) / tag(s) with options

Known Issues

  • Features such as go to definition / dependancy graph might not work with consistantly with ${ref("dataset", "table")} or when it is multiline or a different format works best with ${ref('table_name')} format

TODO

  • Add hover docs for config block elements. e.g. Assertions, type etc
  • Add option to include dependents / dependencies when running cost estimator for tag
  • Handle case where user is not connected to internet or on vpn where network request for dry run cannot be made

Footnotes

  1. Link to confirmation of official recommendation by Google: link ↩