我想基于正则表达式匹配将字符串列映射到类别。
是否可以使用另一个包含正则表达式和相应类别的bigquery表?这将使我更容易在添加新类别/更新正则表达式时仅更新表,而不必更新将使用此查找的所有查询。
查询:
CASE
-- Use the entries from another table here
WHEN REGEXP_MATCH(string_to_check, cat1regex) THEN cat1
WHEN REGEXP_MATCH(string_to_check, cat2regex) THEN cat2
etc.
END
映射表:
Regex category
pagex|pagey xy
pagez|page1 z1
还有可能还有另一种简单的方法可以做一些我没有想到的类似的东西,那些指出这些东西的答案也是受欢迎的。
任何帮助都将不胜感激。
答案 0 :(得分:1)
以下是BigQuery Standard SQL
#standardSQL
SELECT
string_to_check,
MAX(IF(REGEXP_CONTAINS(string_to_check, reg), category, NULL)) AS category
FROM yourTable
CROSS JOIN mappingTable
GROUP BY string_to_check
您可以使用以下问题中的虚拟日期来测试/玩它
#standardSQL
WITH `mappingTable` AS (
SELECT r'pagex|pagey' AS reg, 'xy' AS category UNION ALL
SELECT r'pagez|page1', 'z1'
),
`yourTable` AS (
SELECT string_to_check
FROM UNNEST(["pagex.com", "pagez@example.org", "page.example.net"]) AS string_to_check
)
SELECT
string_to_check,
MAX(IF(REGEXP_CONTAINS(string_to_check, reg), category, NULL)) AS category
FROM yourTable
CROSS JOIN mappingTable
GROUP BY string_to_check