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 内部错误的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery 内部错误

BigQuery 数据传输作业因内部错误而失败(错误:80038528)

BigQuery 导出/复制内部错误

Big Query 返回的内部错误

BigQuery:发生内部错误,请求无法完成

Bigquery 返回内部错误 503:23 列 X 600,00 行