首页 > 解决方案 > GCP项目依赖GDELT数据库的问题

问题描述

在使用“GDELT”数据库在 GCP 中编程时,我遇到了一个问题,希望您能帮我解决它。

我想编写一个代码,数据库将在其中检查在以色列和阿拉伯国家之间签署“亚伯拉罕协议”期间媒体与谁打交道最多的人。

SELECT
  V2Persons,
  COUNT(1) AS count
FROM (
  SELECT
    UNIQUE(REGEXP_REPLACE(SPLIT(V2Persons,';'), r',.*', ")) V2Persons
      FROM
        `gdelt-bq.gdeltv2.gkg_partitioned`
      WHERE
        DATE>20200914000000
        AND DATE < 20200916000000
        AND LOWER(AllNames) LIKE '%Abraham Accords%' )
    GROUP BY
      Persons
    ORDER BY
      2 DESC
    LIMIT
      300

你能告诉我代码有什么问题以及如何解决吗?

标签: google-bigquery

解决方案


这里有很多问题,最简单的一步一步调试,使用WITH语句并获取一些数据。

所以我将嵌套查询移至 WITH 子查询。没有 UNIQUE 功能,我已将其删除。然后SPLIT函数返回一个数组,你不能只在数组上调用 REGEX 函数,数组首先必须是UNNEST'ed。我最后得到了这个:

WITH persons AS (
    SELECT SPLIT(gkg.V2Persons,';') pers_arr
      FROM
        `gdelt-bq.gdeltv2.gkg_partitioned` gkg
      WHERE
        DATE > 20200914000000 AND DATE < 20200916000000 AND
        LOWER(AllNames) LIKE '%abraham accord%'
)    
SELECT REGEXP_REPLACE(V2Persons, r',.*', '') V2Persons, COUNT(1) AS count 
FROM persons pers, UNNEST(pers.pers_arr) V2Persons
GROUP BY V2Persons
ORDER BY 2 DESC LIMIT 300;

推荐阅读