如何使用golang查询将数据流传输到cassandra

问题描述 投票:0回答:1

我有以下代码:

cluster := gocql.NewCluster("our-cass")
cass, err := cluster.CreateSession()
defer cass.Close()
iter := cass.Query(`SELECT * FROM cmuser.users LIMIT 9999999999;`).Iter()
c :=iter.Columns()
scanArgs := make([]interface{}, len(c))

for i:=0; i < len(scanArgs); i++ {
    scanArgs[i] = makeType(c[i])
}

for iter.Scan(scanArgs...) { ... }

问题是我们在该表中有太多行,但是我需要读取所有行,才能将数据迁移到另一个数据库。有没有办法从Cassandra stream提取数据?不幸的是,我们没有针对表主键的序列,我们为PK使用了uuid,因此这意味着我们无法对循环进行简单的2技巧,即增加一个计数器并遍历所有这样的行..

go elasticsearch cassandra stream data-stream
1个回答
0
投票

Gocql有一些用于分页的选项(假设您的Cassandra版本至少是版本2)。

Gocql的Session具有方法SetPageSizehttps://godoc.org/github.com/gocql/gocql#Session.SetPageSize

并且Gocql的Query具有类似的方法,PageSizehttps://godoc.org/github.com/gocql/gocql#Query.PageSize

这可以帮助您分解查询。代码如下所示:

cluster := gocql.NewCluster("our-cass")
cass, err := cluster.CreateSession()
defer cass.Close()

iter := cass.Query(`SELECT * FROM cmuser.users;`).PageSize(5000).Iter()
© www.soinside.com 2019 - 2024. All rights reserved.