【问题标题】:Google BigQuery - Parsing string data from a Bigquery table columnGoogle BigQuery - 从 Bigquery 表列中解析字符串数据
【发布时间】:2015-11-07 02:39:34
【问题描述】:

我在 Bigquery 的数据集中有一个表 A。此表有多个列,其中一个名为 hits_eventInfo_eventLabel 的列具有如下值:

{ID:AEEMEO,Score:8.990000;ID:SEAMCV,Score:8.990000;ID:HBLION;房产 ID:DNSEAWH,分数:0.391670;ID:CP1853;ID:HI2367;ID:H25600;}

如果你把这个字符串写成表格形式,它包含以下数据:

**ID      |   Score**
AEEMEO  |   8.990000
SEAMCV  |   8.990000
HBLION  |    -
DNSEAWH |   0.391670
CP1853  |    -
HI2367  |    -
H25600  |    -

有些 ID 有分数,有些则没有。我在表中的 hits_eventInfo_eventLabel 列下填充了多条具有相似字符串的记录。

我的问题是如何WITHIN BIGQUERY 成功解析此字符串,以便获得属性ID 列表及其各自的推荐分数(如果存在)?我希望在解析此数据后保留 ID 在字符串中出现的顺序。

非常感谢有关此的任何信息。提前致谢!

【问题讨论】:

    标签: sql parsing google-bigquery


    【解决方案1】:

    我会使用 SPLIT 的组​​合来分隔成不同的行和 REGEXP_EXTRACT 来分隔成不同的列,即

    select 
      regexp_extract(x, r'ID:([^,]*)') as id,
      regexp_extract(x, r'Score:([\d\.]*)') score from (
    select split(x, ';') x from (
    select 'ID:AEEMEO,Score:8.990000;ID:SEAMCV,Score:8.990000;ID:HBLION;Property ID:DNSEAWH,Score:0.391670;ID:CP1853;ID:HI2367;ID:H25600;' as x))
    

    它产生以下结果:

    Row id      score    
    1   AEEMEO  8.990000     
    2   SEAMCV  8.990000     
    3   HBLION  null     
    4   DNSEAWH 0.391670     
    5   CP1853  null     
    6   HI2367  null     
    7   H25600  null
    

    【讨论】:

    • 谢谢!这行得通。有没有办法可以跟踪字符串中 id 的位置?也就是说,我现在想得到三列:id、score、position_in_string。从上面的示例字符串中,它将是:AEEMEO, 8.99000, 1; SEAMCV、8.990000、2等
    • 您可以在 BigQuery 中编写自己的 JavaScript 函数以获得您现在想要的内容:googledevelopers.blogspot.com/2015/08/…
    【解决方案2】:

    您可以在 BigQuery 中编写自己的 JavaScript 函数来获得您现在想要的内容:http://googledevelopers.blogspot.com/2015/08/breaking-sql-barrier-google-bigquery.html

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 2021-02-06
      • 1970-01-01
      • 2021-01-30
      • 2021-08-05
      • 2014-04-28
      • 1970-01-01
      • 2023-02-02
      • 2022-06-15
      相关资源
      最近更新 更多