如何在 BigQuery(标准 SQL)中实现“LIKE ANY”?

Duy*_*H.L 3 google-bigquery

我想使用“喜欢任何”功能。但是,BigQuery 无法识别“ANY”运算符。有什么函数可以代替“LIKE ANY”吗?

Bigquery - 标准 SQL

    SELECT
      date,
      CONCAT(fullvisitorid, CAST(visitid AS string)) ord_browsers,
      hits.appInfo.landingScreenName,
      channelgrouping,
      trafficSource.source,
      trafficSource.medium,
      CASE
        WHEN channelgrouping = 'seo_brand' THEN 'Branded'
        WHEN hits.appInfo.landingScreenName LIKE '%/article%'
      OR hits.appInfo.landingScreenName LIKE '%/p/%' THEN 'ADS'
        WHEN (hits.appInfo.landingScreenName LIKE ANY ('%/damesmode/%',  '%/herenkleding/%',  '%/kinderkleding/%',  '%/sportkleding/%')) THEN 'Plist'
        ELSE 'rest'
      END Landing_page
    FROM
      `meta-geography-145406.81187684.ga_sessions_*`,
      UNNEST(hits) AS hits
    WHERE
      (_table_suffix BETWEEN '20190201'
        AND '20190207')
Run Code Online (Sandbox Code Playgroud)

语法错误:意外的关键字 ANY 在 [12:47]

Fel*_*ffa 6

具有相同问题的更简单的查询:

WITH table AS (
  SELECT 'XXXX/herenkleding/XXX' x
)

SELECT x
FROM TABLE
WHERE x LIKE ANY ( 
  '%/damesmode/%'  '%/herenkleding/%',  '%/kinderkleding/%',  '%/sportkleding/%'
)

Syntax error: Unexpected keyword ANY at [2:6]
Run Code Online (Sandbox Code Playgroud)

备选方案 1:替换为一系列 LIKE OR

SELECT x
FROM TABLE
WHERE (x LIKE '%/damesmode/%' 
OR x LIKE '%/herenkleding/%'
OR x LIKE '%/kinderkleding/%'
OR x LIKE'%/sportkleding/%')

XXXX/herenkleding/XXX
Run Code Online (Sandbox Code Playgroud)

方案二:组合成一个正则表达式

WITH table AS (
  SELECT 'XXXX/herenkleding/XXX' x
)

SELECT x
FROM TABLE
WHERE REGEXP_CONTAINS(x
  , '/(damesmode|herenkleding|kinderkleding|sportkleding)/')

XXXX/herenkleding/XXX
Run Code Online (Sandbox Code Playgroud)