Skip to main content

SQL Validator


spectacles sql
--project PROJECT
[--branch BRANCH]
[--remote-reset | --commit-ref COMMIT_REF]
[--explores EXPLORES [EXPLORES ...]]
[--concurrency CONCURRENCY]
[--runtime-threshold RUNTIME_THRESHOLD]


All required options in Global Flags are also required for the SQL Validator.


Usage: --branch dev-branch-abc123

The Git branch of your Looker project to validate.

If neither branch nor commit-ref are passed, Spectacles will test production.

Environment Variable: LOOKER_GIT_BRANCH


Usage: --chunk-size 500

Control the maximum number of dimensions included in a Spectacles validation query.

By default, Spectacles runs Explore-level queries that select up to 500 of the Explore's dimensions. However, depending on the SQL defined in these dimensions, it's possible to encounter query character length limitations (see previous GitHub issue).

To reduce the size of these queries, you can reduce the chunk size so Spectacles runs more Explore-level queries with fewer dimensions per query. Running more queries will increase the total runtime of validation, so you probably don't need to modify this setting unless you're encountering this issue.


Usage: --commit-ref ae4d8c

The commit of your project that Spectacles should checkout to validate. Spectacles will create a temporary branch for the tests based on this commit and delete the branch at the end of the validation or if an exception is handled.

If neither branch nor commit-ref are passed, Spectacles will test production.

Environment Variable: SPECTACLES_COMMIT_REF


Usage: --concurrency 40

The number of simultaneous queries that Spectacles will run through Looker. The default concurrency is 10. Increasing concurrency will decrease the duration of SQL validations but will increase the load on your data warehouse and Looker instance.

Most modern data warehouses can readily handle a greater query concurrency than 10, but we conservatively set the default. Learn about how Spectacles limits resource consumption.


Usage: --explores model_a/* -model_a/explore_b

Select specific models or explores for validation. This flag accepts a list of / delimited model and explore names. The wildcard operator * is also accepted to choose all models or Explores, for example model_a/* will select all Explores in Model A.

To exclude a model or explore, add a leading hyphen. For example, -orders/order_items will exclude the order_items Explore from validation.

Here are some additional examples:

Only Explore A

--explores model_a/explore_a

All Explores except for Explore B

--explores -model_a/explore_b

All Explores in Model A except for Explore B

--explores "model_a/*" -model_a/explore_b

Every Explore named Explore A across all models

--explores "*/explore_a"

Explore A and Explore B

--explores model_a/explore_a model_a/explore_b

On some shells, like zsh, the * character gets treated as a file globbing wildcard, with causes unexpected results for Spectacles. You might see an output like:

zsh: no matches found

If that happens, you need to wrap your model_name/explore_name strings in quotes, like --explores "model_a/explore_a".


Usage: --fail-fast

Only run Explore-level queries. Normally (without fail-fast) Spectacles will run one query per Explore with all dimensions selected, then test each failing Explore dimension by dimension, returning all errors associated with their dimensions. In fail-fast mode, only runs the Explore-level query, returning the first error identified in each Explore.

You can read more about the tradeoffs of fail-fast mode here.


Usage: --ignore-hidden

Ignore hidden dimensions from testing. Normally, the SQL validator will test all dimensions, regardless of whether they are hidden or not. With this flag set, Spectacles will only test dimensions visible to the end-user.


Usage: --pin-imports core_looker_project:ae4d8c

Pins locally imported Looker projects to a specific git ref. By default, Spectacles will set any locally imported Looker projects, defined in your manifest.lkml, to their current production commit. If you want to test a project with a specific commit or branch from the upstream imported project, you can use this flag to do so.


Usage: --profile or -p

Runs the query profiler during validation, which tracks the runtime for each query. After validation, the profiler results show each query that took longer to execute than the runtime threshold (the default is 5 seconds).

The profiler is useful for debugging long-running queries that might be a bottleneck for SQL validation on particularly large explores and models. The results from the profiler look something like this:

............................ Query profiler results ............................

| Type | Name | Runtime (s) | Query ID | Explore From Here |
| dimension | | 10.4 | 1919 | |
| dimension | | 7.3 | 1931 | |
| dimension | users.first_name | 7.3 | 1929 | |
| dimension | users.state | 5.2 | 2047 | |


Required. Usage: --project ecommerce

The LookML project you want to validate. Projects are listed at the bottom of the Develop menu in Looker.

Environment Variable: LOOKER_PROJECT


Usage: --remote-reset

Reset the branch to the version of the branch that is on the remote repository. This flag cannot be used with --commit-ref because it implicitly specifies a commit to use.


Providing this flag will delete any uncommited changes in the user’s workspace.



Usage: --runtime-threshold 10

The cutoff, in seconds, used by the query profiler to define "long-running" queries. The default is 5 seconds. For example, if you only wanted to see queries that lasted longer than 30 seconds during SQL validation, set this argument to 30.

If --profile or -p is not passed, this argument does nothing.