使用KQL和externaldata()运算符从json文件中提取信息

问题描述 投票:0回答:2

尝试创建一个哨兵查询(KQL),它使用 externaldata() 运算符从 json 文件“https://www.gov.uk/bank-holidays.json”中提取信息。我发现的问题是由于此 json 文件包含列/字段“日期”哨兵不允许将其作为变量。有人能够从外部文件获取多层 json 字段吗?

externaldata (title:string, date:string, notes:string, bunting:bool)[
    @"https://www.gov.uk/bank-holidays.json"
    ]
    with(format="multijson")
json azure kql azure-sentinel
2个回答
3
投票
  1. 创建externaldata运算符是为了使基于 Azure Data Explorer (AKA Kusto) 的 SaaS 系统(例如 Log Analytics 和 Application Insights)的用户能够使用位于 Azure 存储中的外部数据。
    在不受支持的情况下从网站检索数据。
    有时有效,有时无效(取决于另一边的情况)。
    对于您的特定 URL,它不起作用。
  2. KQL 中的特殊名称可以用括号和单/双限定符表示,例如
    ['date']
    ["date"]
  3. 整个文档写在一行中。
    json
    就够了。不需要
    multijson
  4. 假设的模式是错误的 (
    title:string, date:string, notes:string, bunting:bool
    )。
    JSON 在第一层有 3 个键,每个王国一个:
    "england-and-wales"
    "scotland"
    "northern-ireland"
  5. 虽然我们可以使用上面的键来读取 JSON,但我更喜欢将其读取为
    txt
    raw
    ,将其解析为 JSON,然后分解它,如下面的查询所示。
externaldata(doc:string)
[h'https://<storage-account-name>.blob.core.windows.net/mycontainer/bank-holidays.json;<secret>']
with(format='txt')
| project parse_json(doc)
| mv-expand kind=array doc
| project   kingdom  = tostring(doc[0])
           ,division = doc[1].division
           ,events   = doc[1].events
| mv-expand events
| evaluate bag_unpack(events) 
//| sample 10
金丰 部门 彩旗 日期 笔记 标题
北爱尔兰 北爱尔兰 2017-04-14T00:00:00Z 耶稣受难日
英格兰和威尔士 英格兰和威尔士 真实 2017-05-29T00:00:00Z 春季银行假期
苏格兰 苏格兰 2018-03-30T00:00:00Z 耶稣受难日
英格兰和威尔士 英格兰和威尔士 真实 2018-12-25T00:00:00Z 圣诞节
北爱尔兰 北爱尔兰 2019-04-19T00:00:00Z 耶稣受难日
英格兰和威尔士 英格兰和威尔士 真实 2019-12-25T00:00:00Z 圣诞节
北爱尔兰 北爱尔兰 真实 2020-01-01T00:00:00Z 元旦
苏格兰 苏格兰 真实 2022-01-04T00:00:00Z 替补日 1月2日
苏格兰 苏格兰 2022-09-19T00:00:00Z 伊丽莎白二世女王国葬银行假日
苏格兰 苏格兰 真实 2023-01-02T00:00:00Z 替补日 元旦

0
投票

我也在为不同的 json 文件寻找类似的东西。

因此,我尝试排除 JSON 链接中存在的 IP 范围。为此,我需要投影 JSON 中的所有数据。我尝试编写以下代码,但它引发了错误:“运行查询时出现问题。请稍后再试。”谁能帮我构建查询吗?

let jsonData = externaldata(
syncToken: string,
createDate: string,
["prefixes"]: dynamic
)
[
h@"https://ip-ranges.amazonaws.com/ip-ranges.json"
]
with (format="multijson");
jsonData
| limit 10
© www.soinside.com 2019 - 2024. All rights reserved.