Как найти дельта-разницу для таблицы в Кассандре, используя тип столбца uuid - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть следующая таблица на моем Cassandra db, я хочу найти разницу дельты в терминах запроса Cassandra. Например, если я выполняю какую-либо операцию вставки, обновления, удаления в таблицу, я должен иметь возможность показать, какая строка / строки влияют на мой конечный результат.

  1. Скажем, в первый раз у меня есть выполнить около 10 вставок строк, поэтому, если я возьму разность дельта, вывод должен показать только 10 вставленных строк. То же самое, если мы изменим любое количество строк или удалим несколько строк, то эти изменения должны быть зафиксированы.
  2. В следующий раз, если мы запустим запрос, он в идеале должен дать 0, так как мы не вставили / изменили / удалили ни одну строку / строки Вот следующая таблица
CREATE TABLE datainv (
  datainv_account_id uuid,
  datainv_run_id uuid,
  id uuid,
  datainv_summary text,
  json text,
  number text,
  PRIMARY KEY (datainv_account_id, datainv_run_id));

многие вещи, которые я искал на inte rnet, но большинство решений основано на timeuuid , но в этом случае у меня есть * Только 1012 * uuid столбцов. Поэтому я не получаю никакого решения, что тот же вариант использования может быть достигнут с помощью uuid

1 Ответ

0 голосов
/ 15 апреля 2020

Не так просто сгенерировать разницу между двумя состояниями таблицы в Cassandra, потому что вы не можете легко определить, вставили ли вы новые разделы или нет. Вы можете реализовать что-либо на основе timeuuid или timestamp в качестве столбца кластеризации - в этом случае вы сможете отфильтровать данные с момента последнего изменения, поскольку у вас есть порядок значений, которых у вас нет с uuid это совершенно случайно. Но все равно требуется, чтобы вы выполнили полное сканирование всей таблицы. Кроме того, он не обнаружит удаления ...

Теоретически вы можете реализовать это с помощью Spark следующим образом:

  • прочитать все значения первичного ключа и сохранить эти данные в другой таблице диск;
  • в следующий раз, прочитайте все значения первичных ключей и найдите разницу между исходным набором первичных ключей и новым набором - например, выполните полное внешнее соединение и используйте наличие None слева в качестве дополнения и присутствие None справа как удаление;
  • хранит новый набор первичных ключей в отдельной таблице / на диске, но предыдущая версия должна быть усечена.

, но она будет использовать довольно много ресурсов.

...