Google BigQuery - 解析来自 Bigquery table 列的字符串数据

Google BigQuery - Parsing string data from a Bigquery table column

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

{ID:AEEMEO,Score:8.990000;ID:SEAMCV,Score:8.990000;ID:HBLION;Property ID:DNSEAWH,Score:0.391670;ID:CP1853;ID:HI2367;ID:H25600;}

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

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

有些 ID 有分数,有些没有。我有多个记录,在 table.

的 hits_eventInfo_eventLabel 列下填充了类似的字符串

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

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

我会使用 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

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