How to implement Python UDF in dbt
Olivia Zamora
Please I need some help with applying python UDF to run on my dbt models. I successfully created a python function in snowflake (DWH) and ran it against a table. This seems to work as expected, but implementing this on dbt seems to be a struggle. Some advice/help/direction will make my day.
here is my python UDF created on snowflake
create or replace function "077"."Unity".sha3_512(str varchar)
returns varchar
language python
runtime_version = '3.8'
handler = 'hash'
as
$$
import hashlib
def hash(str): # create a sha3 hash object hash_sha3_512 = hashlib.new("sha3_512", str.encode()) return hash_sha3_512.hexdigest()
$$
;The objective is the create the python function in dbt and apply it to the model below
{{ config(materialized = 'view') }}
WITH SEC AS( SELECT A."AccountID" AS AccountID, A."AccountName" AS AccountName , A."Password" AS Passwords, apply function here (A."Password") As SHash FROM {{ ref('Green', 'Account') }} A )
----------------VIEW RECORD------------------------------
SELECT *
FROM SECis there a way to do this please. Thank you
1 Answer
Assuming that UDF already exists in Snowflake:
{{ config(materialized = 'view') }}
WITH SEC AS( SELECT A."AccountID" AS AccountID, A."AccountName" AS AccountName , A."Password" AS Passwords, {{target.schema}}.sha3_512(A."Password") As SHash FROM {{ ref('Green', 'Account') }} A )
SELECT *
FROM SEC;The function could be created using on-run-start:
on-run-start: - '{{ creating_udf()}}'and macro:
{% macro creating_udf() %}
create function if not exists {{target.schema}}.sha3_512(str varchar)
returns varchar
language python
runtime_version = '3.8'
handler = 'hash'
as
$$
import hashlib
def hash(str): # create a sha3 hash object hash_sha3_512 = hashlib.new("sha3_512", str.encode()) return hash_sha3_512.hexdigest()
$$
;
{% endmacro %} 2