# Release: dbt v0.14.0

**URL:** <https://discourse.getdbt.com/t/release-dbt-v0-14-0/441>\
**Category:** Archive\
**Created:** [July 10, 2019, 2:18pm UTC](https://discourse.getdbt.com/t/release-dbt-v0-14-0/441 "2019-07-10T14:18:36Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![drew](https://sea2.discourse-cdn.com/flex020/user_avatar/discourse.getdbt.com/drew/32/9_2.png) [@drew](https://discourse.getdbt.com/u/drew)\
**Post date:** [July 10, 2019, 2:18pm UTC](https://discourse.getdbt.com/t/release-dbt-v0-14-0/441/1 "2019-07-10T14:18:36Z")

</div>

## dbt v0.14.0 - Wilt Chamberlain

dbt v0.14.0 improves the dbt workflow, adds Snapshots and Operations, and provides for finer-grained control over test failures. For a full list of changes in v0.14.0, check out the [release notes](https://github.com/fishtown-analytics/dbt/releases/tag/v0.14.0). Read on for the highlights!

### Improving the dbt Workflow

This is one where the demo says it all:

[![](https://us1.discourse-cdn.com/flex020/uploads/getdbt/original/2X/e/e933d358add5954f768ae88184aca37a5a186a88.jpeg "dbt Develop - demo") ](https://www.youtube.com/watch?v=IdX-h-xPvzc)

[view the demo](https://youtu.be/IdX-h-xPvzc)

There’s a _whole lot_ going on here, and there’s a whole lot more to come, too! With the 0.14.0 release of dbt, the Develop interface in dbt Cloud is now generally available. This interface can compile and run queries in the context of a dbt Cloud Environment. For more information on using dbt Develop, check out [the docs](https://docs.getdbt.com/v0.14/docs/cloud-developer-ide).

The dbt Develop interface is powered by the brand new [rpc server](https://docs.getdbt.com/v0.14/docs/rpc) in dbt. This server loads up dbt projects into memory and then serves API endpoints that can compile and run SQL in the context of the project. With this rpc server, you can rapidly iterate on dbt code that references models and macros without needing to re-compile your whole project.

### Snapshots

This release introduces [Snapshots](https://docs.getdbt.com/v0.14/docs/snapshots), a more capable version of dbt’s existing `archive` functionality. Snapshots make it possible to capture changes to mutable datasets over time. As a part of rolling out Snapshots, dbt v0.14.0 drops support for Archives. There’s a handy [migration guide](https://docs.getdbt.com/v0.14/docs/upgrading-to-014) that will help you upgrade your Archives to Snapshots. I promise, it’s worth it! Check out the benefits of Snapshots below.

**Snapshotting Queries**

Whereas Archives operated on tables, Snapshots operate on _queries_. You can use these queries to:

1. Select a subset of columns in a table
2. Filter out unimportant records from a table
3. Generate surrogate keys or re-cast columns before snapshotting

**Strategies**

dbt ships with two built-in Snapshot _strategies_. These strategies provide different mechanisms for understanding when a rows has changed in a source table.

The default strategy, `timestamp`, uses an updated\_at timestamp column to check if a row has been updated since the last time a Snapshot was run.

Alternatively, the `check` strategy will compare column values between old and new versions of a row to determine if the row has changed. While this is more computationally expensive than the `timestamp` strategy, it is useful when an `updated_at` column is not present or is otherwise unreliable.

**Snapshot Example**

Snapshots are defined in `snapshot` blocks in .sql files. Check out an example below:

```
{% snapshot orders_snapshot %}

    {{
        config(
          target_schema='snapshots',
          strategy='check',
          unique_key='id'
          check_cols=['status', 'is_cancelled'],
        )
    }}
    
    select * from {{ source('ecom', 'orders') }}
    
{% endsnapshot %}

```

### Operations

The effective maintenance of a data warehouse sometimes requires manual or automated “operational” queries to be run. While these operations frequently vary by organization, they might include:

- Vacuuming tables
- Creating partitions
- Resuming/pausing/resizing warehouses
- Refreshing pipes
- And so on!

To support these use cases, dbt v0.14.0 provides a [run-operation](https://docs.getdbt.com/v0.14/docs/using-operations) command. This command invokes a macro with arguments specified on the CLI. Inside of this macro, you can use dbt’s new [run\_query](https://docs.getdbt.com/v0.14/docs/run_query) macro (or a `statement` block) to run maintenance tasks against your warehouse.

```auto
{% macro vacuum_table(schema, table) %}

    {% set relation = schema ~ "." ~ table %}
    {% set sql %}
      vacuum {{ relation }} to 95%;
    {% endset %}
    
    {{ log("Beginning vacuum of table: " ~ relation, info=true) }}
    {% do run_query(sql) %}
    {{ log("Done vacuuming table: " ~ relation, info=true) }}
    
{% endmacro %}

```

Run it with:

```bash
$ dbt run-operation vacuum_table --args '{"schema": "snowplow", "table": "event"}'
Running with dbt=0.14.0
Beginning vacuum of table: snowplow.event
Done vacuuming table: snowplow.event

```

What kinds of tasks can you automate with operations?

### Test Severity

Did you know that you can use emojis to respond to GitHub issues? Did you know that [this issue](https://github.com/fishtown-analytics/dbt/issues/1005) received 26 👍 emojis? We’re super happy to release `severity` configuration for schema tests in dbt v0.14.0. With test severity, you can denote a test failures as either a warning or an error. This helps reduce noise generated by flaky tests and ensures that test failures are actionable for dbt users.

```
version: 2

models:
  - name: my_model
    columns:
      - name: id
        tests:
          - not_null:
            severity: "WARN"

          - unique:
            severity: "ERROR"

```

 ![dbt-test-severity](https://us1.discourse-cdn.com/flex020/uploads/getdbt/original/1X/4f4e5be7f990ef92e7a8333351f5d9418d4ac258.jpeg)

Pro-tip: Use the `--warn-error` flag to treat warnings as errors in PR builds 🙂

### Thanks!

Last, thanks to the 13 contributors who submitted a PR to dbt for v0.14.0! Nice work!

- [@nydnarb](https://github.com/nydnarb) ([#1363](https://github.com/fishtown-analytics/dbt/issues/1363))
- [@emilieschario](https://github.com/emilieschario) ([#1366](https://github.com/fishtown-analytics/dbt/pull/1366))
- [@bastienboutonnet](https://github.com/bastienboutonnet) ([#1409](https://github.com/fishtown-analytics/dbt/pull/1409))
- [@kasanchez](https://github.com/kasanchez) ([#1247](https://github.com/fishtown-analytics/dbt/pull/1247))
- [@Blakewell](https://github.com/Blakewell) ([#1307](https://github.com/fishtown-analytics/dbt/pull/1307))
- [@buremba](https://github.com/buremba) ([#1476](https://github.com/fishtown-analytics/dbt/pull/1476))
- [@darrenhaken](https://github.com/darrenhaken) ([#1285](https://github.com/fishtown-analytics/dbt/pull/1285))
- [@tbescherer](https://github.com/tbescherer) ([#1504](https://github.com/fishtown-analytics/dbt/issues/1504))
- [@heisencoder](https://github.com/heisencoder) ([#1509](https://github.com/fishtown-analytics/dbt/pull/1509), [#1549](https://github.com/fishtown-analytics/dbt/pull/1549). [#1578](https://github.com/fishtown-analytics/dbt/pull/1578))
- [@cclauss](https://github.com/cclauss) ([#1572](https://github.com/fishtown-analytics/dbt/pull/1572))
- [@josegalarza](https://github.com/josegalarza) ([#1571](https://github.com/fishtown-analytics/dbt/pull/1571))
- [@rmgpinto](https://github.com/rmgpinto) ([docs#31](https://github.com/fishtown-analytics/dbt-docs/pull/31), [docs#32](https://github.com/fishtown-analytics/dbt-docs/pull/32))
- [@groodt](https://github.com/groodt) ([docs#34](https://github.com/fishtown-analytics/dbt-docs/pull/34))

If you’re interested in contributing for a future release of dbt, check out the [contributing guide](https://github.com/fishtown-analytics/dbt/blob/dev/wilt-chamberlain/CONTRIBUTING.md) and drop us a line on Slack!

---

<div class="post-metadata">

**Author:** ![drew](https://sea2.discourse-cdn.com/flex020/user_avatar/discourse.getdbt.com/drew/32/9_2.png) [@drew](https://discourse.getdbt.com/u/drew)\
**Post date:** [July 10, 2019, 2:18pm UTC](https://discourse.getdbt.com/t/release-dbt-v0-14-0/441/2 "2019-07-10T14:18:50Z")

</div>



---

<div class="post-metadata">

**Author:** ![drew](https://sea2.discourse-cdn.com/flex020/user_avatar/discourse.getdbt.com/drew/32/9_2.png) [@drew](https://discourse.getdbt.com/u/drew)\
**Post date:** [July 10, 2019, 11:43pm UTC](https://discourse.getdbt.com/t/release-dbt-v0-14-0/441/3 "2019-07-10T23:43:47Z")

</div>


