有条件存在场的 Jolt 规范
Jolt spec for conditional presence of field
我有一个场景,我有两种非常相似的输入格式,但我需要一个 Jolt 规范来一致地处理两种格式。
这是输入样式1:
{
"creationTime": 1503999158000,
"device": {
"ip": "155.157.36.226",
"hostname": "server-123.example.int"
}
}
这是输入样式 2:
{
"creationTime": 1503999158000,
"device": {
"ip6": "2001::face",
"hostname": "server-123.example.int"
}
}
唯一的区别是样式1使用device.ip
,而样式2使用device.ip6
。这些字段总是有一个或两个都没有,但绝不会同时存在。
我想简单地提取以下内容:
{
"created_ts": 1503999158000,
"src_ip_addr": "....."
}
我需要 src_ip_addr
设置为 ip
和 ip6
中存在的字段。如果源数据中不存在这两个字段,则该值应默认为 null
.
单个 Jolt 规格是否可能?
具有两个操作的单个规范。
规格
[
{
"operation": "shift",
"spec": {
"creationTime": "created_ts",
"device": {
// map ip or ip6 to src_ip_addr
"ip|ip6": "src_ip_addr"
}
}
},
{
"operation": "default",
"spec": {
// if src_ip_addr does not exist, then apply a default of null
"src_ip_addr": null
}
}
]
我尝试了以下方法,它符合我的要求:
[
{
"operation": "shift",
"spec": {
"creationTime": "created_ts",
"device": {
// map both to src_ip_addr, whichever one is present will be used
"ip": "src_ip_addr",
"ip6": "src_ip_addr"
}
}
},
{
"operation": "default",
"spec": {
"src_ip_addr": null
}
}
]
我有一个场景,我有两种非常相似的输入格式,但我需要一个 Jolt 规范来一致地处理两种格式。
这是输入样式1:
{
"creationTime": 1503999158000,
"device": {
"ip": "155.157.36.226",
"hostname": "server-123.example.int"
}
}
这是输入样式 2:
{
"creationTime": 1503999158000,
"device": {
"ip6": "2001::face",
"hostname": "server-123.example.int"
}
}
唯一的区别是样式1使用device.ip
,而样式2使用device.ip6
。这些字段总是有一个或两个都没有,但绝不会同时存在。
我想简单地提取以下内容:
{
"created_ts": 1503999158000,
"src_ip_addr": "....."
}
我需要 src_ip_addr
设置为 ip
和 ip6
中存在的字段。如果源数据中不存在这两个字段,则该值应默认为 null
.
单个 Jolt 规格是否可能?
具有两个操作的单个规范。
规格
[
{
"operation": "shift",
"spec": {
"creationTime": "created_ts",
"device": {
// map ip or ip6 to src_ip_addr
"ip|ip6": "src_ip_addr"
}
}
},
{
"operation": "default",
"spec": {
// if src_ip_addr does not exist, then apply a default of null
"src_ip_addr": null
}
}
]
我尝试了以下方法,它符合我的要求:
[
{
"operation": "shift",
"spec": {
"creationTime": "created_ts",
"device": {
// map both to src_ip_addr, whichever one is present will be used
"ip": "src_ip_addr",
"ip6": "src_ip_addr"
}
}
},
{
"operation": "default",
"spec": {
"src_ip_addr": null
}
}
]