REGEXP_EXTRACT 在 Impala
REGEXP_EXTRACT in Impala
我正在尝试弄清楚如何从看起来像这样的字符串中提取客户 ID:
{"param":"success","value":"10","level":"0","error_code":"101","customer_id":"5b0e9b23e423b0d33c9f7ddfd", "purchases": "13", "last_activity_ts": "123523465"}
我正在尝试使用以下代码从包含错误代码 101 的字符串中提取客户 ID:
select regexp_extract(field, '\"customer_id":"(.*)', 0) from table_name
where field rlike '"error_code":"101"'
但这给了我以下结果:
"customer_id":"5b0e9b23e423b0d33c9f7ddfd", "purchases": "13", "last_activity_ts": "123523465"}
预期结果:
5b0e9b23e423b0d33c9f7ddfd
你能帮我解决这个问题吗?
您可以使用以下正则表达式:
"customer_id":"(\w+)"
演示:https://regex101.com/r/MEOGw8/39
测试:
{"param":"success","value":"10","level":"0","error_code":"101","customer_id":"5b0e9b23e423b0d33c9f7ddfd", "purchases": "13", "last_activity_ts": "123523465"}
匹配:
Match 1
Full match 63-104 `"customer_id":"5b0e9b23e423b0d33c9f7ddfd"`
Group 1. 78-103 `5b0e9b23e423b0d33c9f7ddfd`
SQL 声明:
select regexp_extract(field, '"customer_id":"(\w+)"',1, 1) from table_name
where field rlike '"error_code":"101"'
您的正则表达式从 "customer_id":"
匹配到行尾,因为您使用 .*
将匹配任何字符零次或多次,并且您使用 0
作为最后一个参数regexp_extract.
指的是整个提取的字符串。
要匹配双引号之间的内容,您可以不匹配双引号并使用取反的 character class:
在组 ([^"]+)
中捕获它
或者您可以在字符 class 中指定字符范围,重复一次或多次 ([a-f0-9]+)
并将其捕获为一组:
您的值在第一个捕获组中,我认为您可以使用 1
作为 regexp_extract 的第三个参数指定。
regexp_extract(field, '"customer_id":"([a-f0-9]+)"', 1)
我正在尝试弄清楚如何从看起来像这样的字符串中提取客户 ID:
{"param":"success","value":"10","level":"0","error_code":"101","customer_id":"5b0e9b23e423b0d33c9f7ddfd", "purchases": "13", "last_activity_ts": "123523465"}
我正在尝试使用以下代码从包含错误代码 101 的字符串中提取客户 ID:
select regexp_extract(field, '\"customer_id":"(.*)', 0) from table_name
where field rlike '"error_code":"101"'
但这给了我以下结果:
"customer_id":"5b0e9b23e423b0d33c9f7ddfd", "purchases": "13", "last_activity_ts": "123523465"}
预期结果:
5b0e9b23e423b0d33c9f7ddfd
你能帮我解决这个问题吗?
您可以使用以下正则表达式:
"customer_id":"(\w+)"
演示:https://regex101.com/r/MEOGw8/39
测试:
{"param":"success","value":"10","level":"0","error_code":"101","customer_id":"5b0e9b23e423b0d33c9f7ddfd", "purchases": "13", "last_activity_ts": "123523465"}
匹配:
Match 1
Full match 63-104 `"customer_id":"5b0e9b23e423b0d33c9f7ddfd"`
Group 1. 78-103 `5b0e9b23e423b0d33c9f7ddfd`
SQL 声明:
select regexp_extract(field, '"customer_id":"(\w+)"',1, 1) from table_name
where field rlike '"error_code":"101"'
您的正则表达式从 "customer_id":"
匹配到行尾,因为您使用 .*
将匹配任何字符零次或多次,并且您使用 0
作为最后一个参数regexp_extract.
指的是整个提取的字符串。
要匹配双引号之间的内容,您可以不匹配双引号并使用取反的 character class:
在组([^"]+)
中捕获它
或者您可以在字符 class 中指定字符范围,重复一次或多次 ([a-f0-9]+)
并将其捕获为一组:
您的值在第一个捕获组中,我认为您可以使用 1
作为 regexp_extract 的第三个参数指定。
regexp_extract(field, '"customer_id":"([a-f0-9]+)"', 1)