我有这样的数据:
_时间 | id | 值1 | 值2 | 值3 |
---|---|---|---|---|
2023-02-22 | abcde | 0 | 45 | 23 |
2023-02-23 | abcde | 1 | 4 | 17 |
2023-02-22 | xyz | 1 | 46 | 24 |
2023-02-23 | xyz | 2 | 5 | 18 |
我想改造它,让它看起来像这样:
_时间 | id | 值_名称 | 价值 |
---|---|---|---|
2023-02-22 | abcde | 值1 | 0 |
2023-02-22 | abcde | 值2 | 45 |
2023-02-22 | abcde | 值3 | 23 |
2023-02-23 | abcde | 值1 | 1 |
2023-02-23 | abcde | 值2 | 4 |
2023-02-23 | abcde | 值3 | 17 |
2023-02-22 | xyz | 值1 | 1 |
...等等。
我尝试使用untable:
| makeresults
| eval _time="2023-02-22", id="abcde", value1=0, value2=45, value3=23
| append [| makeresults
| eval _time="2023-02-23", id="abcde", value1=1, value2=4, value3=17]
| append [| makeresults
| eval _time="2023-02-22", id="xyz", value1=1, value2=46, value3=24]
| append [| makeresults
| eval _time="2023-02-23", id="xyz", value1=2, value2=5, value3=18]
| table _time id value1 value2 value3
| untable _time value_name value
但是,这在不同的行上给了我“id”的 value_names。我希望能够为 untable 命令 的 x-field 参数指定多个字段,以便我为 _time 和 id 的每种组合得到一行。
有简单的方法吗?
我以前遇到过这个问题。我发现的最佳解决方案是创建一个临时字段,在您不想转置的每个字段之间使用分隔符。一旦您对结构感到满意,您就可以使用
| rex
命令提取它们。
| eval id_time = _time + "|" + id
| fields id_time, value1, value2, value3
| untable id_time, value_name, value
| rex field=id_time "(?<_time>[^\|]+)\|(?<id>.+)"
| table _time, id, value_name, value
由于您使用的是存储为整数的 _time,因此我选择使用简单的管道作为分隔符。