在字符串变量

时间:2017-10-06 21:18:52

标签: python numpy user-defined-functions monetdb

我正在尝试使用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数组”。这是我发现的唯一参考,但我不知道如何使用它对我有利。

0 个答案:

没有答案