【发布时间】:2021-08-21 22:33:54
【问题描述】:
我有大量数据要从 SQL Server 传输到 Cassandra。我已经开发了一些代码来使从 SQL Server 接收到的数据与 cassandra 兼容,但我无法插入它。由于它是大量数据,所以我会在一段时间后收到此错误:
我正在使用 nodejs 执行此操作。这是我的代码:
request.on('row', async function (columns) {
columns.forEach(async function (column) {
if (column.metadata.colName.toLowerCase() == sqlTimestampCol.toLowerCase()) {
data.timestamp = column.value;
data.partitionName = partition_utils.getPartitionNameByDate(column.value);
} else {
dataMap[column.metadata.colName] = column.value;
}
if (column.value === null) {
console.log('NULL');
} else {
result += column.value + " ";
}
});
data.dataMap = dataMap;
// INSERT CASSANDRA
var insertString =
`INSERT INTO ${cassandraKeyspace}.${cassandraTableName}(${cassandraDateColumn}, month_year_index, dataMap) VALUES (?,?,?)`;
await cassandraConnection.client.execute(insertString, insertParams, { prepare: true })
.then(async function () {
console.log(`Inserted data for ${cassandraTableName} successfully`);
})
.catch(async function (error) {
cassandraConnection.client.shutdown();
logger.error(error);
});
result = "";
data = {}
});
request.on('doneInProc', function (rowCount, more) {
console.log(rowCount + ' rows returned');
cassandraConnection.client.shutdown();
});
connection.execSql(request);
我正在使用繁琐的 npm 和 datastax cassandra 驱动程序。我做了一个简单的select * from table 并为表格的每一行运行上面的代码(在 request.on('row') 中),但这对我不起作用。有没有合适的方法来做到这一点?
从我读到的错误中,我收到的错误是因为我插入数据的速度比 cassandra 处理它的速度快。另外,只有当 SQL 查询结束时,新数据才真正插入到 cassandra 中。
【问题讨论】:
标签: node.js cassandra nosql database-migration