For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/ja/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/ja/llms-full.txt, and this page is available as Markdown at https://docs.dataplatform.ovh.net/ja/dpe-actions-custom.md.
  • 🇯🇵 日本語
  • カスタムアクションでカスタムPythonスクリプトを実行する

    この記事は、Data PlatformのPythonデータ処理エンジンを使用するアクションについて説明しています。Apache Sparkクラスターを使用するには、Custom PySpark actionを参照してください

    目的

    Info

    この記事は、Data PlatformのPythonデータ処理エンジンを使用するアクションについて説明しています。Apache Sparkクラスターを使用するには、Custom PySpark actionを参照してください。

    カスタムアクション は、スケーラブルなクラウドクラスタ環境でカスタムPythonスクリプトを実行することを可能にします。

    プラットフォームのさまざまなコンポーネントと簡単に相互作用するために、Software Development Kit (SDK)を使用して、カスタムアクション は、以下のようなさまざまなユースケースを実装するために使用できます。

    • データウェアハウスに対して操作アルゴリズムまたはETLジョブを実行する
    • 単純なデータ分析または機械学習アルゴリズムを実行する
    • Data Platformマーケットプレイスに利用できないデータソースからデータを抽出する(そのためにコネクタを作成する必要はありません)
    • リアルタイムデータ(MQTT、Kafkaなど)を抽出する
    Info

    カスタムアクションは、Data Processing Engineの全機能を活用できます。典型的には、アルゴリズムの実行を並列化するためのセグメンテーションの力または、即時またはスケジュールされた基準でトリガーされるワークフロー内のオーケストレーションです。

    カスタムアクションの設定

    プロジェクトのData Processing Engineで、Actionsタブに移動し、New Actionボタンをクリックします。アクションタイプとしてCustomを選択します。

    カスタムアクションの作成画面

    .pyスクリプトを「Drag and drop」セクションにドラッグアンドドロップします。 または、Start with a boilerplateオプションを選択して、プラットフォームのPythonインターフェースで例のコードスニペットから直接開始します。

    カスタムアクションの作成画面

    実行する関数の名前は、画面の上部の情報パネルで手動で入力する必要があります(こことデフォルトで:「customfunc」)。

    ソースファイルを編集インターフェースで直接編集したり、必要に応じて新しいファイルをドロップしたりできます。独自のカスタムアクションを開発している場合、Software Development Kit (SDK)で提供されるすべての関数を使用できます。プラットフォームの他のコンポーネントと簡単に相互作用できます。 すべての利用可能なSDK関数についてさらに詳しくは、以下の記事を参照してください。

    Discover all SDK methods

    Info

    スクリプトが標準出力または標準エラーに書き込むものは、print()呼び出しを含むすべてのものが、loggingモジュールを通じて発行されたメッセージとともにジョブログに表示されます。

    ヘルパーパネルの使用

    DPE Custom action helper

    カスタムアクションエディタにはヘルパーパネルが含まれており、スクリプトを離れずにガイダンスを受けられます。

    • シナリオ:カテゴリ別に整理された、使用可能なアクションスクリプトで、コピーしてユースケースに合わせて変更できます。
    • SDKガイド:スクリプトから呼び出せるSDKメソッドのドキュメント。
    • データ:エディタから直接プロジェクトのデータをブラウズして、コードを書く間に名前と構造を確認できます。
    • FAQ:カスタムアクションに関する一般的な質問への回答。
    Info

    ヘルパーコンテンツは、ノートブックのData Platform Extensionを駆動するライブカタログと同じものです。常に最新です。

    依存関係の管理

    言語バージョンの設定

    カスタムアクションのPythonバージョンを以下のいずれかから選択できます。

    • Python 3.11
    • Python 3.9 (デフォルトオプション)
    Info

    ワークフローは、一度に複数のバージョンで実行できません。

    Info

    利用可能なバージョンを定期的に更新して、ベストプラクティスの開発フレームワークを提供しています。言語バージョンがまだサポートされている限り、既存の作業は新しいバージョンに移行されません。

    Pythonパッケージのインストール

    デフォルトで含まれていない特定のパッケージをインストールする必要がある場合があります。「pip」(Pythonパッケージマネージャー)の基本的なリクエストファイルで使用される形式に従って、「Python Requirements」フィールドに追加し、キーボードの「ENTER」を押します。

    「ENTER」を押した後、このように表示されます。

    カスタムアクションの作成画面
    Info

    Always-up実行環境でカスタムアクションを使用している場合、依存関係を更新すると、環境を再デプロイして変更を有効にします。

    Gitリポジトリからのパッケージのインストール

    git+プレフィックスをリクエストに使用して、GitHubまたはGitLabリポジトリから直接Pythonパッケージをインストールできます。

    git+https://github.com/{OWNER}/{REPO}.git

    特定のバージョンを固定するには、タグまたはコミットハッシュを追加します。

    git+https://github.com/{OWNER}/{REPO}.git@<tag>

    最新リリースの自動インストール

    バージョンタグを手動で追跡せずに、常に最新の公開リリースをインストールするには、@latestを使用します。

    git+https://github.com/{OWNER}/{REPO}.git@latest

    プラットフォームはgit+プレフィックスと@latestサフィックスを検出し、最新のリリースタグを解決してインストールする前に自動的に置き換えます。

    Info

    Git依存関係を追加または変更した後、Force Buildをクリックして再インストールします。モジュールの新しいバージョンが公開されるたびにタグまたはコミットハッシュを手動で更新する必要はありませんが、最新のリリースは実行時に自動的に取得されません。Force Buildを手動で実行する必要があります。

    デフォルトの依存関係リスト

    Warning

    Data Platformは、バグ修正をインストールできるように、バージョンのマイナーバージョンをブロックします。ライブラリのより新しいバージョンが必要な場合は、「Requirements」フィールドに同じパッケージを新しいバージョンで追加して手動でオーバーライドできます。

    Data Processing Engineワーカーに同梱されているすべてのパッケージとそのバージョン(pipのリクエストファイルで見つけることができるように)のリストは以下の通りです。

    Discover all default Python packages

    サンプルスクリプトの例

    デフォルトデータセットにファイルを抽出して読み込む例

    import logging
    import sys
    from forepaas.dwh import connect
    from forepaas.dwh import bulk_insert
    
    def customfunc(event):
        logger = logging.getLogger(__name__)
        
        try:
            logger.info("Begin function")
            
            # Connect to the source connector
            connector = connect("dwh/dropbox_test/consommations.csv")
            
            # Upload raw file from the source connector
            connection_str = get_raw(connector)
            
            # Connect to the source
            source = connect(connection_str)
            
            # Connect to the destination connector
            destination = connect("dwh/default_dataset/consommations")
            
            # Extract dataframe from source and bulk insert into the destination
            for df in extract(source):
                stats, error = bulk_insert(destination, "consommations", df)
                logger.info(stats)
                logger.info(error)
            
            del connector, source, destination
            logger.info("END function")
            
        except Exception as e:
            raise Exception("err:{} L:{}".format(e, sys.exc_info()[2].tb_lineno))
    

    2つのデータセット間のデータ転送の例

    import logging
    import sys
    from forepaas.dwh import connect
    from forepaas.dwh import bulk_insert
    
    def customfunc(event):
        logger = logging.getLogger(__name__)
        
        try:
            logger.info("Begin function")
            
            # Connection to a source datastore
            connector = connect("dwh/default_dataset/consommations")
            
            # Data extraction from the source by a SELECT
            lines = connector.select("consommations", {"filter_attribute": "2018-01-01"})
            
            del connector
            
            # Treatment of each line of the data
            for line in lines:
                line["new_insight"] = (line["factor1"] + line["factor2"] * 2) / 100
            
            # Connection to the destination datastore
            connector = connect("dwh/analytics_dataset/agr_consommations")
            
            # Bulk insert into the destination
            stats, err = bulk_insert(connector, "agr_consommations", lines)
            logger.info(stats)
            logger.info(err)
            
            del connector
            logger.info("END function")
            
        except Exception as e:
            raise Exception("err:{} L:{}".format(e, sys.exc_info()[2].tb_lineno))
    

    さらに詳しく

    ソリューションを実装するためのトレーニングや技術サポートが必要な場合は、営業担当者にお問い合わせください、またはこのリンクをクリックして見積もりを受け取り、プロフェッショナルサービスの専門家にプロジェクトのカスタム分析を依頼してください。

    専用DiscordチャネルでData Platformを構築するチームと直接質問し、フィードバックを共有し、相互作用できます。

    OVHcloudサービスについてサポートが必要な場合は、Help Centreでリクエストを作成してください。

    コミュニティのユーザーに参加してください。