使用 VS Code 调试 Kusto 查询语言内联 Python

Azure 数据资源管理器支持使用 python() 插件运行 Kusto 查询语言中嵌入的 Python 代码。 插件运行时托管在沙盒中,这是一个隔离的安全 Python 环境。 python() 插件功能扩展了 Kusto 查询语言的本机功能,并提供了大量的 OSS Python 包。 使用此扩展,你可以在查询中运行高级算法,例如机器学习、人工智能、统计和时间系列。

Kusto 查询语言工具不适用于开发和调试 Python 算法。 因此,请在你喜欢使用的 Python 集成开发环境(例如 Jupyter、PyCharm、VS 或 VS Code)中开发算法。 完成算法后,复制并粘贴到 KQL 中。 为了改进和简化此工作流,Azure 数据资源管理器支持在 Kusto Explorer 或 Web UI 客户端与 VS Code 之间进行集成,以便创作和调试 KQL 内联 Python 代码。

注意

此工作流仅可用来调试相对较小的输入表(最大为几 MB)。 因此,你可能需要限制用于调试的输入。 如果需要处理大型表,请使用 | take| samplewhere rand() < 0.x 限制对该表的调试。

先决条件

在客户端应用程序中运行查询

  1. 在客户端应用程序中,为包含内联 Python 的查询添加 set query_python_debug; 前缀

  2. 运行该查询。

    • Kusto Explorer:VS Code 是通过 debug_python.py 脚本自动启动的。
    • Kusto Web UI:
      1. 下载并保存 debug_python.pydf.txtkargs.txt。 在窗口中,选择“允许”。 将文件保存到所选目录中。

        Web UI downloads the inline python files.

      2. 右键单击 debug_python.py 并使用 VS Code 将其打开。 debug_python.py 脚本包含来自 KQL 查询的内联 Python 代码(以模板代码作为前缀,用以初始化来自 df.txt 的数据帧和来自 kargs.txt 的参数字典)。

  3. 在 VS Code 中,启动 VS Code 调试程序:“调试”>“启动调试(F5)”,然后选择 Python 配置 。 调试器将启动,并自动设置断点来调试内联代码。

VS Code 中的内联 Python 调试如何工作?

  1. 查询将在服务器中进行分析和执行,直至到达所需的 | evaluate python() 子句。
  2. 将调用 Python 沙盒,但不运行代码,而是对输入表、参数字典和代码进行序列化,然后将其发送回客户端。
  3. 这三个对象保存在三个文件中:df.txtkargs.txtdebug_python.py,这些文件位于所选目录 (Web UI) 或客户端 %TEMP% 目录 (Kusto Explorer) 中。
  4. VS Code 会启动并预加载 debug_python.py 文件,该文件包含一个前缀代码用于初始化来自对应文件的 df 和 kargs,该代码后面是嵌入 KQL 查询的 Python 脚本。

查询示例

  1. 在客户端应用程序中运行以下 KQL 查询:

    range x from 1 to 4 step 1
    | evaluate python(typeof(*, x4:int), 
    'exp = kargs["exp"]\n'
    'result = df\n'
    'result["x4"] = df["x"].pow(exp)\n'
    , bag_pack('exp', 4))
    

    查看生成的表:

    x x4
    1 1
    2 16
    3 81
    4 256
  2. 使用 set query_python_debug; 在客户端应用程序中运行相同的 KQL 查询:

    set query_python_debug;
    range x from 1 to 4 step 1
    | evaluate python(typeof(*, x4:int), 
    'exp = kargs["exp"]\n'
    'result = df\n'
    'result["x4"] = df["x"].pow(exp)\n'
    , bag_pack('exp', 4))
    
  3. VS Code 将启动:

    launch VS Code.

  4. VS Code 将进行调试并在调试控制台中输出“result”数据帧:

    VS Code debug.

注意

Python 沙盒映像与你的本地安装之间可能存在差异。 通过对插件进行查询来检查特定包的沙盒映像

注意

如果在启动 VS Code 调试会话时出错,请尝试将默认终端配置文件设置为命令提示符:

  • 按 CTRL + SHIFT + P 打开命令面板。
  • 搜索“终端: 选择默认配置文件”,然后选择“命令提示符”