当前位置: 首页 > 面试题库 >

使用Java在Cassandra中将数据从一个表复制到另一个表

魏鸿
2023-03-14
问题内容

我正在尝试将所有数据从一个列族(表)移至另一列族。由于两个表都有不同的描述,因此我将不得不从表1中提取所有数据并为表2创建一个新对象,然后进行批量aync插入。我的表1有数百万条记录,因此我无法直接在我的数据结构中获取所有数据并进行计算。我正在寻找使用Spring
Data Cassandra和Java轻松实现此目的的解决方案。

我最初计划首先将所有数据移动到临时表,然后创建一些组合键关系,然后再查询我的主表。但是,这似乎对我不利。谁能建议一个好的策略来做到这一点?任何线索将不胜感激。谢谢!


问题答案:

我的表1有数百万条记录,因此我无法直接在我的数据结构中获取所有数据并进行计算。

使用datastax
java驱动程序,您可以按令牌范围获取所有数据,并从每个令牌范围计算出数据。例如:

Set<TokenRange> tokenRanges = cassandraSession.getCluster().getMetadata().getTokenRanges();

for(TokenRange tr: tokenRanges) {
    List<Row> rows = new ArrayList<>();
    for(TokenRange sub: tr.unwrap()){
        String query = "SELECT * FROM keyspace.table WHERE token(pk) > ? AND token(pk) <= ?";
        SimpleStatement st = new SimpleStatement( query, sub.getStart(), sub.getEnd() );
        rows.addAll( session.execute( st ).all() );
    }
    transformAndWriteToNewTable(rows); 
}

每个令牌范围仅包含所有数据的一部分,并且可以由一台物理机处理。您可以独立(并行或异步)处理每个令牌范围,以获得更高的性能。



 类似资料:
  • 在SQL Server中,如何将数据从一个表复制/追加到具有相同架构的另一个表中? 编辑: 假设有一个问题 它使用与表2中相同的模式和数据创建表1。 有没有这样的短查询只将整个数据复制到一个已经存在的表中?

  • 问题内容: 我想在MySQL中将数据从一个表复制到另一个表。 表1(现有表): 表2(新表) 我想将一些数据字段从表1复制到表2。 可以使用MySQL查询完成吗? 问题答案: 这将做您想要的: 如果要包括table1中的所有行。否则,如果只想添加table1的子集,则可以在末尾添加WHERE语句。 我希望这有帮助。

  • 问题内容: 我有两个具有相同结构的表。我需要从一个表中选择数据,然后将它们存储到另一个表中。 我怎样才能做到这一点? 问题答案: 因为它们是相同的结构,所以您可以做

  • 问题内容: 我有两个数据库,一个叫做,一个叫做。由于我想练习插入,更新内容,因此我想将某些表从复制到。 我要复制的表称为: 我试图做的是(使用SSMS)右键单击表格,但其中没有“复制”! 问题答案: 假设您有两个数据库,例如A和B: 如果目标表不存在,将创建以下脚本(我不建议这样): INTO COPY_TABLE_HERE FROM A.dbo.table_from_A table_A 如果目标

  • 我在课堂上创建了两个列表。 其中一个称为预算,包含元素section、month和sum,返回以下内容: [Budzet{sec='AGD/RTV',月='01',和=96},Budzet{sec='AGD/RTV',月='03',和=30},Budzet{sec='食品',月='04',和=23},Budzet{sec='游戏',月='09',和=1084}...] 这是SQL查询 第二个是元素

  • 问题内容: 我想从一个表中读取所有数据,然后将一些数据插入到另一个表中。我的查询是 但我有一个错误 请帮我。 问题答案: 您可以使用INSERT … SELECT语法。请注意,您可以在SELECT部分​​中直接引用“ 1”。