如何在 Flux (InfluxDB) 中将字符串列一分为二

How to split a string column in two in Flux (InfluxDB)

我有一个 #datatype string 列,称为 names 并且每行包含以下信息:

ABV,BVA
BAC,DWA
ZZA,DSW
  ...

我的问题是如何将此列拆分(通过逗号 ,)为名称为(names_1names_2)的两列,这样我会得到类似这个:

names_1    names_2
ABV        BVA
BAC        DWA
ZZA        DSW
      ...

我试过 strings.split() 但它只适用于单个字符串。所以也许我需要一种方法来将此代码应用于整个专栏:

import "strings"

data
  |> map (fn:(r) => strings.split(v: r.names, t: ","))

我想您可能正在寻找这样的东西:

import "experimental/array"
import "strings"

array.from(rows: [{value: "A,B"}])
  |> map(fn: (r) => {
    parts = strings.split(v: r.value, t: ",")
    return {first: parts[0], second: parts[1]}
  })

可以将array.from()换成from()来读取influxdb的数据。地图函数期望返回一条记录。如果你有一些数据在拆分后可能没有两个值,你也可以这样做:

import "experimental/array"
import "strings"

array.from(rows: [{value: "A,B"}])
  |> map(fn: (r) => {
    parts = strings.split(v: r.value, t: ",")
    return if length(arr: parts) > 1 then
      {first: parts[0], second: parts[1]}
    else {first: parts[0], second: ""}
  })

你最初的尝试几乎没问题。

这样它应该拆分列:

import "strings"
data
  |> map (fn:(r) => ({
  r with
  names_1: strings.split(v: r.name, t: ",")[0],
  names_2: strings.split(v: r.name, t: ",")[1]
  }))