【问题标题】:Parametrize and loop KQL queries in JupyterLab在 JupyterLab 中参数化和循环 KQL 查询
【发布时间】:2021-02-05 00:42:10
【问题描述】:

我的问题是如何在 Jupyter 实验室的 KQL 魔术命令的循环中分配变量。我参考了微软关于这个主题的文档,并将我的问题基于这里给出的代码: https://docs.microsoft.com/en-us/azure/data-explorer/kqlmagic

1。下面的第一个查询

%%kql  
StormEvents  
| summarize max(DamageProperty) by State  
| order by max_DamageProperty desc  
| limit 10  

2。第二:将生成的查询转换为数据框并将变量分配给'statefilter'

df = _kql_raw_result_.to_dataframe()  
statefilter =df.loc[0].State  
statefilter  

3。这是我想修改上述查询并让 statefilter 有多个变量(即由不同的状态组成)的地方:

df = _kql_raw_result_.to_dataframe()  
statefilter =df.loc[0:3].State  
statefilter

4。最后,我想在 for 循环中为 statefilter 中的每个变量运行我的 kql 查询。下面的语法可能不正确,但它可以为我正在寻找的内容提供一个示例:

dfs = [] # an empty list to store dataframes  

for state in statefilters:  
  %%kql  
  let _state = state;  
  StormEvents  
  | where State in (_state)  
  | do some operations here for that specific state   
  df = _kql_raw_result_.to_dataframe()  
  dfs.append(df)  # store the df specific to state in the list  

我没有在 KQL 查询中查询所有所需状态的原因是为了防止将非常大的查询结果分配给数据帧。这不是针对此样本StormEvents 具有合理大小的表,而是针对我的研究数据,该数据包含许多站点并且非常大。因此,我希望能够在 for 循环中为每个站点运行 KQL 查询/分析,并将每个站点的查询结果分配给数据框。请让我知道这是否可行,或者在 KQL 中可能有其他合乎逻辑的方法...

【问题讨论】:

    标签: jupyter-lab azure-data-explorer kql


    【解决方案1】:

    有几种方法可以做到这一点。

    最简单的方法是将你的 %%kql 细胞魔法折射成 %kql 线魔法。 线魔法可以嵌入到python单元中。

    其他选项是:从 Kqlmagic 导入 kql Kqlmagic kql 方法,将 kql 单元格或行作为字符串接受。 你可以从python调用kql。

    第三种方法是通过 ipython 方法调用 kql 魔法: ip.run_cell_magic('kql', {你的 kql 魔法单元文本}) 你可以从 python 调用它。

    【讨论】:

    • 感谢您的回答迈克尔。是否有参考文档或任何示例可供我参考以获取您建议的解决方案?
    猜你喜欢
    • 2019-02-05
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多