Google bigQuery拆分列

2024-05-15 06:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用googlebigquery来分析amazon书评数据集。数据集有一个“有用”列,看起来像这样:“有用”:[0,0],其中第一个元素是“是”投票,第二个元素是“总计”投票。在

当我上传bigQuery中的数据时,它将列分成两行,因为它不支持数组格式。 bigQuery screenshot。 使用python pandas中的“apply series”方法,我可以将有用的列分成两列-“有用的投票”和“总投票”: 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.help”。在

在我的sqlite3中也可以使用相同的查询。我在BQ做错了什么?在

谢谢


Tags: 数据name元素astablegroup投票bigquery
1条回答
网友
1楼 · 发布于 2024-05-15 06:24:34

下面是针对BigQuery标准SQL的

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

你可以用下面的虚拟数据来测试它

^{pr2}$

查看更多关于Accessing Array Elements

如果出于某种原因您仍在使用BigQuery遗留SQL,您可以使用以下版本(同时请参见标准SQL的Migrating from legacy SQL,因为这是首选版本)

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

The same query works in my sqlite3. What am I doing wrong in 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

相关问题 更多 >

    热门问题