BigQuery外部GCS表 - 优化Hive分区策略

0 人关注

我在BigQuery中有一个外部表,它从谷歌云存储的Avro文件中获取数据。我目前正在用蜂巢对数据进行日期划分,因为每个查询都会使用日期,重点是较新的数据。我正在考虑进一步按组织进行分区。

我没有找到很多关于分区方面的最佳做法的信息,以保持性能和保持低价。我的目标应该是保持较低的文件读取数量(即有少量较大的文件),还是应该保持BigQuery读取的字节数较低(更多、更小的文件和细粒度的分区策略)?或者,也许它更细微,有一个平衡点要保持?

我知道在不了解数据集和查询的情况下,这是一个棘手的问题,但我只想找到一个可以开始的地方,而不是只是猜测,后来不得不改变它。

4 个评论
你读过文档中的这一部分吗? cloud.google.com/bigquery/docs/...
是的,我已经在日期上设置了蜂巢式分区。我可以看到,读取的字节数是收费的,另外,蜂巢分区也是收费的(虽然我不完全清楚是如何计算的)。这是否意味着,在定价方面,我最好是对我的数据进行尽可能多的分区,并保持源文件的大小?从同一个桶中读取多个文件,是否会有性能上的影响?
你是否检查过外部数据源 的限制 ,因此它声称对外部数据源的查询性能与GCS的读取任务相当相同,因此这 篇文章 可能解释了接近小/大文件大小之间的最佳平衡的策略。
谢谢@mk_sta,这真的很有帮助。我已经意识到使用外部存储读取数据可能是一个坏主意,我只打算在将其导入BigQuery本地表之前将其作为一个中间存储。
google-cloud-platform
google-bigquery
google-cloud-storage
Simon
Simon
发布于 2020-05-18
1 个回答
Nick_Kh
Nick_Kh
发布于 2020-05-26
已采纳
0 人赞同

在Bigquéry后面查询外部存储的数据(联合数据)没有一般的处方,因为这主要取决于使用情况和客户目的,引用GCP文档。

  • 通过从外部数据源(BigQuery的外部位置)查询数据,一次性加载并清理数据 将清理后的结果写入BigQuery存储中。
  • 拥有少量频繁变化的数据,并与其他表连接。作为一个外部数据源,频繁变化的数据不需要重新 作为外部数据源,频繁变化的数据不需要在每次更新时重新加载。

    正如我在评论中提到的,由于外部数据源 限制 的问题,如果查询性能是主导因素,这时建议切换到经典方式 装载 数据到Bigquery水槽。

    外部数据源的查询性能可能不如 查询本地BigQuery表中的数据。如果查询速度是一个 速率,请将数据加载到BigQuery中,而不是设置一个 外部数据源。

    说到这里,在使用Bigquery外部数据源方面,GCS的I/O操作没有具体的增强。

  •