Скопируйте строку из базы данных Cassandra, а затем вставьте ее с помощью Python
Я использую плагин DataStax Python Driver для Apache Cassandra.
Я хочу прочитать 100 строк из базы данных и затем вставить их снова в базу данных после изменения одного значения. Я не хочу пропустить предыдущие записи.
Я знаю, как получить мои строки:
rows = session.execute('SELECT * FROM columnfamily LIMIT 100;')
for myrecord in rows:
print(myrecord.timestamp)
Я знаю, как вставить новые строки в базу данных:
stmt = session.prepare('''
INSERT INTO columnfamily (rowkey, qualifier, info, act_date, log_time)
VALUES (, ?, ?, ?, ?)
IF NOT EXISTS
''')
results = session.execute(stmt, [arg1, arg2, ...])
Мои проблемы таковы:
- Я не знаю, как изменить только одно значение подряд.
- Я не знаю, как вставить строки в базу данных без использования CQL. У моей семьи-столбцов более 150 столбцов, и запись всех их имен в запросе не кажется лучшей идеей.
В заключение: есть ли способ получить строки, изменить одно значение из каждого из них, а затем вставить эти строки в базу данных, не используя только CQL?
1 ответ
Во-первых, вам нужно выбрать только нужные столбцы из Cassandra - это будет быстрее для передачи данных. Вам нужно включить все столбцы первичного ключа + столбец, который вы хотите изменить.
После того, как вы получите данные, вы можете использовать команду UPDATE, чтобы обновить только необходимый столбец (пример из документации):
UPDATE cycling.cyclist_name
SET comments ='='Rides hard, gets along with others, a real winner'
WHERE id = fb372533-eb95-4bb4-8685-6ef61e994caa
Вы также можете использовать подготовленное заявление, чтобы сделать его более производительным...
Но будьте осторожны - UPDATE
& INSERT
в CQL действительно UPSERT, так что если вы измените столбцы, которые являются частью первичного ключа, то это создаст новую запись...