首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BigQuery从安卓系统加载数据耗时太长

BigQuery从安卓系统加载数据耗时太长
EN

Stack Overflow用户
提问于 2019-06-21 18:17:52
回答 1查看 194关注 0票数 0

BigQuery查询调用加载数据的时间太长。在BigQuery谷歌云平台上,大约需要7-8秒才能得到结果,同样的结果需要1秒。

我已经尝试了与谷歌云BigQuery库的文档相同的方法。https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries

代码语言:javascript
复制
InputStream is = 
mContext.getAssets().open("service_account.json");
BigQuery bigquery = BigQueryOptions.newBuilder()
.setProjectId("uniorder-prod")
.setCredentials(ServiceAccountCredentials.fromStream(is))
.build().getService();

QueryJobConfiguration queryConfig = 
QueryJobConfiguration.newBuilder("standard sql query")
.setUseLegacySql(false)
.build();

JobId jobId = JobId.of(UUID.randomUUID().toString());
Job queryJob = bigquery
                    .create(JobInfo
                            .newBuilder(queryConfig)
                            .setJobId(jobId).build());
queryJob = queryJob.waitFor();

if (queryJob == null) {
throw new RuntimeException("Job no longer exists");
} else if (queryJob.getStatus().getError() != null) {
throw new 
RuntimeException(queryJob.getStatus().getError().toString());
}

QueryResponse response = bigquery.getQueryResults(jobId);
TableResult result = queryJob.getQueryResults();

//Current query execution time is 7-8 second
//Expected query execution time is 1 or less than 1 second

//My SQL BigQuery
SELECT
  EXTRACT(DATE
  FROM
    TIMESTAMP(param2.value.string_value)) AS date,
  SUM(param3.value.double_value) AS total_price
FROM
  `uniorder-prod.analytics_200255431.events_*`,
  UNNEST(event_params) AS param1,
  UNNEST(event_params) AS param2,
  UNNEST(event_params) AS param3
WHERE
  event_name = "total_consumption_res"
  AND param1.key = "user_id"
  AND param1.value.int_value = 118
  AND param2.key = "timestamp"
  AND param3.key = "total_price"
  AND _TABLE_SUFFIX BETWEEN '20190601'
  AND '20190630'
GROUP BY
  date
ORDER BY
  date ASC
EN

回答 1

Stack Overflow用户

发布于 2019-08-19 17:09:47

在BigQuery上运行查询

queryJob = queryJob.waitFor();

不同于通过网络将查询结果拉回到应用程序中

QueryResponse response = bigquery.getQueryResults(jobId);

首先运行查询,然后获取结果。

您可以通过删除上述行来减少查询时间。

您的网络/互联网速度不会影响您在BigQuery中查询的性能。BigQuery是一个多租户架构,您可以与其他用户共享计算资源。如果你想要低延迟响应,那你就用错了工具。我会考虑像CloudSQL或Datastore这样的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56701453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档