Google BigQuery 内部错误
Posted
技术标签:
【中文标题】Google BigQuery 内部错误【英文标题】:Google BiqQuery Internal Error 【发布时间】:2016-02-23 11:16:34 【问题描述】:编辑:稍微整理一下查询。检查在某一天运行(与我需要的 27 天相比)并且查询运行。使用 27 天的数据,它试图处理 5.67TB。会不会是这个问题?
错误运行的最新 ID:
职位 ID:ee-corporate:bquijob_3f47d425_1530e03af64
尝试通过 UI 和 Bigrquery 在 BigQuery 中运行查询时,我不断收到此错误消息。
查询失败
错误:发生内部错误,请求无法完成。
职位 ID:ee-corporate:bquijob_6b9bac2e_1530dba312e
代码如下:
SELECT
CASE WHEN d.category_grouped IS NULL THEN 'N/A' ELSE d.category_grouped END AS category_grouped_cleaned,
COUNT(UNIQUE(msisdn_token)) AS users,
(SUM(up_link_data_bytes) + SUM(down_link_data_bytes))/1000000 AS tot_data_mb
FROM (
SELECT
request_domain, up_link_data_bytes, down_link_data_bytes, msisdn_token, timestamp
FROM (TABLE_DATE_RANGE([helpful-skyline-97216:WEBLOG_Staging.WEBLOG_], TIMESTAMP('20160101'), TIMESTAMP('20160127')))
WHERE SUBSTR(http_status_code,1,1) IN ('1',
'2',
'3')) a
LEFT JOIN EACH web_usage_201601.domain_to_cat_lookup_27JAN_with_groups d
ON
a.request_domain = d.request_domain
WHERE
DATE(timestamp) >= '2016-01-01'
AND DATE(timestamp) <= '2016-01-27'
GROUP EACH BY
1
是不是我做错了什么?
【问题讨论】:
select ltrim(rtrim(request_domain)) as request_domain_trim 是否需要来自某个地方? 好点。是我注释掉的连接的剩余部分,但主表中还有一个 request_domain 变量,因此它不应该产生错误。我整理了查询并检查了 1 天的运行情况,似乎工作正常。虽然在 27 天得到一致的错误。数据很大,要处理 5.67TB,会不会是这个问题? 似乎主要问题是计数(唯一([var]))。即使我将表聚合到我需要的清晰程度,所以只有大约 4.4 亿条记录,我仍然遇到内部错误。一般来说,聚合到这个级别,然后对所有需要不同计数的查询做一个简单的计数会更好吗? 【参考方案1】:问题似乎来自 UNIQUE() - 它返回包含太多元素的重复字段。该错误可以改进,但您的解决方法是使用显式 GROUP BY,然后在其上运行 COUNT。
【讨论】:
【参考方案2】:如果你对近似值没问题,你也可以使用
COUNT(DISTINCT msisdn_token) AS users
或比默认1000更高的近似参数,
COUNT(DISTINCT msisdn_token, 5000) AS users
GROUP BY 是最通用的方法,但如果它们能满足您的需要,它们会更快。
【讨论】:
以上是关于Google BigQuery 内部错误的主要内容,如果未能解决你的问题,请参考以下文章