Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 使BigQuery表数据保持最新_Google Bigquery - Fatal编程技术网

Google bigquery 使BigQuery表数据保持最新

Google bigquery 使BigQuery表数据保持最新,google-bigquery,Google Bigquery,对于BigQuery,这可能是不正确的用例,但我有以下问题:我需要定期更新大查询表。更新应该是原子的,从某种意义上说,读取数据的客户端应该只使用旧版本的数据,或者使用全新版本的数据。我现在唯一的解决方案是使用日期分区。这个解决方案的问题是,只需要读取最新数据的客户机应该知道分区,并且只从某些分区获取数据。每次我想进行查询时,我都必须首先确定要使用哪个分区,然后才从表中选择。有什么办法可以改进这一点吗?理想情况下,我希望解决方案对阅读数据的客户来说简单透明。您没有提到更新的大小,我只能给出一些一般

对于BigQuery,这可能是不正确的用例,但我有以下问题:我需要定期更新大查询表。更新应该是原子的,从某种意义上说,读取数据的客户端应该只使用旧版本的数据,或者使用全新版本的数据。我现在唯一的解决方案是使用日期分区。这个解决方案的问题是,只需要读取最新数据的客户机应该知道分区,并且只从某些分区获取数据。每次我想进行查询时,我都必须首先确定要使用哪个分区,然后才从表中选择。有什么办法可以改进这一点吗?理想情况下,我希望解决方案对阅读数据的客户来说简单透明。

您没有提到更新的大小,我只能给出一些一般性的指导

大多数BigQuery更新,包括单个DML插入/更新/删除/合并和单个加载作业,都是原子的。读卡器读取旧数据或新数据。 目前缺少多语句事务,如果您有不适合单加载作业的更新,解决方案是: 在所有加载完成后,将更新加载到临时表中 使用单次插入或合并将更新从临时表合并到主数据表 缺点:扫描暂存表不是免费的 更新:由于您有多个表要进行原子更新,有一个小技巧可能会有所帮助

假设您需要更新的每个表都有一个ActivePartition列作为分区键,那么您的表可能只有一行

创建表ActivePartition活动日期; 每次加载后,您都将ActivePartition.active设置为新的活动日期,然后您的用户使用脚本:

声明活动日期默认从活动分区中选择活动; -实际查询 选择来自数据表,其中ActivePartition=active
可能正在尝试物化视图?更新基本上正在替换整个数据。使用暂存表的想法很好,但不幸的是,我有多个连接的表需要一起更新。现在,我决定继续使用分区表,但分区数最多保持在两个。一种暂存分区加上生产分区。用一点技巧更新了答案。