使用BigQuery Regex中的另一个表

时间:2017-10-06 06:41:05

标签: regex google-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 个答案:

答案 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