- Categories:
System functions (System Information)
SYSTEM$LOCATE_ DBT_ ARTIFACTS¶
Returns the location of artifacts from a specified dbt project object run (for example, manifest.json).
Use this function with the DBT_PROJECT_EXECUTION_HISTORY function to access dbt artifacts and logs programmatically.
Syntax¶
Arguments¶
query_idThe query ID of the dbt project object run whose files you want to locate.
Returns¶
The function returns the file path for dbt project object artifacts from a run (for example, snow://dbt/DBTEST.PUBLIC.MY_DBT_PROJECT/results/query_id_01bf3f5a-010b-4d87-0000-53493abb7cce/).
For more information and examples, see Access dbt artifacts and logs programmatically.
This is the results directory for the specified query, not a search for the latest execution. Its standalone target files can include
manifest.json, semantic_manifest.json, run_results.json, and sources.json when present, and logs/dbt.log contains the current
execution’s log. For the complete directory layout, see
Results directory contents.
The function returns a location. Use LIST to inspect the returned location or GET to download files. When used in the IMPORTS clause
of EXECUTE DBT PROJECT, SYSTEM$LOCATE_DBT_ARTIFACTS imports the results directory, including
dbt_artifacts.zip, but doesn’t extract the ZIP file. When you import the location AS 'state', Snowflake mounts the query’s results
directory at ./imports/state, with the dbt artifacts in ./imports/state/target. Use SYSTEM$LOCATE_DBT_ARCHIVE directly when you need
the archived target and logs, such as compiled SQL. Snowflake extracts the archive automatically.
Access control requirements¶
This function can only be used with dbt project objects, not Workspaces, when you have one of the following privileges:
- OWNERSHIP, USAGE, or MONITOR on the dbt project object
For details about these privileges, see dbt project object privileges.
Operating on an object in a schema requires at least one privilege on the parent database and at least one privilege on the parent schema.
For instructions on creating a custom role with a specified set of privileges, see Creating custom roles.
For general information about roles and privilege grants for performing SQL actions on securable objects, see Overview of Access Control.
Usage notes¶
- This system function works only on dbt project objects and isn’t available for Workspaces.
- Query IDs generated from CREATE DBT PROJECT or ALTER DBT PROJECT … DEPLOY aren’t supported for this system function.
- Direct querying of file content (for example, Query examples) isn’t supported.
- If
query_idis NULL or not a dbt execution, you’ll get an error. - dbt project results are available for up to 14 days.
- Files might be unavailable if a run times out, is canceled, or fails before they are uploaded. In such cases, runs appear as
UNHANDLED ERRORin dbt history. - You can’t use this function to locate artifacts for runs that are in progress because artifacts are only available after the run is complete.
Examples¶
To view the stage path where Snowflake stored the dbt project object execution artifacts, use the SYSTEM$LOCATE_DBT_ARTIFACTS function, as shown in the following
example. You can then use that path with GET or COPY FILES or the Snowflake CLI to download files such as manifest.json and the run logs. Compiled SQL files are only available inside the dbt_artifacts.zip archive, not as separate files in the folder.
Tip
Use function arguments such as DATABASE, SCHEMA, and OBJECT_NAME to filter results whenever possible. These filters are applied before the RESULT_LIMIT (default: 100 rows), so using them ensures you get the most relevant results rather than filtering a potentially truncated result set with a WHERE clause.
You can also create an internal stage and copy the located artifacts into it for retrieval. For the full example, see Access dbt artifacts and logs programmatically.
Rerun failed models from a specific execution¶
To rerun only the resources that failed in a specific execution, first look up the query ID of the failed execution. Filter
DBT_PROJECT_EXECUTION_HISTORY by the dbt project object and by state = 'HANDLED_ERROR'. Executions with an UNHANDLED_ERROR state might not
have uploaded artifacts.
Then pass the query ID to SYSTEM$LOCATE_DBT_ARTIFACTS in the IMPORTS parameter of EXECUTE DBT PROJECT.
Importing this location mounts the execution’s entire results directory, and the dbt artifacts are in its target subdirectory. When you
import the results AS 'state', set --state ./imports/state/target.
The SYSTEM$DBT_GET_LAST_*_RUN_TARGET functions work differently. They import target directly, so ./imports/state contains the artifacts you need.
The result:error+ selector reruns the resources that errored and their downstream dependencies:
In Snowsight, open the failed query in Query History, then select Re-run in the dbt Output section and select From query ID to execute a statement that reruns the models that errored and their downstream dependencies.
To rerun failed resources from the most recent failed execution without looking up a query ID, use SYSTEM$DBT_GET_LAST_FAILED_RUN_TARGET.