Ale*_*lex 2 google-bigquery google-cloud-platform
我的团队正在致力于使用 Google Cloud Platform 开发数据平台。我们将公司的数据上传到Google Cloud Storage,并尝试在Bigquery上建立数据集市。不过,为了节省GCP的使用成本,我们正在考虑将gcs中的所有数据加载到bigquery或者在bigquery上创建外部表。
哪种方式更具有成本效益?
BigQuery和外部表容量使数据湖(文件)和数据仓库(结构化数据)之间的界限变得模糊,您的问题是相关的。
当您使用外部表时,缺少一些功能,例如集群和分区,并且您的文件是动态解析的(通过类型转换) - >处理时间较慢,并且您无法控制/限制您的数据量过程。另外文件中可能存在的错误会破坏您的查询
当您使用本机表时,数据存储针对 BigQuery 处理进行了优化,数据已经清理和解析,表进行了分区和集群。
成本问题是很难的倍数。首先,我们可以谈谈数据存储。如果您在 GCS 中有文件并且在 BigQuery 中有相同的数据,您将支付两次存储费用。但是,90 天没有任何更新后,数据将进入 BigQuery 中的“存档”存储模式,并且价格便宜 2 倍。此外,您还可以在将 GCS 文件集成到 BigQuery 中后将其移至冷存储。
那是为了存储。然后进行加工。首先,处理成本大约是存储成本的 10 倍,这是最需要关注的事情。当您执行 BigQuery 请求时,您需要为查询扫描的数据量付费。如果您有分区或集群,使用 BigQuery 本机表,您可以限制扫描的数据量,从而大大降低成本。对于外部表,您无法使用分区和集群功能,因此您始终为全部数据量付费。
因此,它(一如既往)取决于您的数据量和请求的频率。
不要忘记一些额外的事情:使用外部表时,您可能会遇到可能破坏查询的错误。在生产模式下,这可能是戏剧性的。明智地思考这一点。
最后,请求外部表比本机表慢(没有分区,因此需要处理更多数据和解析/转换持续时间)。因为时间就是金钱(如果您有时间紧迫的查询),并且这种非物质成本也会影响您的选择。
@guillaume blaquiere 的答案是好的,但他忘记提到一些重要的事情:可以进行分区查询。您可以创建链接到存储中的存储桶的分区外部表。例如:
gs://myBucket/myTable/dt=2019-10-31/lang=en/foo
gs://myBucket/myTable/dt=2018-10-31/lang=fr/bar
然后,您可以在 BigQuery 的 SQL 查询中使用“dt”或“lang”过滤器。
https://cloud.google.com/bigquery/docs/hive-partitioned-queries-gcs
| 归档时间: |
|
| 查看次数: |
3982 次 |
| 最近记录: |