Using Macros from a Package
Learn how to use macros from a package.
We'll cover the following...
Adding a package to the macro-paths
list
After running dbt deps
, we might need to use the log_info
macro from the dbt-utils
package. This macro allows us to log a formatted message to the command line. If we try to call that macro directly, like this:
Press + to interact
{{ log_info("This is just a dummy model") }}SELECT 1
We get a compilation error:
Compilation Error in model other (models/other.sql) 'log_info' is undefined.This can happen when calling a macro that does not exist.Check for typos and/or install package dependencies with "dbt deps".
This is because dbt does not know it can look for macros in that package.
To change that, we need to edit the macro-paths
list in the dbt_project.yml
file, and add the path to the macros
folder in the dbt-utils
package.
Press + to interact
# Name your project! Project names should contain only lowercase characters# and underscores. A good package name should reflect your organization's# name or the intended use of these modelsname: 'shop_project'version: '1.0.0'config-version: 2# This setting configures which "profile" dbt uses for this project.profile: 'shop'# These configurations specify where dbt should look for different types of files.# The `model-paths` config, for example, states that models in this project can be# found in the "models/" directory. You probably won't need to change these!model-paths: ["models"]analysis-paths: ["analyses"]test-paths: ["tests"]seed-paths: ["seeds"]macro-paths: ["macros", "dbt_packages/dbt_utils/macros"]snapshot-paths: ["snapshots"]target-path: "target" # directory which will store compiled SQL filesclean-targets: # directories to be removed by `dbt clean`- "target"- "dbt_packages"
This time, our log works:
16:28:05 2 of 2 START sql view model educative.other .............................. [RUN]16:28:05 16:28:05 + This is just a dummy model16:28:06 2 of 2 OK created sql view model educative.other .............................. [CREATE VIEW (0 processed) in 0.91s]
Output of the dbt run command
...