私は以下のようなコードを持っています。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)
はこの後、私はOtherModel
で、それを新しい列name
を追加し、同じプログラムを実行します。
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')
null
としてname
と一列であり、チェックDBエントリ
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)
。
しかし、私は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
に設定する方法はありますか?クエリのデフォルト値は''
ですか?
Chrisさん、ありがとうございます。私の問題は、 'name = XYZ'を使ってクエリを作成したときに、' null 'のデータも取得したいのですが、そこでデータを取得する方法はありますか? – Nilesh
このようなアドホックなことについては、Sparkの使用を検討してください。それがなければ、新しい表、マテリアライズド・ビュー、または2次索引を作成しないかぎり、このスキーマを使用してname = XYZを問い合せる方法もありません。 MVや特に2が悪影響を及ぼすことに注意してください。あなたが火傷をしていないことを確認するためにどのように働いているかを十分に理解してから使用することをお勧めします。ここでは新しいテーブルをお勧めします。 Cassandraは、大量に配布される巨大なデータセット用に設計されているため、多くのシナリオでは機能しないため、データの問合せなどのサポートはサポートされていません。スキーマはクエリをサポートする必要があります。 –
クリスおかげで、私にチェックさせて、どのように私はこれを解決することができます:) – Nilesh