SELECT в кассандре, где id!= Null

Как я могу запросить в cassandra для!= нулевые столбцы.

Select * from tableA where id != null;
Select * from tableA where name != null;

Затем я хотел сохранить эти значения и вставить их в другую таблицу.

Ответ 1

Я не думаю, что это возможно с Кассандрой. Прежде всего, Cassandra CQL не поддерживает использование NOT или не равно операторам в предложении WHERE. Во-вторых, предложение WHERE может содержать только столбцы первичного ключа, а столбцы первичного ключа не позволят вставлять нулевые значения. Однако я не был уверен в вторичных индексах, поэтому я провел этот быстрый тест:

create table nullTest (id text PRIMARY KEY, name text);
INSERT INTO nullTest (id,name) VALUES ('1','bob');
INSERT INTO nullTest (id,name) VALUES ('2',null);

Теперь у меня есть таблица и две строки (одна с нулевыми данными):

SELECT * FROM nullTest;

 id | name
----+------
  2 | null
  1 |  bob

(2 rows)

Затем я пытаюсь создать вторичный индекс по имени, который, как я знаю, содержит нулевые значения.

CREATE INDEX nullTestIdx ON nullTest(name);

Это позволяет мне это делать. Теперь я запустил запрос по этому индексу.

SELECT * FROM nullTest WHERE name=null;
Bad Request: Unsupported null value for indexed column name

И снова это делается в предпосылке, что вы не можете запрашивать значение null, если вы даже не можете запросить значения столбцов, которые могут фактически быть нулевыми.

Итак, я думаю, что этого не может быть сделано. Кроме того, если нулевые значения являются возможными в вашем первичном ключе, тогда вы можете переоценить свою модель данных. Опять же, я знаю, что вопрос OP заключается в запросе, где данные не являются нулевыми. Но, как я уже упоминал ранее, Cassandra CQL не имеет оператора NOT или! =, Поэтому проблема будет там.

Другой вариант - вставить пустую строку вместо нулевого. Тогда вы сможете запросить пустую строку. Но это все еще не дает вам пройти мимо фундаментального недостатка дизайна, имеющего нуль в поле первичного ключа. Возможно, если у вас есть составной первичный ключ, и только его часть (столбцы кластеризации) имеет возможность быть пустым (конечно, не является частью ключа секционирования). Но вы все равно столкнетесь с проблемой неспособности запросить строки, которые "не пусты" (вместо не null).

ПРИМЕЧАНИЕ. Вставка нулевых значений была выполнена здесь только для демонстрационных целей. Это то, что вы должны делать все возможное, чтобы избежать, поскольку вставка значения нулевого столбца приведет к созданию надгробного камня. Аналогично, вставка большого количества нулевых значений создаст много надгробий.

Ответ 2

1) выберите * из теста;

name             | id | address
------------------+----+------------------
    bangalore |  3 |       ramyam_lab
    bangalore |  4 | bangalore_ramyam
    bangalore |  5 |        jasgdjgkj
       prasad | 11 |             null
       prasad | 12 |             null
        india |  6 |          karnata
        india |  7 |          karnata
ramyam-bangalore |  3 |        jasgdjgkj
ramyam-bangalore |  5 |        jasgdjgkj

2) cassandra не поддерживает выбор нулевых значений. Он показывает null для нашего понимания.

3) Для обработки нулевых значений используйте другие строки типа "недоступный", "нуль", затем мы можем выбрать данные

Ответ 3

Спасибо Прасаду и Аарону, у меня есть еще один вопрос к тому же запросу. Я создал таблицу, которая имеет значения для большинства столбцов, но для 4 столбцов мне нужно получить данные из другой таблицы. Для этого у меня есть мой разработчик, помогающий мне написать код для того же самого, но ему нужно, чтобы я сделал запрос на выборку для пустых столбцов, по которым он будет получать данные из другой таблицы.

Я пробовал ниже выбрать запрос... где я использовал отдельный запрос с ключом раздела.

ВЫБЕРИТЕ отличное имя хоста от server_availability WHERE account_name = '';

но получая ошибку: InvalidRequest: Ошибка сервера: code = 2200 [Invalid query] message = "SELECT DISTINCT с предложением WHERE поддерживает ограничение только по ключу раздела и/или статическим столбцам."

Пожалуйста помоги...