找不到用户定义的函数
User Defined Function not found
我已经创建了一个永久的 UDF 函数来验证这样的电子邮件:
create or replace function
`project-name`.udf_library.is_valid_email(text STRING)
returns Bool
as (REGEXP_CONTAINS(text, r"valid_regex"));
并使用以下查询对其进行了测试,效果非常好:
with emails as
(select 'alberto@example.com' as email
union all
select 'foobar' as email
union all
select 'disposable.style.email.with+symbol@example.com' as email
union all
select '"john..doe"@example.org' as email
union all
select 'i_like_underscore@but_its_not_allow_in_this_part.example.com' as email)
select email, `project-name`.udf_library.is_valid_email(email) as validEmail from emails
Row email validEmail
1 alberto@example.com true
2 foobar false
3 disposable.style.email.with+symbol@example.com true
4 "john..doe"@example.org true
5 i_like_underscore@but_its_not_allow_in_this_part.example.com false
但是当我查询 table 并尝试使用这样的函数时
SELECT email, `project-name`.udf_library.is_valid_email(email) as validEmail
FROM `project-name.Mydataset.MyTable`
我明白了:
未找到函数:project-name
.udf_library.is_valid_email [1:15]
如果我将它创建为临时函数,它确实有效,但这违背了拥有永久 UDF 的全部目的
有什么想法吗?
谢谢
请检查数据集 project-name.Mydataset
和 project-name.udf_library
的位置,它们必须位于同一区域,您的最后一个查询才能正常工作。
使用 WITH
准备数据的查询有效,因为它被路由到 UDF 所在的区域。最后一个查询可能已路由到数据所在的位置。
我已经创建了一个永久的 UDF 函数来验证这样的电子邮件:
create or replace function
`project-name`.udf_library.is_valid_email(text STRING)
returns Bool
as (REGEXP_CONTAINS(text, r"valid_regex"));
并使用以下查询对其进行了测试,效果非常好:
with emails as
(select 'alberto@example.com' as email
union all
select 'foobar' as email
union all
select 'disposable.style.email.with+symbol@example.com' as email
union all
select '"john..doe"@example.org' as email
union all
select 'i_like_underscore@but_its_not_allow_in_this_part.example.com' as email)
select email, `project-name`.udf_library.is_valid_email(email) as validEmail from emails
Row email validEmail
1 alberto@example.com true
2 foobar false
3 disposable.style.email.with+symbol@example.com true
4 "john..doe"@example.org true
5 i_like_underscore@but_its_not_allow_in_this_part.example.com false
但是当我查询 table 并尝试使用这样的函数时
SELECT email, `project-name`.udf_library.is_valid_email(email) as validEmail
FROM `project-name.Mydataset.MyTable`
我明白了:
未找到函数:project-name
.udf_library.is_valid_email [1:15]
如果我将它创建为临时函数,它确实有效,但这违背了拥有永久 UDF 的全部目的
有什么想法吗?
谢谢
请检查数据集 project-name.Mydataset
和 project-name.udf_library
的位置,它们必须位于同一区域,您的最后一个查询才能正常工作。
使用 WITH
准备数据的查询有效,因为它被路由到 UDF 所在的区域。最后一个查询可能已路由到数据所在的位置。