全部产品
Search
文档中心

云原生大数据计算服务 MaxCompute:UDF示例:引用表资源

更新时间:Mar 27, 2024

本文以在MaxCompute客户端操作为例,为您介绍如何通过Python UDF引用表资源。

前提条件

请确认您已完成如下操作:

  • 已安装并配置MaxCompute客户端。

    更多安装并配置MaxCompute客户端信息,请参见安装并配置MaxCompute客户端

  • 已将待引用的表添加为MaxCompute项目中的资源。

    本文已添加的表资源示例为udf_test,包含的数据如下。

    +------------+------+
    | col1       | col2 |
    +------------+------+
    | 1          | a    |
    | 2          | b    |
    | 4          | c    |
    | 5          | d    |
    +------------+------+

    更多添加资源操作,请参见添加资源

开发和使用步骤

1. 开发代码

Python UDF代码如下,实现遍历引用的表资源(例如udf_test)中的数据,返回数组格式的数据。

from odps.udf import annotate
from odps.distcache import get_cache_table
@annotate('->string')
class DistCacheTableExample(object):
    def __init__(self):
        self.records = list(get_cache_table('udf_test'))
        self.counter = 0
        self.ln = len(self.records)
    def evaluate(self):
        if self.counter > self.ln - 1:
            return None
        ret = self.records[self.counter]
        self.counter += 1
        return str(ret)

将上述代码示例保存为PY脚本文件(例如table.py),并放置在MaxCompute客户端的bin目录中。

2. 上传资源和注册函数

完成UDF代码开发和调试之后,在MaxCompute客户端中将资源上传至MaxCompute并注册函数。

  1. 执行如下命令,将PY脚本文件上传为MaxCompute资源。

    add py table.py;

    返回结果如下。

    OK: Resource 'table.py' have been created.

    更多添加资源命令信息,请参见添加资源

  2. 执行如下命令,注册Python UDF,即注册函数。

    create function table_udf as 'table.DistCacheTableExample' using 'table.py,udf_test';

    其中:

    • table_udf表示注册的Python UDF名称,即后续在SQL语句中调用的自定义函数名称。

    • table.DistCacheTableExample中,table表示table.py脚本文件的名称,DistCacheTableExample为table.py脚本文件中定义的类。

    返回结果如下。

    Success: Function 'table_udf' have been created.

    更多注册函数信息,请参见注册函数

3. 使用示例

成功注册UDF后,执行以下命令,构造测试数据并调用注册的函数。

--创建测试表。
create table table_test (arg bigint);
--插入数据。
insert into table_test values (1), (4), (15), (123), (7995);
--在SQL语句中调用新注册的函数。
select table_udf() from table_test;

返回结果如下。

+-----+
| _c0 |
+-----+
| (4, 'c') |
| (5, 'd') |
| (1, 'a') |
| (2, 'b') |
| NULL |
+-----+

相关文档

基于Java语言实现的读取MaxCompute表资源的示例请参见Java UDTF读取MaxCompute资源示例