BigQuery API - 如何提高查询读取性能

时间:2016-02-24 16:30:56

标签: java google-bigquery

我们正在使用BigQuery来检索大表的完整内容。我们正在使用公开的publicdata:samples.natality。

我们的代码遵循其API doc - java

中所述的Google说明

我们能够以 1'300行/秒的速度检索此表格,这非常慢。是否有更快的方法来检索查询的完整结果,或者这总是像 fast 一样?

2 个答案:

答案 0 :(得分:3)

从BigQuery表中检索大量数据的推荐方法是不使用tabledata.list翻译整个表,因为该示例正在使用。该示例针对查询结果读取少量行进行了优化。

相反,您应该运行一个提取作业,将表格的整个内容导出到Google云端存储,然后您可以从中下载完整的内容。

https://cloud.google.com/bigquery/exporting-data-from-bigquery

答案 1 :(得分:0)

要快速下载表,您可以使用 Google BigQuery Storage Client for Java。

它允许您将表格下载为高效的二进制格式,例如 Avro 或 Arrow。 使用文档中的基本 Arrow 示例,我设法每秒下载约 100 万行。

我认为您可以通过将结果写入临时表来使用它来下载查询结果。

获取结果临时表的代码如下:

System::String^ StdStringToUTF16(std::string s)
{

 cli::array<System::Byte>^ a = gcnew cli::array<System::Byte>(s.length());
 int i = s.length();
 while (i-- > 0)
 {
    a[i] = s[i];
 }

 return System::Text::Encoding::UTF8->GetString(a);
}

参考文献: