Google bigquery 如何改进频繁的BigQuery读取?

Google bigquery 如何改进频繁的BigQuery读取?,google-bigquery,Google Bigquery,我正在使用BigQueryforJava对大约5GB数据的表进行小的读取。我所做的查询遵循最标准的SQL,比如SELECT foo FROM my table,其中bar=$1,其中结果最多为1行。我需要在一个高频率做这件事,因此性能是一个大问题。如何对此进行优化 我曾考虑过周期性地提取整个数据集,因为它只有5GB,但5GB听起来像是需要经常保存在内存中的很多东西 在BigQuery控制台中运行此查询会显示类似于“查询完成”(0.6秒,处理4.2 GB)。4.2 GB的速度很快,但不够快。同样,

我正在使用BigQueryforJava对大约5GB数据的表进行小的读取。我所做的查询遵循最标准的SQL,比如
SELECT foo FROM my table,其中bar=$1
,其中结果最多为1行。我需要在一个高频率做这件事,因此性能是一个大问题。如何对此进行优化

我曾考虑过周期性地提取整个数据集,因为它只有5GB,但5GB听起来像是需要经常保存在内存中的很多东西

在BigQuery控制台中运行此查询会显示类似于“查询完成”(0.6秒,处理4.2 GB)。4.2 GB的速度很快,但不够快。同样,我需要非常频繁地阅读,但很少(可能一天或一周一次)写信给它


也许会告诉服务器以某种方式缓存处理过的数据?

您无法控制BigQuery中的缓存层。这是服务自动为您做的事情。不幸的是,典型的缓存生存期是24小时,缓存结果是尽力而为的,可能会很快失效(官方)


对于BQ来说,查询在0.6s内完成似乎很好。我担心,如果您正在寻找更快的东西,可能BigQuery不是您用例的数据仓库。

BigQuery是为分析处理而构建的,而不是与单个行交互。正如您所提到的,最好的做法是将它的副本保存在一个可以更快、更高效地读取单个行(如MySQL数据库)的位置

但是,通过将表聚集在要筛选的字段上,仍然可以极大地优化查询中扫描的数据量


默认情况下,已处理的数据会被缓存。按
bar
列对表进行聚类可能会提高读取速度。因此,如果缓存了结果,聚类是否只对第一个查询有帮助?可能是的。关于缓存的更多信息-您可以尝试不使用缓存-也许您可以从使用Bigtable中获益-