Skip to main content

arguments (for functions)

💡Did you know...
Available from dbt v1.11 or with the dbt "Latest" release track.
functions/<filename>.yml

functions:
- name: <function name>
arguments:
- name: <arg name>
data_type: <string> # warehouse-specific
description: <markdown_string>
default_value: <string | boolean | integer> # optional, available in Snowflake and Postgres

Definition

The arguments property is used to define the parameters that a resource can accept. Each argument can have a name, a type field, and optional properties such as description and default_value.

For functions, you can add arguments to a function property, which defines the parameters for user-defined functions (UDFs) in your warehouse. The data_type for function arguments is warehouse-specific (for example, STRING, VARCHAR, INTEGER) and should match the data types supported by your data platform.

Properties

name

The name of the argument. This is a required field if arguments is specified.

data_type

The data type that the warehouse expects for this parameter. This is a required field if arguments is specified and must match the data types supported by your specific data platform.

Warehouse-specific data types

The data_type values are warehouse-specific. Use the data type syntax that your warehouse requires:

  • Snowflake: STRING, NUMBER, BOOLEAN, TIMESTAMP_NTZ, etc.
  • BigQuery: STRING, INT64, BOOL, TIMESTAMP, ARRAY<STRING>, etc.
  • Redshift: VARCHAR, INTEGER, BOOLEAN, TIMESTAMP, etc.
  • Postgres: TEXT, INTEGER, BOOLEAN, TIMESTAMP, etc.

Refer to your warehouse documentation for the complete list of supported data types.

description

An optional markdown string describing the argument. This is helpful for documentation purposes.

default_value

Use the default_value property to make a function argument optional.

  • Arguments without a default_value are required, and users must pass a value for them when they use the function.
  • Arguments with a default_value are optional — if a users doesn’t pass a value, the warehouse uses the value you set in default_value. If a required argument isn’t passed, the function call fails.

This property is supported in Snowflake and Postgres.

When you use default_value, the order of your arguments matter. Any required arguments (those without default values) have to come before optional ones. Here's an example with the correct order:

functions/schema.yml
functions:
- name: sum_2_values
description: Add two values together
arguments:
- name: val1 # this argument comes first because it has no default value
data_type: integer
description: The first value
- name: val2
data_type: integer
description: The second value
default_value: 0
returns:
data_type: integer

In this example:

  • val1 has no default_value, so it’s required.
  • val2 has a default_value of 0, so it’s optional. If you don’t provide a value for val2, the function uses 0 instead.

Examples

Simple function arguments

functions/schema.yml

functions:
- name: is_positive_int
arguments:
- name: a_string
data_type: string
description: "The string that I want to check if it's representing a positive integer (like '10')"
returns:
data_type: boolean

Complex data types

functions/schema.yml

functions:
- name: calculate_discount
arguments:
- name: original_price
data_type: DECIMAL(10,2)
description: "The original price before discount"
- name: discount_percent
data_type: INTEGER
description: "The discount percentage to apply"
returns:
data_type: DECIMAL(10,2)
description: "The discounted price"

Array data types (BigQuery example)

functions/schema.yml

functions:
- name: get_tags
arguments:
- name: tag_string
data_type: STRING
description: "Comma-separated string of tags"
returns:
data_type: ARRAY<STRING>
description: "An array of individual tag strings"

Was this page helpful?

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

0