SQL-以规则的分隔符间隔解析字段和数字总和

SQL-以规则的分隔符间隔解析字段和数字总和,sql,google-bigquery,adobe-analytics,Sql,Google Bigquery,Adobe Analytics,我请求您帮助解决我目前技能范围之外的问题 我正在使用Google Big Query来存储关于我网站的分析数据,并计算收入,这是一个非常困难的查询 我们有字段%product%,其格式如下: ;%productID%;%productQuantity%;%productRevenue%;; 如果购买了多个产品,则不同的产品数据将用“,”分隔,这可以给出: ;12345678;1;49.99;;,;45678912;1;54.99;; ;45678912;2;59.98;;,;14521452;

我请求您帮助解决我目前技能范围之外的问题

我正在使用Google Big Query来存储关于我网站的分析数据,并计算收入,这是一个非常困难的查询

我们有字段%product%,其格式如下:

;%productID%;%productQuantity%;%productRevenue%;;
如果购买了多个产品,则不同的产品数据将用“,”分隔,这可以给出:

;12345678;1;49.99;;,;45678912;1;54.99;;
;45678912;2;59.98;;,;14521452;2;139.98;;,;12345678;2;19.98;;
;14521452;1;54.99;;
计算收入的唯一方法是将一行中所有不同的%productRevenue%相加,并将其存储到列中

我不知道如何只使用SQL查询就可以做到这一点。。。也许用正则表达式?有什么想法吗? 我想用这些信息创建一个视图,以便轻松地将数据拉入PowerBI。但也许我应该直接在PBI中用M来处理

非常感谢


下面的Alex是针对BigQuery标准SQL的

#standardSQL
SELECT 
  SPLIT(i, ';')[OFFSET(1)] productID,
  SUM(CAST(SPLIT(i, ';')[OFFSET(2)] AS INT64)) productQuantity,
  SUM(CAST(SPLIT(i, ';')[OFFSET(3)] AS FLOAT64)) productRevenue
FROM `project.dataset.table`,
UNNEST(SPLIT(product)) i
GROUP BY productID   
如果要应用于问题中的样本数据,则输出为

Row productID   productQuantity productRevenue   
1   12345678    3               69.97    
2   45678912    3               114.97   
3   14521452    3               194.97   

我想问一下,对于这种糟糕的数据格式,您是否有其他选择。BigQuery支持数组和记录。即使在基于字符串的格式中,也可以为不同类型的数据使用不同的分隔符。虽然你想做的是可能的,但我强烈推荐一个更合理的数据模型。嗯,这是我们从Adobe Analytics的原始数据源接收到的数据,我们必须适应它。谢谢你的帮助!真棒的米哈伊尔,它的工作,它使我不理解嵌套列的概念,所以我可以适应它的另一个用途。谢谢。