我正在使用 Cassandra-driver 节点包(4.6.3)。我目前正在尝试将数据从 Cassandra 迁移到 SQL。大约有 450 000 条记录,尝试使用诸如 Altryx 之类的 ETL 工具,但这不起作用,因为存在不受支持的数据类型,例如地图和列表。因此尝试使用节点 JS 调度程序进行迁移。但问题是 Cassandra 的驱动程序并没有流过所有的记录。下面是代码库。
let output = [], params = []
let query = `select * from users`
cassandraDriver.client.eachRow(query, params, { prepare : false , fetchSize: 1000 }, function(n, rows) {
output.push(1)
}, async function(err, result){
if(result.nextPage) {
result.nextPage()
} else if(output.length > 0) {
console.log('Total size : ', output.length)
}
})
当我检查 Cassandra DB 的查询(从用户中选择计数(*))时,计数与我在上述情况下得到的输出值不同。数字似乎不匹配。看起来它不会流式传输 Cassandra 中存在的所有行。知道为什么会这样吗?是包裹的问题吗?我很想有一个替代品。真的打破我的头来解决这个问题。
不知道为什么节点驱动程序会给出随机计数。1000 fetch size 的倍数可以正常工作,但是最后一批少于 1000 有点搞砸了。例如,如果我在 Cassandra 中有 9602 条记录,我使用节点 Cassandra 驱动程序流式传输的记录可能在 9588 左右。不知道为什么不考虑最后 14 条记录。