VRL 值

什么是“值”

text
1
.service = "payment"

这行代码中:.service 是存放数据的位置;= 是赋值;“payment” 是要放进去的

值可以是什么

  • 字符串:“payment”

  • 整数:200

  • 浮点数:35.7

  • 布尔值:true

  • 空值:null

  • 数组:[]

  • 对象:

    text
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    {
    	"field1": .some_path,
    	"field2": some_variable,
    	"field3": { "subfield": "some value" }
    }
    
    {
    	"field1": "value1",
    	"field2": [ "value2", "value3", "value4" ],
    	"field3": { "field4": "value5" }
    }
  • Timestamp:

    text
    1
    2
    3
    4
    5
    
    t'2021-02-11T10:32:50.553955473Z'
    
    t'2021-02-11T10:32:50.553Z'
    
    t'2021-02-11T10:32:50.553-04:00'

“字面量”

“字面量”可以理解成:“代码里直接写出来的固定值”。

例如

text
1
2
3
4
5
6
7
8
# 直接写了文字
"payment"

# 直接写了数字
200

# 直接写了布尔值
true

值和字段

代码

text
1
2
3
4
左          右
事件字段     字符串值

.service = "payment"
tip
  • 字段是存放值的位置。

  • 值是实际存放的数据。

边界情况

text
1
2
3
"200"
200
200.00

字符串, 整数, 浮点数对于 Elasticsearch 时可能对应不同的 Mapping 类型。

字符串

VRL 官方说明,字符串字面量使用 UTF-8 编码,并支持解释型字符串和原始字符串两种形式。我们这一节先学习最常见的双引号字符串

双引号

双引号告诉 VRL:

  • payment 是一段固定文字
  • 不是变量名
  • 也不是函数名
text
1
.service = "payment"

错误示例

text
1
2
3
4
5
6
7
8
# 没有引号
.service = payment

# 字符串没有结束
.service = "payment

# 使用中文引号
.service = “payment”