gpt4 book ai didi

google-cloud-platform - Google Spanner - 如何将数据复制到另一个表?

转载 作者:行者123 更新时间:2023-12-04 18:20:48 30 4
gpt4 key购买 nike

由于 Spanner 没有像这样的ddl功能

insert into dest as (select * from source_table)



我们如何选择表的子集并将该行复制到另一个表中?

我正在尝试将数据写入临时表,然后在一天结束时将数据移动到存档表。但到目前为止我能找到的唯一解决方案是,从源表中选择行并将它们写入新表。这是使用 java api 完成的,它没有 ResultSet 到 Mutation 转换器,所以我需要将表的每一列映射到新表,即使它们完全相同。

另一件事是只更新一个列数据,就像没有办法做“update table_name set column= column-1”

再次这样做,我需要读取该行并映射每个字段以更新 Mutation,但是如果有很多表,这没有用,我需要为所有表编码,ResultSet -> Mutation 转换也会很好。

是否有任何通用的 Mutation 克隆器和/或任何其他方式在表之间复制数据?

最佳答案

从 0.15 版开始 this open source JDBC Driver支持批量插入语句,可用于将数据从一个表复制到另一个表。 INSERT 语法还可用于对数据执行批量更新。

批量插入示例:

INSERT INTO TABLE  
(COL1, COL2, COL3)
SELECT C1, C2, C3
FROM OTHER_TABLE
WHERE C1>1000

批量更新是通过添加 ON DUPLICATE KEY UPDATE 的 INSERT 语句完成的。您必须在插入语句中包含主键的值,以“强制”违反键,从而确保更新现有行:
INSERT INTO TABLE  
(COL1, COL2, COL3)
SELECT COL1, COL2+1, COL3+COL2
FROM TABLE
WHERE COL2<1000
ON DUPLICATE KEY UPDATE

您可以使用 JDBC 驱动程序,例如 SQuirreL对其进行测试,或进行临时数据操作。

请注意,Cloud Spanner 的基本限制仍然适用,这意味着在一笔交易中最多可进行 20,000 次变更。 JDBC 驱动程序可以通过指定值 AllowExtendedMode=true 来解决此限制。在您的连接字符串或连接属性中。当这种模式被允许,并且你发出一个超过一个事务限制的批量 INSERT 或 UPDATE 语句时,驱动程序将自动打开一个额外的连接并在新连接上批量执行批量操作。这意味着批量操作不会以原子方式执行,并且会在每次成功批处理后自动提交,但至少会自动为您完成。

在这里查看更多示例: http://www.googlecloudspanner.com/2018/02/data-manipulation-language-with-google.html

关于google-cloud-platform - Google Spanner - 如何将数据复制到另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46118506/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com