带有多个分隔符的BigQuery SPLIT

时间:2017-02-13 14:01:01

标签: google-bigquery

我想在像“?”这样的字符时制作左侧分割URI或“#”出现。

SELECT 
CASE
WHEN URI LIKE '%?%' THEN FIRST(SPLIT(URI, "?"))
WHEN URI LIKE '%#%' THEN FIRST(SPLIT(URI, "#"))
END WITHIN RECORD AS URI_FILTER
FROM (SELECT "/A/A1/AA2/205.html#jfsalf" AS URI)

输出必须为:/A/A1/AA2/205.html

要测试的另一个URI:

/A/A1/AA2/205.html?pRef=209888

错误:未应用聚合函数的范围

3 个答案:

答案 0 :(得分:1)

我认为regular expression更适合这个

SELECT 
  URI, REGEXP_EXTRACT(URI, r'(.*?)[?#]')
FROM 
  (SELECT "/A/A1/AA2/205.html#jfsalf" AS URI),
  (SELECT "/A/A1/AA2/205.html?pRef=209888" as URI)

答案 1 :(得分:1)

使用REGEXP_EXTRACT。如果URI可能没有#?,您可以使用正则表达式来解释这种情况:

#standardSQL
WITH T AS (
  SELECT '/A/A1/AA2/205.html#jfsalf' AS path UNION ALL
  SELECT '/A/A1/AA2/205.html?pRef=209888' AS path UNION ALL
  SELECT '/A/A1/AA2/205.html' AS path
)
SELECT
  REGEXP_EXTRACT(path, r'([^#?]+)') AS left_path
FROM T;

答案 2 :(得分:0)

SPLIT函数以ARRAY格式(嵌套的单元格)返回数据,对于某些目的而言可能非常有用。

如果需要这种格式,可以选择使用REPLACE操作将各种键(#,%等)转换为可以在SPLIT中使用的单个键。

在下面的代码中,我们将#转换为?然后在?上分割。

SPLIT(REPLACE(URI,“#”,“?”),“?”)