如何删除不需要的嵌套列?

How to remove unwanted nested columns?

我的任务是将公司的 Event Export 从我们的 PlayFab 环境更改为 Azure。最初,我们将其设置为 Export all events,但在查看数据后,我们确实导出了一些出于法律原因我们不想要的数据。我正在探索 Use custom query 方法并尝试构建查询以获取除我要排除的列之外的所有数据。问题是这些列是嵌套的。我现在尝试使用 project-away 查询来排除一列,但是当我 运行 下面的查询

['events.all'] 
| project-away EventData.ColumnToExclude
| limit 100

我收到这个错误

我假设这是因为它不支持嵌套列。有没有一种简单的方法可以排除列而不必展平数据或列出我的所有列(我们的开发人员可能会在不通知的情况下创建新事件,这样就不会起作用)?

更新 1:

我发现 project-away 是从 table 中删除列的语法,但我需要的是一种从 json/dynamic 对象中删除键的方法使用 bag_remove_keys() 是正确的方法

['events.all']
| project EventData=bag_remove_keys(EventData, dynamic(['Key1', 'Key2', '$.Key3.SubKey1'])

但现在我面临另一个问题。当我对子项使用 '$.' 表示法时,出现以下错误

Query execution has resulted in error (0x8000FFFF): Partial query failure: Catastrophic failure (message: 'PropertyBagEncoder::Add: non-contiguous entries: ', details: '').
[0]Kusto.Data.Exceptions.KustoDataStreamException: Query execution has resulted in error (0x8000FFFF): Partial query failure: Catastrophic failure (message: 'PropertyBagEncoder::Add: non-contiguous entries: ', details: '').
Timestamp=2022-01-31T13:54:56.5237026Z

如果我没有列出任何子项,我就不会遇到这个问题,而且我不明白为什么

更新 2:

我发现 bag_remove_keys 有一个错误。在下面的查询中,我在 UPDATE 1

中得到了描述的错误
datatable(d:dynamic)
[
dynamic(
{
  "test1": "val",
  "test2": {},
  "test3": "val"
}
)
]
| extend d1=bag_remove_keys(d, dynamic(['$.SomeKey.Sub1', '$.SomeKey.Sub2']))

但是,如果我在最后移动 "test2" 键,我不会收到错误,但 d1 不会在输出中显示 "test2" 键。

此外,如果我在 bag_remove_keys() 中有一个键与输入中的键匹配,例如 | extend d1=bag_remove_keys(d, dynamic(['$.SomeKey.Sub1', '$.SomeKey.Sub2', 'test1'])) 那么,它不会再次出错,但会从输出中删除 "test2"

感谢安德烈的报告,这是一个错误,我们正在努力修复。

更新 - 修复已签入并将在两周内部署,如果您需要更早,请打开支持票。