我使用谷歌bigQuery来分析亚马逊书评数据集。数据集有一个“有用”的数据集。列看起来像这样:'有用' :[0,0]其中第一个元素是“是”'投票,第二个是'总计'投票。
当我上传bigQuery数据时,它将列拆分为两行,因为它不支持数组格式。 bigQuery screenshot。 使用'申请系列' 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):表达' TA1.helpful'在GROUP BY列表中不存在。
同样的查询在我的sqlite3中有效。我在BQ做错了什么?
谢谢,
答案 0 :(得分:2)
以下是BigQuery Standard 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的Migrating from legacy 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