繁体   English   中英

Google bigQuery 拆分列

[英]Google bigQuery split column

我正在使用 google bigQuery 来分析亚马逊书评数据集。 数据集有一个 'helpful' 列,如下所示: 'helpful' :[0, 0] 其中第一个元素是“yes”投票,第二个元素是“total”投票。

当我上传数据 inn bigQuery 时,它将列拆分为两行,因为它不支持数组格式。 bigQuery 屏幕截图 使用 python pandas 中的“应用系列”方法,我可以将有用的列分成两列-“有用的投票”和“总投票”: jupyter notebook screenshot

如果我写这个查询在 BQ 中做同样的事情:

SELECT TA1.reviewerID, TA1.helpful AS yes, TA2.helpful AS total
FROM table_name as TA1

LEFT JOIN table_name as TA2
ON TA1.reviewerID = TA2.reviewerID and TA2.helpful != TA1.helpful
GROUP BY TA1.reviewerID

我收到以下错误:错误:(L1:27):GROUP BY 列表中不存在表达式“TA1.helpful”。

同样的查询适用于我的 sqlite3。 我在 BQ 中做错了什么?

谢谢,

下面是 BigQuery 标准 SQL

#standardSQL
SELECT 
  reviewerID, 
  helpful[OFFSET(0)] AS helpfulVote, 
  helpful[OFFSET(1)] AS totalVote 
FROM table_name  

您可以使用虚拟数据进行测试,如下所示

#standardSQL
WITH table_name AS (
  SELECT 'A' AS reviewerID, [0,0] AS helpful UNION ALL
  SELECT 'B' AS reviewerID, [0,2] AS helpful
)
SELECT 
  reviewerID, 
  helpful[OFFSET(0)] AS helpfulVote, 
  helpful[OFFSET(1)] AS totalVote 
FROM table_name 

查看更多关于访问数组元素

如果出于某种原因您仍在使用 BigQuery Legacy SQL,您可以使用以下版本(同时请参阅从旧版 SQL 迁移到标准 SQL,因为这是首选版本)

#legacydSQL
SELECT 
  reviewerID,
  MIN(helpful) WITHIN RECORD AS helpfulVote,
  MAX(helpful) WITHIN RECORD AS totalVote
FROM table_name  

同样的查询适用于我的 sqlite3。 我在 BQ 中做错了什么?

最后,如果您希望您的原始查询工作/修复 - 请参阅下文并阅读有关GROUP BY工作原理的更多信息

#legacydSQL
SELECT 
  TA1.reviewerID as reviewerID, 
  MIN(TA1.helpful) AS yes, 
  MAX(TA2.helpful) AS total
FROM table_name   as TA1
LEFT JOIN table_name   as TA2
ON TA1.reviewerID = TA2.reviewerID -- and TA2.helpful != TA1.helpful
GROUP BY TA1.reviewerID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM