Скопируйте строку из базы данных 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, ...])

Мои проблемы таковы:

  1. Я не знаю, как изменить только одно значение подряд.
  2. Я не знаю, как вставить строки в базу данных без использования 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, так что если вы измените столбцы, которые являются частью первичного ключа, то это создаст новую запись...

Другие вопросы по тегам