このトピックでは、MaxComputeクライアントでPythonのユーザー定義関数 (UDF) を使用してテーブルリソースを参照する方法について説明します。
前提条件
次の要件が満たされていることを確認してください。
MaxComputeクライアントがインストールされ、設定されます。
MaxComputeクライアントのインストールと設定方法の詳細については、「MaxComputeクライアントのインストールと設定」をご参照ください。
参照するテーブルは、リソースとしてMaxComputeプロジェクトに追加されます。
次の例では、udf_testテーブルがリソースとしてMaxComputeプロジェクトに追加されます。 テーブルには次のデータが含まれています。
+------------+------+ | col1 | col2 | +------------+------+ | 1 | a | | 2 | b | | 4 | c | | 5 | d | +------------+------+リソースの追加方法の詳細については、「リソースの追加」をご参照ください。
開発と使用手順
1. UDFを書く
次のサンプルコードは、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)上記のサンプルコードをPythonスクリプトとして保存し、MaxComputeクライアントのbinディレクトリにPythonスクリプトを保存します。 この例では、Pythonスクリプトの名前はtable.pyです。
2. リソースのアップロードとUDFの作成
UDFコードを開発およびデバッグした後、MaxComputeクライアントのMaxComputeにリソースをアップロードし、UDFを作成します。
次のコマンドを実行して、PythonスクリプトファイルをリソースとしてMaxComputeに追加します。
add py table.py;次の応答が返されます。
OK: Resource 'table.py' have been created.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.UDFの作成方法の詳細については、「UDFの作成」をご参照ください。
3. UDFを使用するUse the UDF
UDFの作成後、次のコマンドを実行してテストデータを作成し、UDFを呼び出します。
-- Create a test table.
create table table_test (arg bigint);
-- Insert data into the table.
insert into table_test values (1), (4), (15), (123), (7995);
-- Call the created function in the SQL statement.
select table_udf() from table_test;次の応答が返されます。
+-----+
| _c0 |
+-----+
| (4, 'c') |
| (5, 'd') |
| (1, 'a') |
| (2, 'b') |
| NULL |
+-----+関連ドキュメント
Javaユーザー定義テーブル値関数 (UDTF) を使用してMaxComputeテーブルリソースを読み取る方法の例の詳細については、「Java UDTFを使用してMaxComputeからリソースを読み取る」をご参照ください。