You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Azure Data Explorer推断函数数组参数的数据类型?

解决方案

问题核心是ADX的dynamic类型会自动推断数组元素的类型,时间戳格式的字符串会被解析为timestamp类型,而你的MyTable.Value是字符串类型,类型不匹配导致查询无预期结果。

以下两种方案可解决该问题:

方案一:强制转换数组元素为字符串

使用array_transform函数遍历动态数组,将每个元素强制转为字符串后再用于in条件:

let SelectedValues = dynamic(["2022-08-14T13:05:17Z", "EconChgOvrDiff", "1"]);
let F = (SelectedValues:dynamic=dynamic([]), Limit:int=100)
{
    let stringValues = array_transform(SelectedValues, x => tostring(x));
    MyTable
    | where Value in (stringValues)
    | limit Limit
};
F(SelectedValues)

原理

array_transform(SelectedValues, x => tostring(x))会遍历输入数组,将所有元素统一转换为字符串类型,确保和MyTable.Value的类型完全匹配,消除类型推断带来的差异。

方案二:指定参数为字符串数组类型

直接将函数参数定义为array<string>类型,从根源避免ADX自动推断元素类型:

let SelectedValues = dynamic(["2022-08-14T13:05:17Z", "EconChgOvrDiff", "1"]);
let F = (SelectedValues:array<string>=dynamic([]), Limit:int=100)
{
    MyTable
    | where Value in (SelectedValues)
    | limit Limit
};
F(SelectedValues)

原理

当传入dynamic类型数组到array<string>参数时,ADX会自动将每个元素转换为对应的字符串表示(比如timestamp类型会转为原时间格式的字符串),完全符合你的需求。

内容的提问来源于stack exchange,提问作者Nestor Mendez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 23:53:14