- SQL を使用する
- UI と独自のコードを使用する (公開ベータ)
SQL ユーザー定義関数
CREATE FUNCTION ステートメントで作成できます。
この例では、シンプルな実行可能ユーザー定義関数 isBusinessHours を作成します。
この関数は、特定のタイムスタンプが通常の営業時間内かどうかを確認し、該当すれば true、そうでなければ false を返します。
- Cloud Console にログインし、SQL コンソールを開きます
- 次の SQL クエリを入力して
isBusinessHours関数を作成します:
- 新しく作成したUDFをテストするには、以下を実行します。
DROP FUNCTIONコマンドを使って、先ほど作成した UDF を削除できます。
- セッションレベルの設定 (
SETステートメントで設定したもの) は、UDF の実行コンテキストには引き継がれません - ユーザープロファイルの設定は UDFs に継承されません
- クエリレベルの設定は UDF の実行中には適用されません
UI で作成するユーザー定義関数
timestamp が通常の営業時間内かどうかを判定する、前回と同じシンプルな実行可能ユーザー定義関数 isBusinessHours を作成します。
前回は SQL を使って作成しましたが、今回は Python で実装し、UI から設定します。
Python ファイルを作成する
ローカルで新しいファイルmain.py を作成します。requirements.txt ファイルに記載すれば、ClickHouse Cloud がインストールしてくれます。代わりに依存関係を ZIP に直接含めることもできますが、その場合は両方の CPU アーキテクチャ向けにキャッシュ済みのパッケージを含める必要があるため、requirements.txt を使うほうが簡単です。たとえば、次のようになります。ClickHouse Cloud では、次の手順で UI からアップロードする zip ファイル内に
main.py が含まれていることを想定しています。
別のファイル名にすると、エラーが発生します。依存関係パッケージとローカルファイルをまとめる
依存関係パッケージや追加のローカルファイル (wheel ファイル、設定ファイル、データファイルなど) を含めるには、main.py と requirements.txt と同じディレクトリに配置します。ZIP アーカイブを作成する際は、すべてのファイルを含めてください。os.path.dirname(os.path.abspath(__file__)) を使って、ローカルにバンドルされた path のベース directory を参照できます。これにより、ZIP アーカイブ内で main.py が配置されている directory の絶対 path が返され、バンドルされたほかのファイルにアクセスできるようになります。- UDF に含まれている構成ファイルにアクセスする
- カスタム依存関係の wheel パッケージを読み込む
- 追加のスクリプトやデータファイルを参照する
UI で UDF を作成する
- Cloud コンソールのホームページで、左下のメニューにある組織名をクリックします。
- メニューから ユーザー定義関数 を選択します。
- ユーザー定義関数ページで UDF を設定 をクリックします。画面右側に設定パネルが開きます。
- 関数名を入力します。この例では
isBusinessHoursを使用します。 - 関数タイプとして Executable pool または Executable を選択します。
- Executable pool: 永続的なプロセスのプールが維持され、読み取り時にはそのプールからプロセスが割り当てられます。
- Executable: スクリプトはクエリごとに実行されます。
- この例では、デフォルト設定を使用します。設定パラメーターの一覧については、Executable user-defined functions を参照してください。
- ファイルを参照 をクリックして、このチュートリアルの冒頭で作成した
.zipファイルをアップロードします。 - 新しい引数を追加します。この例では、型
DateTimeの引数timestampを追加します。 - 戻り値の型を選択します。この例では
Boolを選択します。 - UDF を作成 をクリックします。現在のビルドステータスを示すダイアログが表示されます。
- 問題がある場合、ステータスは error に変わります。
- 問題がなければ、ステータスは building から provisioning に進みます。プロビジョニングを完了するには、サービスが稼働中である必要があります。サービスがアイドル状態の場合は、サービス名の横にある UDF details パネルで Wake Up Service をクリックします。
- 完了すると、ステータスは deployed に変わります。
UDFをテストする
- ページ左上の Settings - return to your service view をクリックして、SQL Console のホーム画面に戻ります
- 左側のメニューで SQL Console をクリックします
- 次のクエリを入力します:
新しいバージョンを作成する
UDF のコードを変更するには、新しいバージョンを作成します。Edit パネルで管理できるのは、UDF をどのサービスに割り当てるかだけです。そこでファイルをアップロードしても、デプロイ済みのコードは置き換えられません。- Cloud Console のホーム画面で、左下のメニューにある組織名をクリックします。
- メニューから User-defined functions を選択します。
isBusinessHoursUDF の Actions にある 3 点メニューを選択し、Create new version をクリックします- 変更したコードを含む zip をアップロードするか、設定を変更してから Create new version をクリックします