BigQuery 行限制

Posted

技术标签:

【中文标题】BigQuery 行限制【英文标题】:BigQuery Row Limits 【发布时间】:2015-10-02 23:08:23 【问题描述】:

Google 称 BigQuery 可以处理数十亿行。

对于我的应用程序,我估计使用了 200,000,000 * 1000 行。远远超过几十亿。

我可以将数据划分为每个分区 200,000,000 行,但 BigQuery 中对此的唯一支持似乎是不同的表。 (如有错误请指正)

总数据量约为 2TB。

我在示例中看到了一些大数据量,但行数都低于十亿。

BigQuery 能否支持我在单个表中处理的行数?

如果不行,除了多表,我还能用其他方式分区吗?

【问题讨论】:

【参考方案1】:

下面应该回答你的问题

我再次运行我们的数据集之一 如您所见,表大小接近 10TB,行数约为 1.3-16 亿

SELECT 
  ROUND(size_bytes/1024/1024/1024/1024) as TB, 
  row_count as ROWS
FROM [mydataset.__TABLES__] 
ORDER BY row_count DESC
LIMIT 10

我认为到目前为止我们处理的最大牌桌至少达到了 5-60 亿,并且都按预期工作

Row   TB        ROWS     
1   10.0    1582903965   
2   11.0    1552433513   
3   10.0    1526783717   
4    9.0    1415777124   
5   10.0    1412000551   
6   10.0    1410253780   
7   11.0    1398147645   
8   11.0    1382021285   
9   11.0    1378284566   
10  11.0    1369109770   

【讨论】:

很有希望,但我正在处理两个数量级以上的行。 忘了提-这是每日分区数据/表-一天一张表。对于某些分析,我们必须查询的不仅仅是一张表。这很明显,但是 - BigQuery 是列式存储,因此您可以通过仅使用您真正需要的字段来控制查询量。 我的数据情况相同 - 按天分区。我还可以使用另一个索引来增加分区。你是如何完成分区的?通过使用不同的表? 类似这样的东西 - 每天都会进入新的每日表 - logname_YYYYMMDD BigQuery - 用于活动可查询数据【参考方案2】:

简短回答:是的,BigQuery 可以很好地处理这个问题,即使您将所有数据放在一个表中。

如果您确实想要对数据进行分区,那么现在唯一的方法是将数据显式存储在多个表中。如果您经常只查询数据的子集,您可能会考虑这样做以减少费用。许多用户按日期对数据进行分区,并使用table wildcard functions 在这些分区表的子集上编写查询。

【讨论】:

一张桌子或多张小桌子的最大问题是定价!即使您只提取了一行,Google 也会对请求列中的所有数据(5 美元/TB)收费!如果您的表太小,他们对任何查询的最低收费是 10MB! 这显然是一个优化问题,但我发现它的解决方案空间非常有限,主要关注将要查询的数据量以及您如何将查询批量化为 10MB .对于一家每月在数据存储上花费 10k+ 进行优化的公司来说,这是值得的。 @BAR 存储您的 2TB 数据,每月只需 40 美元。为什么你说它是每月10k +?把你的数据放在 bigquery 里几天,看看定价是多少,你会惊讶地发现它有多低。 @Pentium10 不,我没有说这些。我说的是 query 成本而不是存储。而且我不会花 10k,但对于这样的公司来说,这是值得进行一些优化的...... @BAR,你的用例是什么? BigQuery 的查询引擎和定价结构针对每次查询扫描大量数据的分析查询进行了优化。如果您正在执行目标是提取单个记录的点查找,那么使用 Google Datastore 之类的系统可能会更好,该系统专为事务性工作负载而设计。

以上是关于BigQuery 行限制的主要内容,如果未能解决你的问题,请参考以下文章

bigquery“下载为 CSV”的真正行限制是多少?

从 bigquery 导入到 google 表格限制为 10k 行

如何计算 bigquery 行大小?

进行预览时出现 Bigquery API 限制超出错误

BigQuery:关于使用 nodejs 删除和更新行的问题

使用多行达到 Bigquery JS UDF 限制