2015-07-24 4 views
0

Как обновить колонку на основе большей или меньшей даты в Casandra?Cassandra Query by Date

Пример:

update asset_by_file_path set received = true where file_path = '/file/path' and time_received = '2015-07-24 02:14:34-0600';

Это прекрасно работает. Но я хотел бы сделать это для всех столбцов, соответствующих этому пути к файлу, и time_received больше, чем 2015-07-24 02:14:34-0600.

time_received - дата, кластерная колонка. file_path является строка, раздел ключа

ответ

0

Кассандра ИНЕКЕ имеет много ограничений, и если у вас есть несколько кластеризации столбцов вещи не мог бы работать, как вы ожидали, по крайней мере, есть ограничения для>,> =, <, < = и т.д. операторов. Вот довольно свежий blog post от Databrix о нюансах предложения WHERE, он также охватывает некоторые предстоящие функции.

0

Я думаю, что UPDATE может изменять только одну строку за раз, поэтому я не вижу способ обновить несколько строк на стороне сервера в CQL.

Пар возможных программные подходы:

  1. сделать запрос диапазона, чтобы вернуть все строки, которые необходимо обновить, а затем на стороне клиента, обновляет каждую строка возвращается. Так как все они будут для одного раздела, вы можете выпускать обновления в виде пакетных операторов.

  2. Если у вас есть Spark, вы можете прочитать все строки, которые хотите обновить, в RDD, используя запрос диапазона. Затем сделайте преобразование на RDD, чтобы установить полученное значение в значение true, а затем сохраните RDD обратно в Cassandra.