全部产品
Search
文档中心

实时计算Flink版:MULTI_KEYVALUE

更新时间:Jun 17, 2024

本文为您介绍如何使用MULTI_KEYVALUE函数,将目标字符串中拆分为Key-Value(KV)对,匹配split1和split2的KV对,并返回key_name1和key_name2对应的Value值。

使用限制

仅实时计算引擎VVR 3.0.0及以上版本支持MULTI_KEYVALUE函数。

警告

在实时计算引擎VVR 8.0.7及下版本,为避免MULTI_KEYVALUE函数解析结果错误,在遇到以下场景时,请改用KEYVALUE函数:

  • MULTI_KEYVALUE对应的split1、split2分隔符和所有key_name都使用了常量字符串。

  • 同一个项目空间下的同一个引擎版本中,如果存在多个MULTI_KEYVALUE函数调用,且它们使用了不同的split1、split2分隔符(无论是单个作业内多次重复使用还是多个作业中分别使用)。

使用KEYVALUE函数,在对同一字段中不同key_name进行多次解析时,实时计算引擎会尝试复用中间解析结果,并且通过字符串二进制解析机制,整体处理效率通常会更优。但KEYVALUE函数是标量函数,解析多个字段需要使用多个KEYVALUE函数分别表示。

语法

MULTI_KEYVALUE(VARCHAR str, VARCHAR split1, VARCHAR split2, VARCHAR key_name1, VARCHAR key_name2, ...)

入参

参数

数据类型

说明

str

VARCHAR

目标字符串。

split1

VARCHAR

KV对的分隔符。

当split1为NULL时,表示按照空格作为KV对的分割符。当split1的长度>1时,split1仅表示分隔符的集合,每个字符都表示一个有效的分隔符。

split2

VARCHAR

KV的分隔符。

当split2为NULL时,表示按照空格作为KV的分割符。当split2的长度>1时,split2仅表示分隔符的集合,每个字符都表示一个有效的分隔符。

key_name1, key_name2, ...

VARCHAR

需要获取Value的Key值列表。

示例

  • 测试数据

    表 1. T1

    str(VARCHAR)

    split1(VARCHAR)

    split2(VARCHAR)

    key1(VARCHAR)

    key2(VARCHAR)

    k1=v1;k2=v2

    ;

    =

    k1

    k2

    NULL

    ;

    =

    k1

    k2

    k1:v1;k2:v2

    ;

    :

    k1

    k3

    k1:v1;k2:v2

    ;

    =

    k1

    k2

    k1:v1;k2:v2

    ,

    :

    k1

    k2

    k1:v1;k2=v2

    ;

    :

    k1

    k2

    k1:v1abck2:v2

    abc

    :

    k1

    k2

    k1:v1;k2=v2

    ;

    :=

    k1

    k2

    k1:v1 k2:v2

    NULL

    :

    k1

    k2

    k1 v1;k2 v2

    ;

    NULL

    k1

    k2

  • 测试语句

    SELECT c1, c2 
    FROM T1, lateral table(MULTI_KEYVALUE(str, split1, split2, key1, key2)) 
    as T(c1, c2);                
  • 测试结果

    c1(VARCHAR)

    c2(VARCHAR)

    v1

    v2

    NULL

    NULL

    v1

    NULL

    NULL

    NULL

    NULL

    NULL

    v1

    NULL

    v1

    v2

    v1

    v2

    v1

    v2

    v1

    v2