tencent cloud

Data Lake Compute

製品概要
プロダクト概要
製品の強み
適用シーン
購入ガイド
課金概要
返金説明
支払い期限切れ説明
設定調整費用の説明
クイックスタート
新規ユーザー開通フルプロセス
DLC データインポートガイド
DLCデータ分析の1分間入門
DLC権限管理の1分間入門
パーティションテーブル1分間入門
データ最適化をオンにする
クロスソース分析 EMR Hive データ
標準エンジン構成ガイド
操作ガイド
コンソール操作紹介
開発ガイド
実行環境
SparkJar ジョブ開発ガイド
PySparkジョブ開発ガイド
「クエリパフォーマンス最適化ガイド」
UDF 関数開発ガイド
システム制約
クライアントアクセス
JDBCアクセス
TDLC コマンドラインツールにアクセス
サードパーティソフトウェア連携
Python にアクセス
実践チュートリアル
DLC を Power BI に接続
テーブル作成の実践
Apache Airflowを使用してDLCエンジンのタスクをスケジュールして送信する
StarRocks は DLC 内部ストレージを直接クエリします
Spark の計算コスト最適化プラクティス
DATA + AI
ロールSSOを使用してDLCにアクセスする
SQL構文
SuperSQL構文
標準 Spark 構文概要
標準 Presto 構文の概要
予約語
API Documentation
History
Introduction
API Category
Making API Requests
Data Table APIs
Task APIs
Metadata APIs
Service Configuration APIs
Permission Management APIs
Database APIs
Data Source Connection APIs
Data Optimization APIs
Data Engine APIs
Resource Group for the Standard Engine APIs
Data Types
Error Codes
一般クラスリファレンス
エラーコード
クォータと制限
サードパーティソフトウェアでDLCに接続する操作ガイド
よくあるご質問
権限に関するよくあるご質問
エンジン類のよくある質問
機能に関するよくあるご質問
Sparkジョブクラスに関するよくある質問
DLC ポリシー
プライバシーポリシー
データプライバシーとセキュリティ契約
お問い合わせ

UDF 関数開発ガイド

フォーカスモード
フォントサイズ
最終更新日: 2025-12-26 17:35:44

UDF 説明

ユーザーはUDF関数を作成し、JARファイルにパッケージ化した後、データレイク計算で関数として定義し、クエリ分析で使用できます。現在、データレイク計算DLCのUDFはHIVE形式で、org.apache.hadoop.hive.ql.exec.UDFを継承し、evaluateメソッドを実装しています。 例:シンプルな配列UDF関数。
public class MyDiff extends UDF {
public ArrayList<Integer> evaluate(ArrayList<Integer> input) {
ArrayList<Integer> result = new ArrayList<Integer>();
result.add(0, 0);
for (int i = 1; i < input.size(); i++) {
result.add(i, input.get(i) - input.get(i - 1));
}
return result;
}
}
pomファイルの参照:
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.16</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>

UDF Jarパッケージのベストプラクティス

UDFのJarパッケージは、関数の登録または使用時にのみエンジンにロードされます。UDFを使用する際には、以下の特性に注意することをお勧めします:
1. Jarパッケージのホットアップデート
SparkはデフォルトでJarパッケージのホットアップデートをサポートしていません。DLCではspark.jars.update.enabled=true(エンジン静的レベルパラメータ、エンジンの再起動が必要、標準エンジン20250630以降のバージョンでサポート)を設定することで有効にできますが、本番環境では誤ってCOS上のJarパッケージを更新して本番環境に影響を与える可能性があるため、有効にすることを推奨しません。
2. Jarパッケージのバージョンと同名クラス。
JavaのClassLoaderはすでにロードされたJarパッケージからクラス情報を優先的に検索するため、複数のバージョンや異なる名前のJarパッケージに同じ名前のクラスが含まれているシナリオを避ける必要があります。そうしないと、JVMが古いクラスをロードして計算結果が誤る可能性があります。
3. Jarパッケージのセキュリティチェック。
DLC の Spark エンジンで UDF 経由で Jar パッケージをロードする際、Jar パッケージにチェック層を追加するオプションがあります。以下の2つのパラメータ(タスクレベルパラメータ、エンジンの再起動不要)で調整可能です:
spark.sql.udf.check.jar:デフォルト値はfalseで、Jarパッケージのチェックを有効にします。
spark.sql.udf.check.timeout.milliseconds:デフォルト値は30000で、同期チェックの時間です。チェック時間がこの値を超えた場合、チェックを中止します。
チェックの内容は主に、Jarパッケージに問題がないか確認し、エンジンの実行環境を汚染しないようにすることで、以下を含みます:
指定されたUDFのクラスが存在するかどうかを確認します。
指定されたUDFのクラスが正常に初期化できるかどうかを確認します。例えば、static静的コードブロックが正常かどうかなどです。
指定されたJarパッケージに新しいClass-Pathが導入されているかどうかを確認します。例えば、META-INFでClass-Path: .が定義されている場合、循環ロードが発生する可能性があります。
指定されたJarパッケージの署名に問題がないかどうかを確認します。例えば、signatureが不正な場合、Jarパッケージがロードできなくなる可能性があります。
チェックに合格しない場合、「Resource/Class cannot be loaded safely, the source jar should be ignored」と表示され、問題のあるJarパッケージがエンジンにインストールされてクラスタが使用不能になるのを防ぎます。

関数を作成

方法1:SQLコマンドで作成

詳細は、データ探索CREATE FUNCTION構文を実行して関数の作成を完了できます:
-一時的な関数を作成します(一時的な関数はJarパッケージをエンジンにリアルタイムでロードし、現在のセッションでのみ有効です)
create temp function DB.TEMP_FUNCTION as 'JAR_CLASS_NAME' using jar 'cosn://bucket/path/to/jar';
-- 常駐関数を作成(メタデータセンターに登録し、呼び出し時にJarパッケージをエンジンにロード)
create function DB.FUNCTION as 'JAR_CLASS_NAME' using jar 'cosn://bucket/path/to/jar';

方法2:コンソールで作成

注意:
作成する関数がUDAF/UDTFの場合、関数名にそれぞれ_udaf/_udtfのサフィックスを追加する必要があります。
1. データレイク計算コンソールにログインし、サービス地域を選択します。
2. 左側のナビゲーションメニューからデータ管理に入り、作成する関数のデータベースを選択します。新しいデータベースを作成する必要がある場合は、データベース管理を参照してください。
3. 関数をクリックして、関数管理ページに入ります。
4. 関数を作成をクリックして作成します。

UDFのプログラムパッケージは、ローカルアップロードまたはCOSパス(COS関連の権限が必要)の選択をサポートしています。例として、COSパスを選択して作成します。 関数クラス名には「パッケージ情報」および「関数の実行クラス名」が含まれます。

関数を使用

1. データレイク計算コンソールにログインし、サービス地域を選択します。
2. 左側のナビゲーションメニューからデータ探索に入り、計算エンジンを選択すると、SQLを使用して関数を呼び出すことができます(注意:専用エンジンを選択してください。共有エンジンはカスタムudf関数の使用をサポートしていません)。


Python UDF 開発

Python UDF 機能を使用するには、クラスターを最新バージョンにアップグレードしてください。現在のクラスターがサポートされているかどうかは、チケットを提出する ことでご相談いただけます。
1. SuperSQL-S 1.0 バージョン(現在このバージョンのみサポート)のクラスターを選択して購入してください。

2. クラスターのPython UDF機能を有効にします。
デフォルトでは、Python UDF機能は有効になっていません。SuperSQLエンジンページで、有効にするエンジンを選択し、パラメータ設定をクリックして設定を追加してください。spark.sql.pyudf.enabled = trueと入力した後、確認をクリックして保存します。
SparkSQLクラスターはクラスターの再起動後に有効になります。
SparkBatchクラスタの次のタスクが有効になります。

3. Python UDF関数を登録します。
DLCは完全にコミュニティ互換のUDF関数をサポートします。
例として、以下のファイルdemo.pyを編集してください:

def name_sensitivity(name):
if len(name) > 2:
return name[0] + '*' * (len(name) - 2) + name[-1]
elif len(name) == 2:
return '*' + name[-1]
else:
return name
現在は単一のPythonファイルをサポートしています。
組み込みモジュールのimportのみサポートされています。
関数の入力と出力の型にご注意ください。
関数の例外処理にご注意ください。

4. データ探索インターフェースで、Python UDFをサポートするクラスターを使用し、Sessionパラメータeos.sql.processType=DIRECTを設定してください。このパラメータを編集できない場合は、チケットを提出してご連絡ください。

Python UDF関数を編集・変更する必要がある場合、SparkSQLクラスターのロードメカニズムには約30秒の遅延がありますが、SparkBatchクラスターでは次のタスクで即時有効になります。
現在のPython UDF関数を削除する必要がある場合、SparkSQLクラスターはクラスターの再起動が必要で、SparkBatchクラスターは次のタスクで即時有効になります。

Python関数編集権限の設定

説明:
データレイク DLC コンソール > メタデータ管理 > 関数で、関数名をクリックして関数詳細ページに入ります。表示のみ可能で、修正はサポートされていません。
Pythonで関数を作成する際、作成者と管理者に関数の編集権限の設定を許可します。手順は以下の通りです:

エントリー1:関数作成時に編集権限を設定する

1. データレイク DLC コンソールにログインし、サービス地域を選択します。
2. 左側のメニューバーからメタデータ管理に入り、関数ページを選択し、関数欄の左上にある青色のボタン関数を作成をクリックしてページに入ります。
3. 関数編集権限の右側にある展開をクリックすると、作成者はユーザーまたはワークグループ(組み合わせて選択可能)を選択して、関数の「編集」と「削除」の権限を付与できます。作成者と管理者はデフォルトですべての権限を持っています。
4. 設定が完了したら、確定をクリックすると、関数編集権限の設定が完了します。

エントリー2:既存の関数の編集権限を設定する

1. データレイク DLC コンソールにログインし、サービス地域を選択します。
2. 左側のメニューバーからメタデータ管理に入り、関数ページを選択し、編集したい関数の右側の操作欄にある編集ボタンをクリックすると、編集ページに移動できます。
3. 関数編集ページに移動した後、関数編集権限の右側にある展開をクリックすると、権限の変更と削除ができます。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック