Python プラグイン

適用対象: ✅Microsoft FabricAzure データ エクスプローラー

Python プラグインは、Python スクリプトを使用してユーザー定義関数 (UDF) を実行します。 Python スクリプトは、表形式のデータを入力として取得し、表形式の出力を生成します。 プラグインのランタイムはクラスターのノードで実行されている サンドボックスでホストされます。

構文

T | evaluate [hint.distribution = (single | per_node)] [hint.remote = (auto | local)] python(output_schema, script [, script_parameters] [, external_artifacts][, spill_to_disk])

構文規則について詳しく知る。

パラメーター

件名 タイプ Required 説明
output_schema string ✔️ Python コードによって返される表形式データの出力スキーマを定義する type リテラル。 形式は typeof(ColumnName: ColumnType[, ...])です。たとえば、 typeof(col1:string, col2:long)。 入力スキーマを拡張するには、typeof(*, col1:string, col2:long) という構文を使用します。
script string ✔️ 実行する有効な Python スクリプト。 複数行の文字列を生成するには、 使用のヒントを参照してください。
script_parameters dynamic 予約された kargs ディクショナリとして Python スクリプトに渡される名前と値のペアのプロパティ バッグ。 詳しくは、「予約済み Python 変数」を参照してください。
hint.distribution string プラグインの実行を複数のクラスター ノードに分散するためのヒント。 既定値は single です。 single は、スクリプトの 1 つのインスタンスがクエリ データ全体に対して実行されることを意味します。 per_node は、Python ブロックの前のクエリが分散されている場合、スクリプトのインスタンスは、含まれているデータ上の各ノードで実行されることを意味します。
hint.remote string このヒントは、クロス クラスター クエリにのみ関連します。 既定値は auto です。 auto は、サーバーが Python コードを実行するクラスターを自動的に決定することを意味します。 値を local に設定すると、ローカル クラスターで Python コードが強制的に実行されます。 リモート クラスターで Python プラグインが無効になっている場合に使用します。
external_artifacts dynamic クラウド ストレージからアクセスできる成果物の名前と URL のペアのプロパティ バッグ。 詳細については、「 外部成果物の使用を参照してください。
spill_to_disk bool 入力テーブルを Python サンドボックスにシリアル化するための別の方法を指定します。 大きなテーブルをシリアル化する場合は、シリアル化を高速化し、サンドボックスのメモリ消費量を大幅に削減するため、true に設定します。 既定値は true です。

予約済み Python 変数

次の変数は、Kusto 照会言語と Python コード間のやり取りのために予約されています。

  • df: pandas DataFrame としての入力表形式データ (上記の T の値)。
  • kargs: Python 辞書としての引数 script_parameters の値。
  • result: Python スクリプトにより作成された pandas DataFrame。この値は、プラグインの後に続く Kusto クエリ演算子に送信される表形式データになります。

プラグインの有効化

プラグインは既定では無効です。 開始する前に、 前提条件の一覧を確認します。 プラグインを有効にし、Python イメージのバージョンを選択するには、クラスターで 使用可能な言語拡張機能を参照してください

Python サンドボックス イメージ

Python イメージのバージョンを別のマネージド イメージまたはカスタム イメージに変更するには、「 クラスター上の Python 言語拡張イメージを変更するを参照してください。

さまざまな Python イメージのパッケージの一覧については、Python パッケージ リファレンス 参照してください

Note

  • 既定では、プラグインは numpy np pandas pd としてインポートします。 必要に応じて、必要に応じて他のモジュールをインポートできます。
  • 一部のパッケージは、プラグインが実行されるサンドボックスによって適用される制限と互換性がない可能性があります。

クエリと更新ポリシーからのインジェストを使用する

  • 次のクエリでプラグインを使用します。
    • 非ストリーミング インジェストを使用してソース テーブルが取り込まれた更新ポリシーの一部として定義されている。
    • .set-or-append などクエリから取り込まれるコマンドの一部として実行される。
  • ソース テーブルがストリーミング インジェストを使用して取り込まれた更新ポリシーの一部として定義されているクエリでは、このプラグインを使用することはできません。

range x from 1 to 360 step 1
| evaluate python(
//
typeof(*, fx:double),               //  Output schema: append a new fx column to original table 
```
result = df
n = df.shape[0]
g = kargs["gain"]
f = kargs["cycles"]
result["fx"] = g * np.sin(df["x"]/n*2*np.pi*f)
```
, bag_pack('gain', 100, 'cycles', 4)    //  dictionary of parameters
)
| render linechart 

クエリ結果を示すサイン デモのスクリーンショット。

print "This is an example for using 'external_artifacts'"
| evaluate python(
    typeof(File:string, Size:string), ```if 1:
    import os
    result = pd.DataFrame(columns=['File','Size'])
    sizes = []
    path = '.\\\\Temp'
    files = os.listdir(path)
    result['File']=files
    for file in files:
        sizes.append(os.path.getsize(path + '\\\\' + file))
    result['Size'] = sizes
    ```,
    external_artifacts = 
        dynamic({"this_is_my_first_file":"https://kustoscriptsamples.blob.core.windows.net/samples/R/sample_script.r",
                 "this_is_a_script":"https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py"})
)
ファイル サイズ
this_is_a_script 120
this_is_my_first_file 105

パフォーマンスに関するヒント

  • プラグインの入力データセットを、必要な最小量 (列/行) に減らします。
    • 可能な場合は、Kusto のクエリ言語でソース データセットにフィルターを使用します。
    • ソース列のサブセットに対して計算を行うには、プラグインを呼び出す前に、その列だけをプロジェクトに含めます。
  • スクリプト内のロジックが配布可能な場合は、hint.distribution = per_nodeを使用します。
  • Python スクリプトのロジックを実装するときには、可能な限り Kusto のクエリ言語を使用してください。

使用上のヒント

  • クエリ エディターで Python スクリプトを含む複数行の文字列を生成するには、お気に入りの Python エディター (JupyterVisual Studio CodePyCharm など) から Python スクリプトをコピーし、クエリ エディターに貼り付けて、3 つの連続するバックティックを含む行間で完全なスクリプトを囲みます。 次に例を示します。

    ```
    python code
    ```

  • externaldata 演算子を使用して、Azure BLOB Storage などの外部の場所に格納したスクリプトの内容を取得します。

    let script = 
        externaldata(script:string)
        [h'https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py']
        with(format = raw);
    range x from 1 to 360 step 1
    | evaluate python(
        typeof(*, fx:double),
        toscalar(script), 
        bag_pack('gain', 100, 'cycles', 4))
    | render linechart 

外部成果物の使用

クラウド ストレージからの外部成果物をスクリプトで使用でき、実行時に使用できます。

外部成果物プロパティによって参照される URL は次の値である必要があります。

Note

マネージド ID を使用して外部成果物を認証する場合、 SandboxArtifacts の使用状況は、管理 ID ポリシー クラスター レベルで定義する必要があります

成果物は、スクリプトがローカルの一時ディレクトリ (.\Temp) から使用できます。 プロパティ バッグに指定された名前は、ローカル ファイル名として使用されます。 を参照してください。

外部パッケージの参照については、「 Install packages for the Python plugin(Python プラグインのパッケージのインストール)」を参照してください

外部成果物キャッシュの更新

クエリで使用される外部成果物ファイルは、クラスターにキャッシュされます。 クラウド ストレージ内のファイルを更新し、クラスターとの即時同期が必要な場合は、 .clear クラスター キャッシュの外部成果物コマンドを使用できます。 このコマンドは、キャッシュされたファイルをクリアし、後続のクエリが最新バージョンの成果物で確実に実行されるようにします。

Python プラグインのパッケージをインストールする

ほとんどのユース ケースでは、カスタム イメージを 作成することをお

次の理由により、パッケージを自分でインストールできます。

  • カスタム イメージを作成するためのアクセス許可がありません。
  • パッケージはプライベートです。
  • テスト用のアドホック パッケージ インストールを作成することを好み、カスタム イメージを作成するオーバーヘッドは必要ありません。

パッケージを次のようにインストールします。

前提条件

  1. パッケージをホストする BLOB コンテナーを作成します。できれば、クラスターと同じ場所に作成します。 たとえば https://artifactswestus.blob.core.windows.net/python では、クラスターが米国西部にあると想定されています。

  2. クラスターのコールアウト ポリシーを変更して、その場所へのアクセスを許可します。

    • この変更を行うには、AllDatabasesAdmin アクセス許可が必要です。

    • たとえば、https://artifactswestus.blob.core.windows.net/python にある BLOB にアクセスできるようにするには、次のコマンドを実行します。

    .alter-merge cluster policy callout @'[ { "CalloutType": "sandbox_artifacts", "CalloutUriRegex": "artifactswestus\\.blob\\.core\\.windows\\.net/python/","CanCall": true } ]'
    

パッケージをインストールする

  1. PyPi またはその他のチャネルのパブリック パッケージの場合は、パッケージとその依存関係をダウンロードします。

    • ローカルの Windows Python 環境の cmd ウィンドウで、次のコマンドを実行します。
    pip wheel [-w download-dir] package-name.
    
  2. 必要なパッケージとその依存関係を含む ZIP ファイルを作成します。

    • プライベート パッケージの場合は、パッケージのフォルダーとその依存関係のフォルダーを zip 圧縮します。
    • パブリック パッケージの場合は、前の手順でダウンロードしたファイルを zip 圧縮します。

    Note

    • Python エンジンとサンドボックス ランタイムのプラットフォーム (Windows では現在 3.6.5) と互換性のあるパッケージをダウンロードしてください
    • 親フォルダーではなく、.whl ファイル自体を zip 圧縮してください。
    • ベース サンドボックス イメージに同じバージョンが既に存在するパッケージの .whl ファイルをスキップできます。
  3. 成果物の場所 (手順 1) にある BLOB に zip ファイルをアップロードします。

  4. python プラグインを呼び出します。

    • 名前のプロパティ バッグと ZIP ファイルへの参照 (SAS トークンを含む BLOB の URL) を使用して、 external_artifacts パラメーターを指定します。
    • インライン Python コードで、sandbox_utilsからZipackageをインポートし、ZIP ファイルの名前を使用してそのinstall() メソッドを呼び出します。

偽のデータを生成する Faker パッケージをインストールします。

range ID from 1 to 3 step 1 
| extend Name=''
| evaluate python(typeof(*), ```if 1:
    from sandbox_utils import Zipackage
    Zipackage.install("Faker.zip")
    from faker import Faker
    fake = Faker()
    result = df
    for i in range(df.shape[0]):
        result.loc[i, "Name"] = fake.name()
    ```,
    external_artifacts=bag_pack('faker.zip', 'https://artifacts.blob.core.windows.net/Faker.zip?*** REPLACE WITH YOUR SAS TOKEN ***'))
ID 名前
1 Gary Tapia
2 Emma Evans
3 Ashley Bowen

Python プラグインを使用する UDF 関数のその他の例については、 Functions ライブラリを参照してください。

Python プラグインは、Python スクリプトを使用してユーザー定義関数 (UDF) を実行します。 Python スクリプトは、表形式のデータを入力として取得し、表形式の出力を生成します。

構文

T | evaluate [hint.distribution = (single | per_node)] [hint.remote = (auto | local)] python(output_schema, script [, script_parameters] [, spill_to_disk])

構文規則について詳しく知る。

パラメーター

件名 タイプ Required 説明
output_schema string ✔️ Python コードによって返される表形式データの出力スキーマを定義する type リテラル。 形式は typeof(ColumnName: ColumnType[, ...])です。たとえば、 typeof(col1:string, col2:long)。 入力スキーマを拡張するには、typeof(*, col1:string, col2:long) という構文を使用します。
script string ✔️ 実行する有効な Python スクリプト。 複数行の文字列を生成するには、 使用のヒントを参照してください。
script_parameters dynamic 予約された kargs ディクショナリとして Python スクリプトに渡される名前と値のペアのプロパティ バッグ。 詳しくは、「予約済み Python 変数」を参照してください。
hint.distribution string プラグインの実行を複数のクラスター ノードに分散するためのヒント。 既定値は single です。 single は、スクリプトの 1 つのインスタンスがクエリ データ全体に対して実行されることを意味します。 per_node は、Python ブロックの前のクエリが分散されている場合、スクリプトのインスタンスは、含まれているデータ上の各ノードで実行されることを意味します。
hint.remote string このヒントは、クロス クラスター クエリにのみ関連します。 既定値は auto です。 auto は、サーバーが Python コードを実行するクラスターを自動的に決定することを意味します。 値を local に設定すると、ローカル クラスターで Python コードが強制的に実行されます。 リモート クラスターで Python プラグインが無効になっている場合に使用します。
spill_to_disk bool 入力テーブルを Python サンドボックスにシリアル化するための別の方法を指定します。 大きなテーブルをシリアル化する場合は、シリアル化を高速化し、サンドボックスのメモリ消費量を大幅に削減するため、true に設定します。 既定値は true です。

予約済み Python 変数

次の変数は、Kusto 照会言語と Python コード間のやり取りのために予約されています。

  • df: pandas DataFrame としての入力表形式データ (上記の T の値)。
  • kargs: Python 辞書としての引数 script_parameters の値。
  • result: Python スクリプトにより作成された pandas DataFrame。この値は、プラグインの後に続く Kusto クエリ演算子に送信される表形式データになります。

プラグインの有効化

プラグインはデフォルトでは無効です。 開始する前に、KQL データベースで Python プラグインを有効にしてください。

Python サンドボックス イメージ

さまざまな Python イメージのパッケージの一覧については、Python パッケージ リファレンス 参照してください

Note

  • 既定では、プラグインは numpy np pandas pd としてインポートします。 必要に応じて、必要に応じて他のモジュールをインポートできます。
  • 一部のパッケージは、プラグインが実行されるサンドボックスによって適用される制限と互換性がない可能性があります。

クエリと更新ポリシーからのインジェストを使用する

  • 次のクエリでプラグインを使用します。
    • 非ストリーミング インジェストを使用してソース テーブルが取り込まれた更新ポリシーの一部として定義されている。
    • .set-or-append などクエリから取り込まれるコマンドの一部として実行される。
  • ソース テーブルがストリーミング インジェストを使用して取り込まれた更新ポリシーの一部として定義されているクエリでは、このプラグインを使用することはできません。

range x from 1 to 360 step 1
| evaluate python(
//
typeof(*, fx:double),               //  Output schema: append a new fx column to original table 
```
result = df
n = df.shape[0]
g = kargs["gain"]
f = kargs["cycles"]
result["fx"] = g * np.sin(df["x"]/n*2*np.pi*f)
```
, bag_pack('gain', 100, 'cycles', 4)    //  dictionary of parameters
)
| render linechart 

クエリ結果を示すサイン デモのスクリーンショット。

パフォーマンスに関するヒント

  • プラグインの入力データセットを、必要な最小量 (列/行) に減らします。
    • 可能な場合は、Kusto のクエリ言語でソース データセットにフィルターを使用します。
    • ソース列のサブセットに対して計算を行うには、プラグインを呼び出す前に、その列だけをプロジェクトに含めます。
  • スクリプト内のロジックが配布可能な場合は、hint.distribution = per_nodeを使用します。
  • Python スクリプトのロジックを実装するときには、可能な限り Kusto のクエリ言語を使用してください。

使用上のヒント

  • クエリ エディターで Python スクリプトを含む複数行の文字列を生成するには、お気に入りの Python エディター (JupyterVisual Studio CodePyCharm など) から Python スクリプトをコピーし、クエリ エディターに貼り付けて、3 つの連続するバックティックを含む行間で完全なスクリプトを囲みます。 次に例を示します。

    ```
    python code
    ```

  • externaldata 演算子を使用して、Azure BLOB Storage などの外部の場所に格納したスクリプトの内容を取得します。

    let script = 
        externaldata(script:string)
        [h'https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py']
        with(format = raw);
    range x from 1 to 360 step 1
    | evaluate python(
        typeof(*, fx:double),
        toscalar(script), 
        bag_pack('gain', 100, 'cycles', 4))
    | render linechart 

Python プラグインを使用する UDF 関数のその他の例については、 Functions ライブラリを参照してください。