Google cloud platform BigQuery外部GCS表-优化配置单元分区策略

Google cloud platform BigQuery外部GCS表-优化配置单元分区策略,google-cloud-platform,google-bigquery,google-cloud-storage,Google Cloud Platform,Google Bigquery,Google Cloud Storage,我在BigQuery中有一个外部表,它从Google云存储上的Avro文件中提取数据。我目前正在按日期对数据进行划分,因为每个查询都将使用日期,重点是更新的数据。我也在考虑进一步的组织划分 我没有找到多少关于分区以保持性能和低成本的最佳实践的信息。我应该将文件读取的数量保持在较低的水平(即有少量较大的文件)还是应该将BigQuery读取的字节数保持在较低的水平(更多、较小的文件采用细粒度分区策略)?或者可能更微妙,需要保持平衡 如果不了解数据集和查询,我知道这是一个很难回答的问题,但我只想找到一

我在BigQuery中有一个外部表,它从Google云存储上的Avro文件中提取数据。我目前正在按日期对数据进行划分,因为每个查询都将使用日期,重点是更新的数据。我也在考虑进一步的组织划分

我没有找到多少关于分区以保持性能和低成本的最佳实践的信息。我应该将文件读取的数量保持在较低的水平(即有少量较大的文件)还是应该将BigQuery读取的字节数保持在较低的水平(更多、较小的文件采用细粒度分区策略)?或者可能更微妙,需要保持平衡


如果不了解数据集和查询,我知道这是一个很难回答的问题,但我只想找到一个开始的地方,而不是猜测并在以后进行更改。

查询外部存储的数据(联邦数据)时,没有达到最佳性能的通用方法在Bigquéry背后,因为它主要取决于用例和客户目的,引用GCP文档:

  • 通过从外部数据源(BigQuery外部的位置)查询数据,一次性加载和清理数据,并 将清理后的结果写入BigQuery存储
  • 拥有少量与其他表连接的频繁更改的数据。作为一个外部数据源 更改数据不需要每次都重新加载 更新
正如我在评论中提到的,由于外部数据源的原因,如果查询性能是主要因素,那么在建议切换到经典方式数据到Bigquery接收器时:

外部数据源的查询性能可能不如 在本机BigQuery表中查询数据。如果查询速度是 优先级,将数据加载到BigQuery中,而不是设置 外部数据源

话虽如此,就Bigquery外部数据源的使用而言,地面军事系统的I/O操作没有具体的增强:

通常,外部数据源的查询性能应该是 相当于直接从外部存储器读取数据


你在文件中读过这部分吗?是的,我已经在日期设置了蜂巢分区。我可以看出,读取字节和配置单元分区都要收费(尽管我不完全清楚这是如何计算的)。这是否意味着,在定价方面,我最好对数据进行分区,并使源文件保持较小?从同一个存储桶中读取多个文件是否会影响性能?您是否检查了外部数据源,因此它声称针对外部数据源的查询性能与针对地面军事系统读取任务的查询性能相当,因此这可能解释了接近小/大文件大小之间最佳平衡的策略。感谢@mk_sta,那真的很有帮助。我意识到使用外部存储读取数据可能是个坏主意,在将数据导入BigQuery本机表之前,我打算将其用作中间存储。