Qyra

Generate semantic layer YAML

Auto-generate and sync schema.yml files so your dbt models appear as Tables in Qyra

If your dbt model has been defined in a .yml file, it will appear in Qyra as a Table.

Not too sure what a .yml file or a Table is? Be sure to check out our tutorial on Adding Tables to Qyra for more details.

Auto-generate schema.yml files

To make it faster to write and maintain your schema.yml files, the Qyra CLI will automatically generate and sync your schema.yml files.

Inside your dbt project, open a terminal and run this command to generate the schema.yml file for a model calledmymodel:

git commit # make sure to commit all your existing project first!
qyra generate -s mymodel

This will create or update an existing schema.yml file to add any new columns that have appeared in the database.

Auto-sync schema.yml files after dbt run

Since the generate command relies on your database schema to detect which columns are required, you'll often want to run dbt run before running generate. You can combine dbt run and lighdash generate into one command which will run models and then regenerate theschema.yml files for any models than changed:

git commit
qyra dbt run  # Run dbt AND re-sync schema.yml files

Generating schema.yml for multiple models

qyra generate supports dbt model selection syntax to generate files for a group of models:

qyra generate # all models
qyra generate -s payments  # just payments
qyra generate -s payments+ # payments and all children
qyra generate -s +payments # payments and all parents
qyra generate -s +payments+ # payments and all children and parents
qyra generate -s tag:prod # all models with the prod tag
qyra generate -s payments customers # two specific models
qyra generate -s payments+ +customers tag:prod # mix and match

Using doc blocks to build better .yml files

Doc blocks are markdown files defined in your dbt project that are useful for creating consistent documentation in your dbt project.

For example, if I have a field called product_category that's used a bunch of times throughout my project, I can create a doc block for this field:

{% docs product_category %}

This is a string field that tells us the category of the product that was sold. This is a higher level grouping than the `product_type`. Every `product_type` maps to a single `product_category`.

The valid product categories are:

- clothing
- home
- accessories
- beauty

{% enddocs %}

I can then reference this doc block in my .yml files like so:

models:
  - name: products
    description: 'one row per product ID'

    columns:
      - name: product_category
        description: '{{ doc("product_category") }}'

The docs for product_category (in Qyra and in your dbt documentation) will become the doc block I've written above.

The Qyra CLI will automatically add doc blocks to your .yml files

The nice thing about doc blocks is that Qyra automatically adds these to the .yml files it generates. For example, if I had a .yml file for my product_sales model that looked like this:

models:
  - name: product_sales

    columns:
      - name: product_id
      - name: product_value
      - name: product_category

Then, I did:

qyra dbt run -s product_sales # or qyra generate -s product_sales

Then my product_sales.yml file would be updated to include the doc block for product_category:

models:
  - name: product_sales

    columns:
      - name: product_id
      - name: product_value
      - name: product_category
        description: '{{ doc("product_category") }}'

We recommend using doc blocks whenever you can! They help with keeping the definitions of fields across your project consistent, and they also allow you to get great docs, completely automatically with the Qyra CLI.