Python プラグイン

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

構文

T|evaluate [hint.distribution= (single | per_node)] [ (autohint.remote | =local)] python(output_schema,スクリプト [,script_parameters] [,external_artifacts][,spill_to_disk])

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

パラメーター

名前 必須 説明
output_schema string ✔️ type Python コードによって返される表形式データの出力スキーマを定義するリテラル。 形式は 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 パッケージ リファレンス」を参照してください。

注意

  • 既定では、プラグインは numpynp としてインポートし、 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 は、次のようにする必要があります。

注意

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

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

外部パッケージの参照については、「 Python プラグインのパッケージをインストールする」を参照してください。

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

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

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 プラグインを呼び出します。

    • external_artifacts パラメーターに、zip ファイルの名前と参照 (SAS トークンを含む BLOB の URL) からなるプロパティ バッグを指定します。
    • インライン 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/kusto/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)] [ (autohint.remote=local | )] python(output_schema,スクリプト [,script_parameters] [,spill_to_disk])

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

パラメーター

名前 必須 説明
output_schema string ✔️ type Python コードによって返される表形式データの出力スキーマを定義するリテラル。 形式は 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

  • 既定では、プラグインは numpynp としてインポートし、 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 ライブラリを参照してください。

この機能はサポートされていません。