【问题标题】:Bigquery Standard Dialect REGEXP_REPLACE input typeBigquery 标准方言 REGEXP_REPLACE 输入类型
【发布时间】:2019-01-17 00:21:53
【问题描述】:

我正在使用tutorial 探索 Google Biguery 与 GDELT 数据库的强大功能,但是 sql 方言处于“遗留”状态,我想使用标准方言。

在传统方言中:

SELECT
  theme,
  COUNT(*) AS count
FROM (
  SELECT
    REGEXP_REPLACE(SPLIT(V2Themes,';'), r',.*',"") theme
from [gdelt-bq:gdeltv2.gkg]
where DATE>20150302000000 and DATE < 20150304000000 and V2Persons like '%Netanyahu%'
)
group by theme
ORDER BY 2 DESC
LIMIT 300

当我尝试翻译成标准方言时:

SELECT
  theme,
  COUNT(*) AS count
FROM (
  SELECT
    REGEXP_REPLACE(SPLIT(V2Themes,';') , r',.*', " ") AS theme
    FROM
      `gdelt-bq.gdeltv2.gkg`
    WHERE
      DATE>20150302000000
      AND DATE < 20150304000000
      AND V2Persons LIKE '%Netanyahu%' )
  GROUP BY
    theme
  ORDER BY
    2 DESC
  LIMIT
    300

它会抛出以下错误:

No matching signature for function REGEXP_REPLACE for argument types: ARRAY<STRING>, STRING, STRING. Supported signatures: REGEXP_REPLACE(STRING, STRING, STRING); REGEXP_REPLACE(BYTES, BYTES, BYTES) at [6:5]

看来我必须将 SPLIT() 操作的结果转换为字符串。我该怎么做呢?

更新:我找到了一个 talk 解释 unnest 操作:

SELECT
  COUNT(*),
  REGEXP_REPLACE(themes,",.*","") AS theme
FROM
  `gdelt-bq.gdeltv2.gkg_partitioned`,
  UNNEST( SPLIT(V2Themes,";") ) AS themes
WHERE
  _PARTITIONTIME >= "2018-08-09 00:00:00"
  AND _PARTITIONTIME < "2018-08-10 00:00:00"
  AND V2Persons LIKE '%Netanyahu%'
GROUP BY
  theme
ORDER BY
  2 DESC
LIMIT
  100

【问题讨论】:

    标签: regex google-bigquery gdelt


    【解决方案1】:

    先展平数组:

    SELECT
      REGEXP_REPLACE(theme , r',.*', " ") AS theme,
      COUNT(*) AS count
    FROM
      `gdelt-bq.gdeltv2.gkg`,
      UNNEST(SPLIT(V2Themes,';')) AS theme
    WHERE
      DATE>20150302000000
      AND DATE < 20150304000000
      AND V2Persons LIKE '%Netanyahu%' 
    GROUP BY
      theme
    ORDER BY
      2 DESC
    LIMIT
      300
    

    您问题中的旧版 SQL 等效项实际上也具有展平数组的效果,尽管它隐含在主题的 GROUP BY 中。

    【讨论】:

    • 代码不能“按原样”工作。我只是在查询编辑器中复制它并得到错误:“UNNEST 中引用的值必须是数组。UNNEST 在 [6:10] 包含 STRING 类型的表达式”
    • 我对其进行了编辑并将创建数组的拆分移动到交叉连接
    • 啊,对,我没有仔细阅读。我专注于V2Themes,我认为它是一个数组。感谢您的编辑!
    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2017-08-22
    • 2012-03-25
    • 1970-01-01
    • 2018-10-06
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多