我正在尝试使用Python UDF在MonetDB中实现一些字符串函数。我正在使用的一个简单函数是提取字符串的最后一个单词。问题是:当字符串为NULL
时,我必须为函数返回NULL
做什么?
到目前为止,我所做的是:
create function parea.lastname(s string)
returns varchar(255)
language python {
"""
Some description
"""
import numpy as np
import pandas as pd
# Convert strings scalars to an array type
if not isinstance(s, np.ndarray):
s = np.array([s], dtype=np.ndarray)
s = pd.Series(s)
res = s.str.split(' ').str.get(-1).values
return res
};
当我在具有NULL
值的表中测试此函数时,我得到了这个:
-- Create table
create table foo (names string);
insert into foo values ('NONONO DOS SANTOS'), ('HOYOHOYO'), (NULL);
-- Run the function
select names, parea.lastname(names) from foo;
结果:
+-------------------+----------------------+
| names | L3 |
+===================+======================+
| NONONO DOS SANTOS | SANTOS |
| HOYOHOYO | HOYOHOYO |
| null | -9223372036854775808 |
+-------------------+----------------------+
因此,该函数返回一些虚拟值,用于指示转换为字符串的NULL
,而不是NULL
值本身。寻找MonetDB documentation,它说“如果输入包含NULL值,”i“将是MaskedArray,否则”i“将是常规的一维Numpy数组”。这是我发现的唯一参考,但我不知道如何使用它对我有利。