У меня есть код, как показано ниже.cassandra не задано значение по умолчанию для нового столбца, добавленного позже в модели python
from uuid import uuid4
from uuid import uuid1
from cassandra.cqlengine import columns, connection
from cassandra.cqlengine.models import Model
from cassandra.cqlengine.management import sync_table
class BaseModel(Model):
__abstract__ = True
id = columns.UUID(primary_key=True, default=uuid4)
created_timestamp = columns.TimeUUID(primary_key=True,
clustering_order='DESC',
default=uuid1)
deleted = columns.Boolean(required=True, default=False)
class OtherModel(BaseModel):
__table_name__ = 'other_table'
if __name__ == '__main__':
connection.setup(hosts=['localhost'],
default_keyspace='test')
sync_table(OtherModel)
OtherModel.create()
После первого выполнения, я могу видеть запись в db при запуске запроса как.
cqlsh> select * from test.other_table;
id | created_timestamp | deleted
--------------------------------------+--------------------------------------+---------
febc7789-5806-44d8-bbd5-45321676def9 | 840e1b66-cc73-11e6-a66c-38c986054a88 | False
(1 rows)
После этого я добавил новый столбец name
в OtherModel
и запустить ту же программу.
class OtherModel(BaseModel):
__table_name__ = 'other_table'
name = columns.Text(required=True, default='')
if __name__ == '__main__':
connection.setup(hosts=['localhost'],
default_keyspace='test')
sync_table(OtherModel)
OtherModel.create(name='test')
Когда проверка дб запись
cqlsh> select * from test.other_table;
id | created_timestamp | deleted | name
--------------------------------------+--------------------------------------+---------+------
936cfd6c-44a4-43d3-a3c0-fdd493144f4b | 4d7fd78c-cc74-11e6-bb49-38c986054a88 | False | test
febc7789-5806-44d8-bbd5-45321676def9 | 840e1b66-cc73-11e6-a66c-38c986054a88 | False | null
(2 rows)
Существует один ряд с name
как null
.
Но я не могу запросить значение null
.
cqlsh> select * from test.other_table where name=null;
InvalidRequest: code=2200 [Invalid query] message="Unsupported null value for indexed column name"
У меня есть ссылка How Can I Search for Records That Have A Null/Empty Field Using CQL?.
Когда я установил default=''
в Модели, почему он не установлен для всех значений null
в таблице?
Есть ли способ установить null
значение в name
по умолчанию ''
с запросом?
Спасибо Крис, моя проблема в том, что когда я делаю запрос с 'name = XYZ', я также хочу получить данные для' null', есть ли способ получить данные с этим? – Nilesh
Для подобных ситуаций подумайте об использовании Spark. Без него нет даже способа запросить имя = XYZ с этой схемой, если вы не создадите новую таблицу, материализованное представление или вторичный индекс. Обратите внимание, что MVs, и особенно 2is, имеют негативные последствия, и я рекомендую вам использовать их только после того, как вы полностью осознаете, как они работают, чтобы убедиться, что вы не сожжены. Id рекомендует новую таблицу здесь fwiw. Cassandra предназначен для огромных массивов данных, которые широко распространены, поэтому такие запросы, как запрос на любую часть данных, не поддерживаются, потому что они не будут работать во многих сценариях. Схема должна поддерживать запрос. –
Спасибо Крис, позвольте мне проверить, как я могу это решить :) – Nilesh