本文以在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并注册函数。
执行如下命令,将PY脚本文件上传为MaxCompute资源。
执行如下命令,注册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资源示例。