azure - Azure 数据资源管理器将动态列中的 guid 字符串转换为小写
问题描述
如果我将 json 对象写入数据类型为动态的列,则与 guid 格式匹配的字段将自动转换为小写。
如果我解析一个字符串,extractjson
我会得到大写的 guid:
print('{"guid":"6F77A167-8B36-49BB-8846-497B7F1BE1BF"}')
| extend guid = extractjson("$.guid", print_0)
// result: 6F77A167-8B36-49BB-8846-497B7F1BE1BF
但如果使用动态类型或parse_json
转换为小写,则发生:
print('{"guid":"6F77A167-8B36-49BB-8846-497B7F1BE1BF"}')
| extend guid = parse_json(print_0)
// result: {"guid":"6f77a167-8b36-49bb-8846-497b7f1be1bf"}
print('{"guid":"6F77A167-8B36-49BB-8846-497B7F1BE1BF"}')
| extend guid = todynamic(print_0)
// result: {"guid":"6f77a167-8b36-49bb-8846-497b7f1be1bf"}
有人可以告诉我这是否是预期的行为吗?从我的角度来看,默认情况下不需要将 guid 转换为小写,保持区分大小写是否有缺点?
在我的情况下,所使用的系统依赖于区分大小写的数据(我知道这不是好的设计)并且不能改变这个短期。
有没有办法在 ADX 中使用 json 对象(不仅是单个字段值),而无需将所有 guid 转换为小写?
谢谢!
解决方案
对于任何好奇的人,我认为问题在于任何动态转换函数中的返回类型extractjson
和 guid 之间的差异。
IE
let test = '{"guid":"6F77A167-8B36-49BB-8846-497B7F1BE1BF"}';
let testDirect = dynamic({"guid":"6F77A167-8B36-49BB-8846-497B7F1BE1BF"});
print castDynamic=gettype(todynamic(test)["guid"]), gettype(Parse=parse_json(test)["guid"]), ToObject=gettype(toobject(test)["guid"]), Direct=gettype(testDirect["guid"])
将显示所有可能的转换方式都会导致“guid”的类型为 guid。但随着
let test2 = '{"guid":"6F77A167-8B36-49BB-8846-497B7F1BE1BF"}';
print gettype(extractjson("$.guid", test2))
的返回类型extractjson
是一个字符串。实际上,忽略动态,仅接收具有 guid 值的字符串并将其强制转换为 guid 将导致它“小写字符串”(只是有点因为结果不是字符串而是 guid)。
let test3 = "6F77A167-8B36-49BB-8846-497B7F1BE1BF";
print toguid(test3)
由于没有(我知道)强制 todynamic 选择类型的好方法,我不相信强制大写行为是可能的。我能看到的最好的选择是通过将值转换为字符串并自己将其大写来追溯处理它,或者以某种方式欺骗 todynamic 不将值转换为 guid(即在 guid 中附加一个值,如字符串)。
推荐阅读
- java - 写了一段黄瓜代码并试图在 Maven 中执行,浏览器被调用但它没有在浏览器中给出 URL
- java - 比较目录中的 jar 证书
- sparql - 查找在 SPARQL 查询中应用的直接属性
- wordpress - wp 多站点:添加新的超级管理员
- reactjs - Webpack 3 + Sass Loader:不能将 scss 用作模块
- c# - Visual Studio 2017 - 无法将“ReportViewer”添加到“Windows 窗体”
- r - 根据数据集的行值应用规则
- java - 使用扫描仪根据用户输入创建数组
- openstack-keystone - 禁止:您无权执行请求的操作
- ios - iOS:转换时 LeftBarButtonItem 上的奇怪叠加