对于字符串variab,如何在用python编写的MonetDB用户定义函数(udf)中返回空值

2024-09-28 21:51:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Python UDFs在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值本身。寻找MonetDBdocumentation,它表示“如果输入包含空值,“i”将是一个MaskedArray,否则“i”将是一个常规的一维Numpy数组。这是我找到的唯一的参考资料,但我不知道如何利用它对我有利。你知道吗


Tags: 函数字符串importstringfoonamesascreate