2017-10-06 38 views
0

我想将字符串列映射到基于正则表达式匹配的类别。在BigQuery中使用另一个表正则表达式

是否有可能使用另一个包含正则表达式和相应类别的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 

它也可以有另一种简单的方法做类似的是我没有想到的东西,指着那些出答案也欢迎。

任何帮助,将不胜感激。

+1

我有一种感觉,一个功能可能更适合在这里,因为你需要在一个'CASE'表达式中访问各种正则表达式。 –

+1

好的建议,我现在正在研究用户定义的函数,这似乎是我应该去的方式。 – onnhoJ

回答

1

下面是BigQuery的标准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", "[email protected]", "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 
相关问题