ユーザー定義関数の実装 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink は、以前は Amazon Kinesis Data Analytics for Apache Flink と呼ばれていました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ユーザー定義関数の実装

ユーザー定義関数 (UDFs) は、頻繁に使用されるロジックまたはカスタムロジックを呼び出すことができる拡張ポイントで、クエリで特に表現することはできません。Python または Java や Scala などのJVM言語を使用して、Studio ノートブック内の段落UDFsに を実装できます。JVM 言語にUDFs実装された を含む Studio ノートブックの外部JARファイルに追加することもできます。

サブクラス UserDefinedFunction (または独自のJARs抽象クラス) を登録する抽象クラスを実装する場合は、Apache Maven で提供されるスコープ、Gradle でのcompileOnly依存関係宣言、 で提供されるスコープSBT、またはUDFプロジェクト構築設定で同等のディレクティブを使用します。これにより、UDFソースコードは Flink に対してコンパイルできますがAPIs、Flink API クラス自体はビルドアーティファクトに含まれません。Maven プロジェクトでこのような前提条件に準拠した UDF jar の例から、この pom を参照してください。

注記

コンソールを使用して Studio ノートブックにUDFJARファイルを追加するには、次の手順に従います。

  1. Amazon S3 にUDFJARファイルをアップロードします。

  2. で AWS Management Console、Studio ノートブックを作成するためのカスタム作成オプションを選択します。

  3. Studio ノートブック作成ワークフローに従って 設定 ステップまで進みます。

  4. [ユーザー定義関数] セクションで、[ユーザー定義関数を追加] を選択します。

  5. ファイルの Amazon S3 の場所、JARまたは の実装があるZIPファイルを指定しますUDF。

  6. [Save changes] (変更の保存) をクリックします。

を使用して新しい Studio ノートブックを作成するUDFJARときに CreateApplication を追加するにはAPI、 CustomArtifactConfiguration データ型でJAR場所を指定します。既存の Studio ノートブックUDFJARに を追加するには、 UpdateApplicationAPIオペレーションを呼び出し、 CustomArtifactsConfigurationUpdate データ型で JAR の場所を指定します。または、 を使用して Studio ノートブックにUDFJARファイル AWS Management Console を追加することもできます。

ユーザー定義関数に関する考慮事項

  • Apache Flink Studio 用 Managed Service では、「Apache Zeppelin の用語」が使われています。ここで、ノートブックは、複数のノートを含むことができる Zeppelin インスタンスです。これにより、各ノートには複数の段落を含めることができます。Apache Flink Studio 用 Managed Service では、インタープリタープロセスはノートブックのすべてのノートで共有されます。したがって、あるメモで createTemporarySystem関数を使用して明示的な関数登録を実行すると、同じノートブックの別のメモで同じ関数をそのまま参照できます。

    ただし、「アプリケーションとしてデプロイ」操作は、ノートブック内のすべてのノートではなく、「個々」のノートに適用されます。アプリケーションとしてデプロイすると、アクティブノートの内容のみがアプリケーションの生成に使用されます。他のノートブックで行われる明示的な関数登録は、生成されるアプリケーションの依存関係の一部ではありません。さらに、アプリケーションとしてデプロイオプションでは、 のメインクラス名を小文字の文字列に変換することで、暗黙JAR的な関数登録が行われます。

    例えば、 TextAnalyticsUDFが UDF のメインクラスである場合JAR、暗黙的な登録は関数名 になりますtextanalyticsudf。そのため、Studio のノート 1 に次のような明示的な関数登録があった場合、共有インタープリタがあるため、そのノート(例えばノート 2)の他のすべてのノートは、名前 myNewFuncNameForClass でその関数を参照することができ

    stenv.createTemporarySystemFunction("myNewFuncNameForClass", new TextAnalyticsUDF())

    しかし、ノート 2 のアプリケーションとしてデプロイする操作では、この明示的な登録は依存関係に「含まれない」ため、デプロイされたアプリケーションは期待通りに動作しません。暗黙的に登録されるため、デフォルトでは、この関数へのすべての参照は myNewFuncNameForClass ではなく textanalyticsudf であることが想定されます。

    カスタム関数名を登録する必要がある場合は、ノート 2 自体に別の段落を設け、次のように明示的に登録することが想定されます。

    %flink(parallelism=l) import com.amazonaws.kinesis.udf.textanalytics.TextAnalyticsUDF # re-register the JAR for UDF with custom name stenv.createTemporarySystemFunction("myNewFuncNameForClass", new TextAnalyticsUDF())
    %flink. ssql(type=update, parallelism=1) INSERT INTO table2 SELECT myNewFuncNameForClass(column_name) FROM table1 ;
  • UDF JAR に Flink が含まれている場合はSDKs、UDFソースコードが Flink に対してコンパイルできるように Java プロジェクトを設定します。ただしSDKs、Flink SDK クラス自体はビルドアーティファクトに含まれません。たとえば、 ですJAR。

    Apache Maven ではprovidedスコープ、Gradle ではcompileOnly依存関係宣言、 ではprovidedスコープSBT、またはUDFプロジェクト構築設定では同等のディレクティブを使用できます。この pom は jar UDF の例から参照できます。この例は、Maven プロジェクトでこのような前提条件に準拠しています。完全な step-by-step チュートリアルについては、「Amazon Managed Service for Apache Flink、Amazon Translate、および Amazon Comprehend でSQL関数を使用してストリーミングデータを翻訳、編集、分析する Amazon Comprehend」を参照してください。