【问题标题】:Parameterizing the unusual inputs of a kusto function参数化 kusto 函数的异常输入
【发布时间】:2020-11-20 17:58:00
【问题描述】:

我正在开发一个 Python 应用程序,该应用程序使用 azure-kusto-data 库 (https://pypi.org/project/azure-kusto-data/) 从 Kusto 查询数据

我正在尝试编写一个 kusto 函数来执行特定的函数。这个函数有两个输入,一个数据表输入和一个时间跨度输入

举个例子:

函数名称:GenerateSomeOutputviaKusto 函数参数:(T:(Env:string,Something:string,StartDate:datetime),inputGranularity:timespan)

如您所见,此函数输入使用表格输入。现在为了正确调用这个函数(比如 KustoExplorer),我使用“let”语句来创建这个函数的表格输入,遵循这个页面的指导:https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/letstatement

    let QueryTable = datatable (Environment:string, Something:string, StartDate:datetime)
    ["Prod", "Sometext", datetime("2020-11-17")];
GenerateSomeOutputviaKusto(QueryTable, 24h);

现在的问题是,当我尝试参数化此函数以从 python 执行此函数时。当我在python中使用kusto库调用这个函数时,需要对这个函数进行参数化。

https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/queryparametersstatement?pivots=azuredataexplorer

我将参数设置为 python 字典,如下所示:

    params = {
        "env": self._env,
        "something": something,
        "startdate": self._alert_start_date_str,
    }

然后我尝试从我的 python 代码中参数化 kusto 函数,如下所示:

            declare query_parameters(env:string,
            something:string,
            starting_time:string);
        let QueryTable = datatable (Environment:string, something:string, StartDate:datetime)
            [env, something, datetime(startdate)];
            GenerateSomeOutputViaKusto(QueryTable, 24h)

当我这样做时,我遇到了这个错误:

[重试确认] KustoServiceError([{'error': {'code': 'General_BadRequest', 'message': '请求无效,无法执行。', '@type': 'Kusto.Data.Exceptions .KustoBadRequestException','@message':“语法错误:无法解析查询:SYN0002:发生识别错误。[line:position=5:17]。查询:'declare query_parameters(env:string,\n something: string,\n startdate:string);\n let QueryTable = datatable (Environment:string, something:string, StartDateTime:datetime)\n [env, something, datetime(startdate)];\n QueryTable'", '@context ': {'timestamp': '2020-11-20T17:50:29.4796552Z', 'serviceAlias': 'EGFOLLOWING', 'machineName': 'KEngine000005', 'processName': 'Kusto.WinSvc.Svc', 'processId ':2728,'threadId':9068,'appDomainName':'Kusto.WinSvc.Svc.exe','clientRequestId':'KPC.execute;1456198f-1e9a-47de-bf4d-053208c861f2','activityId':'59726ecc -5a4f-4d63-91f4-a04d706b10d6','subActivityId':'8e054 42a-34c0-427a-b569-8879e7d1e2d1','activityType':'DN.FE.ExecuteQuery','parentActivityId':'de01e770-e291​​-4f10-bf9e-a34978193451','activityStack':'(活动堆栈:CRID = KPC.execute;1456198f-1e9a-47de-bf4d-053208c861f2 ARID=59726ecc-5a4f-4d63-91f4-a04d706b10d6 > KD.Query.Client.ExecuteQueryAsKustoDataStream/d19ed49b-78f6-4f2c-adfc-cf0f6f443 ..IClientServiceCommunicationContract/de01e770-e291​​-4f10-bf9e-a34978193451 > DN.FE.ExecuteQuery/8e05442a-34c0-427a-b569-8879e7d1e2d1)'}, '@permanent': True, '@text': 'declare query_parameters(env :string,\n something:string,\n startdate:string);\n let QueryTable = datatable (Environment:string, something:string, StartDateTime:datetime)\n [env, something, datetime(startdate)];\n QueryTable', '@database': 'defaultdb', '@ClientRequestLogger': '', 'innererror': {'code': 'SYN0002', 'message': '发生识别错误。', '@t ype':'Kusto.Data.Exceptions.SyntaxException','@message':“语法错误:无法解析查询:SYN0002:发生识别错误。 [行:位置=5:17]。查询:'声明 query_parameters(env:string,\n

出于隐私原因,我已经替换了一些敏感字段。我的 Kusto 相关问题是,这甚至是做这种事情的正确方法吗? kusto 文档在参数化函数方面非常少,尤其是在 像这样的极端案例。参数化工作,不使用 let 语句,但结合使用“declare”语句和“let”语句似乎会导致问题。

【问题讨论】:

    标签: python azure azure-data-explorer


    【解决方案1】:

    问题是您试图将 非常量 标量值传递给 datatable 运算符 - 无论是否使用查询参数,这都是不受支持的。

    您可以将 datatable 运算符的用法替换为 print,例如:

    declare query_parameters(env:string, failure_signature:string, starting_time:datetime);
    let QueryTable = print Environment = env, FailureSignature = failure_signature, StartDateTime = starting_time;
    QueryTable
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 2022-01-08
      • 2016-05-04
      • 1970-01-01
      相关资源
      最近更新 更多