Создает ли вставка в неустановленную ячейку Кассандры надгробную плиту? - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь разрешить аннулирование старых измерений, сохраняя их в моей настройке Cassandra. Учитывая следующую структуру таблицы:

ID|Test|result|valid|valid2
1 | 1  |  10  | False| unset
2 | 1  |  11  | True| False
3 | 1  |  12  | True| True

с первичным ключом (идентификатор, тест)

Теперь, если я вставлю следующий SparkDataframe, используя соединитель как обычно с mode ("append")

ID|Test|valid2
1 | 1  | False

Это создаст надгробную плиту? Цель состоит в том, чтобы иметь возможность «сделать недействительными» определенные строки в моих таблицах, когда это необходимо. Я понимаю, что надгробия создаются, когда клетки устарели. Но так как в ячейке нет значения, будет ли создан надгробный камень?

1 Ответ

1 голос
/ 27 января 2020

Надгробия создаются, когда вы выполняете явное УДАЛЕНИЕ, вставляете значение null или данные TTLed.

Если вы не укажете значение для указанного столбца c, тогда данные для этой ячейки просто не будут установлены, и если у вас были какие-то предыдущие данные ранее, они не будут перезаписаны, пока вы явно установите их на null. Но в Spark обычно другая ситуация - по умолчанию он будет вставлять нули, пока вы не укажете spark.cassandra.output.ignoreNulls как true - в этом случае он будет обрабатывать нули как неустановленные и не будет перезаписывать предыдущие данные.

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

Если у нас есть следующие таблица и данные:

create table test.v2(id int primary key, valid boolean, v int);
insert into test.v2(id, valid, v) values(2,True, 2);
insert into test.v2(id, valid, v) values(1,True, 1);

мы можем проверить, что данные видны в Spark:

scala> val data = spark.read.cassandraFormat("v2", "test").load()
data: org.apache.spark.sql.DataFrame = [id: int, v: int ... 1 more field]

scala> data.show
+---+---+-----+
| id|  v|valid|
+---+---+-----+
|  1|  1| true|
|  2|  2| true|
+---+---+-----+

Теперь обновите данные:

scala> import org.apache.spark.sql.SaveMode
import org.apache.spark.sql.SaveMode

scala> val newData = Seq((2, false)).toDF("id", "valid")
newData: org.apache.spark.sql.DataFrame = [id: int, valid: boolean]

scala> newData.write.cassandraFormat("v2", "test").mode(SaveMode.Append).save()

scala> data.show
+---+---+-----+
| id|  v|valid|
+---+---+-----+
|  1|  1| true|
|  2|  2|false|
+---+---+-----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...