ODPS字符串函数

CHAR_MATCHCOUNT

  • 命令格式
    bigint char_matchcount(string str1, string str2)
  • 命令说明

    该函数用于计算str1中有多少个字符出现在str2中。

  • 参数说明

    str1str2:STRING类型,必须为有效的UTF-8字符串。如果对比中发现有无效字符,则函数返回负值。

  • 返回值说明

    返回BIGINT类型。如果任一输入参数为NULL,则返回NULL。

  • 示例
    char_matchcount('abd','aabc') = 2
    -- str1中得两个字符串'a','b'在str2中出现过。

CONCAT

  • 命令格式
    string concat(string a, string b...)
  • 命令说明

    该函数的返回值是将参数中的所有字符串连接在一起的结果。

  • 参数说明

    输入参数为STRING类型。如果输入参数为BIGINT、DOUBLE、DECIMAL或者DATETIME类型,则会隐式转换为STRING后参与运算,其它类型抛异常。

  • 返回值类型

    返回STRING类型。如果没有参数或者任一参数为NULL,则返回NULL。

  • 示例
    concat('ab','c') = 'abc'
    concat() = NULL
    concat('a', null, 'b') = NULL

GET_JSON_OBJECT

  • 命令格式
    STRING GET_JSON_OBJECT(STRING json,STRING path)
  • 命令说明

    该函数用于在一个标准JSON字符串中,按照path抽取指定的字符串。每次调用该函数时,都会读一次原始数据,因此反复调用可能会造成性能和费用的浪费。利用GET_JSON_OBJECT结合UDTF,您可以轻松转换JSON格式日志数据,避免多次调用函数,详情请参见利用MaxCompute内建函数及UDTF转换JSON格式日志数据

  • 参数说明
    • json:STRING类型,标准的json格式字符串。
    • path:STRING类型,用于描述在json中的path,以$开头。关于path的说明,请参见LanguageManual UDF
      • $:表示根节点。
      • .:表示子节点。
      • [][number]表示数组下标,数组的格式为key[sub1][sub2][sub3]……
      • *Wildcard for [],返回整个数组。*不支持转义。
  • 返回值说明
    • 如果json为空或者非法的json格式,则返回NULL。
    • 如果json合法,path也存在,则返回对应字符串。
    • 当前不支持一个Object中出现两次相同的Key,例如{a:1, a:0},否则可能造成无法解析。
    • 当前不支持Emoji表情字符串。
  • 示例一
    +----+
    json
    +----+
    {"store":
    {"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],
    "bicycle":{"price":19.95,"color":"red"}
    },
    "email":"amy@only_for_json_udf_test.net",
    "owner":"amy"
    }
    通过以下查询,可以提取json对象中的信息。
    odps> SELECT get_json_object(src_json.json, '$.owner') FROM src_json;
    amy
    odps> SELECT get_json_object(src_json.json, '$.store.fruit\[0]') FROM src_json;
    {"weight":8,"type":"apple"}
    odps> SELECT get_json_object(src_json.json, '$.non_exist_key') FROM src_json;
    NULL
    示例二
    get_json_object('{"array":[["aaaa",1111],["bbbb",2222],["cccc",3333]]}','$.array[1][1]')= "2222"
    get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[*]') = "["h0","h1","h2"]"
    get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[1]') = "h1"

INSTR

  • 命令格式
    bigint instr(string str1, string str2[, bigint start_position[, bigint nth_appearance]])
  • 命令说明

    该函数用于计算子串str2在字符串str1中的位置。

  • 参数说明
    • str1:STRING类型,要搜索的字符串。如果输入为BIGINT、DOUBLE、DECIMAL或者DATETIME类型,则会隐式转换为STRING后参与运算,其它类型抛异常。
    • str2:STRING类型,要搜索的子串。如果输入为BIGINT、DOUBLE、DECIMAL或者DATETIME类型,则会隐式转换为STRING后参与运算,其它类型抛异常。
    • start_position:BIGINT类型,其它类型抛异常。表示从str1的第几个字符开始搜索,默认起始位置是第一个字符位置1。
    • nth_appearance:BIGINT类型,大于0。表示子串在字符串中的第nth_appearance次匹配的位置。如果nth_appearance为其它类型或小于等于0,则抛异常。
  • 返回值说明
    • 返回BIGINT类型。
    • 如果在str1中未找到str2,则返回0。
    • 如果任一输入参数为NULL,则返回NULL。
    • 如果str2为空串,则总能匹配成功,例如instr(‘abc’, ‘’)会返回 1。
  • 示例
    instr('Tech on the net', 'e') = 2
    instr('Tech on the net', 'e', 1, 1) = 2
    instr('Tech on the net', 'e', 1, 2) = 11
    instr('Tech on the net', 'e', 1, 3) = 14

IS_ENCODING

  • 命令格式
    boolean is_encoding(string str, string from_encoding, string to_encoding)
  • 命令说明

    用于判断输入字符串str是否可以从指定的一个字符集from_encoding转为另一个字符集to_encoding。可用于判断输入是否为乱码,通常的用法是将from_encoding设为UTF-8,to_encoding设为GBK。

  • 参数说明
    • str:STRING类型,空字符串可以被认为属于任何字符集。
    • from_encodingto_encoding:STRING类型,源及目标字符集。
    • 如果任一输入参数为NULL,则返回NULL。
  • 返回值说明

    返回BOOLEAN类型。如果str能够成功转换,则返回True,否则返回False。

  • 示例
    is_encoding('测试', 'utf-8', 'gbk') = true
    is_encoding('測試', 'utf-8', 'gbk') = true
    -- gbk字库中有这两个繁体字。
    is_encoding('測試', 'utf-8', 'gb2312') = false
    -- gb2312库中不包括这两个字。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值