Google cloud platform 使用假时间戳在Google BigQuery上创建分区

Google cloud platform 使用假时间戳在Google BigQuery上创建分区,google-cloud-platform,google-bigquery,Google Cloud Platform,Google Bigquery,Google BigQuery(BQ)允许您仅使用时间戳或日期类型创建分区 我99%的数据都有一个非常清晰的选择器idClient。我已经创建了一个类似于idClient=code的谓词来访问客户的视图,因此隐私得到了保证 这种策略的问题在于,有些客户有500万行,有些客户有20万行,而由于BQ没有索引,他们总是在处理彼此的数据(而且成本在上升) 我打算创建一个时间戳字段,每个客户都有一个不同的时间戳,在每个客户敏感表中的每次插入都会重复该字段,因此我可以通过将其固定为标准ID来按时间戳进行查询

Google BigQuery(BQ)允许您仅使用
时间戳
日期
类型创建分区

我99%的数据都有一个非常清晰的选择器idClient。我已经创建了一个类似于
idClient=code
的谓词来访问客户的视图,因此隐私得到了保证

这种策略的问题在于,有些客户有500万行,有些客户有20万行,而由于
BQ
没有索引,他们总是在处理彼此的数据(而且成本在上升)

我打算创建一个
时间戳
字段,每个客户都有一个不同的
时间戳
,在每个客户敏感表中的每次插入都会重复该字段,因此我可以通过将其固定为标准ID来按
时间戳
进行查询


这有什么意义吗?如果BQ是一个索引数据库,我会担心数据倾斜,但由于它总是全表扫描,我认为我只有好处,没有坏处

问题的解决方案是将集群字段添加到表中,该字段相当于其他数据库中的索引

这提供了有关如何使用群集字段的基本信息

集群可以提高某些类型查询的性能,例如使用筛选子句的查询和聚合数据的查询。当查询作业或加载作业将数据写入集群表时,BigQuery使用集群列中的值对数据进行排序


注意:当使用集群字段时,BigQuert dryRun没有显示成本的提高,这只能在执行后才能看到

问题的解决方案是将集群字段添加到表中,这相当于其他数据库中的索引

这提供了有关如何使用群集字段的基本信息

集群可以提高某些类型查询的性能,例如使用筛选子句的查询和聚合数据的查询。当查询作业或加载作业将数据写入集群表时,BigQuery使用集群列中的值对数据进行排序


注意:当使用集群字段BigQuert dryRun时,没有显示成本改进,这只能在执行后才能看到

您的工作负载是什么?根据您的使用情况,使用实际的数据库可能会更好。今天约有8000万行,但作为一家初创公司,我们总是梦想着更大。撇开小查询的延迟不谈,在我们的分析中,BQ在大多数情况下都更好。您的工作量是多少?根据您的使用情况,使用实际的数据库可能会更好。今天约有8000万行,但作为一家初创公司,我们总是梦想着更大。撇开小查询的延迟不谈,在我们的分析中,BQ在大多数情况下都更好。我已经看到了这一点,但我认为无论如何我都必须对表进行分区,您所说的是,使用集群的空分区将解决这个问题。请回答两个问题:1)集群列+空分区将完全避免读取数据丢失?2) 对列进行分区和集群不是更好吗?是的,2是正确的解决方案。有人编辑了我的原始答案,但它不正确,并添加了空注释:(.希望你找到正确的答案,这样你就可以投票并接受它。你好,塔米尔。这是我可能要面对的一个问题。当我传输数据时,我只能在(今天-356和今天+183)之间传输。在开始时,我的参考“id”当时是2000/01/01:00:00,但现在我把我的引用放在了未来183天。一年半后,我的分区将被自动排除,并且/或者我将无法再向它传输数据了?整个事情听起来有点奇怪,这是一个非常重要的功能,在成本/性能方面,谷歌似乎不理解这一点i@JLCDev分区应该是一个日期字段,您可以简单地使用插入日期作为它的值。集群字段应该是
idClient
,因此这两个字段现在都存储有意义的数据。您可以在查询中使用这两个字段,或者在每个用例中仅使用1个字段,以最大限度地节省成本。有关更多详细信息,请参见此和此。了解。最后一个问题。Do您知道,我无法创建具有任何时间戳的分区流,但只能创建具有D-365和D+183的分区流(D=today)。我担心的是,我的分区在一年半后将无法正常运行,我将无法继续向其流式传输。我愿意冒险,打赌谷歌将改进其分区功能,我只想知道我是否必须倒计时。非常感谢。我已经看到了这一点,但我想我会看到的无论如何,要对表进行分区,您要说的是,带有集群的空分区将解决此问题。请回答两个问题:1)集群列+空分区将完全避免读取数据的错误?2) 对列进行分区和集群不是更好吗?是的,2是正确的解决方案。有人编辑了我的原始答案,但它不正确,并添加了空注释:(.希望你找到正确的答案,这样你就可以投票并接受它。你好,塔米尔。这是我可能要面对的一个问题。当我传输数据时,我只能在(今天-356和今天+183)之间传输。在开始时,我的参考“id”当时是2000/01/01:00:00,但现在我把我的引用放在了未来183天。一年半后,我的分区将被自动排除,并且/或者我将无法再向它传输数据了?整个事情听起来有点奇怪,这是一个非常重要的功能,在成本/性能方面,谷歌似乎不理解这一点i@JLCDev分区应该是一个日期字段,您可以简单地使用插入日期作为它的值。集群字段应该是
idClient
,因此这两个字段现在都存储有意义的数据。您可以在查询中使用这两个字段,或者在每个用例中仅使用1个字段,以最大限度地节省成本。有关更多详细信息,请参见此和此。了解。最后一个问题。Do您知道,我不能创建具有任何时间戳的分区流,而只能使用D-36