当前位置:  开发笔记 > 编程语言 > 正文

如何在Cassandra中插入没有空值的列

如何解决《如何在Cassandra中插入没有空值的列》经验,为你挑选了1个好方法。

我正在尝试使用Python和DataStax驱动程序(Python - > Cassandra)在Cassandra数据库中存储一些推文.

一切都运作良好,但有一些我无法理解的东西.如何插入没有空值的行?

例如,

CREATE TABLE tweets (

id_tweet text PRIMARY KEY,
texttweet text,
hashtag text,
url text,
)

如果我想插入没有url值的行,它可以正常工作,但在Cassandra中,我会在url列中看到"null".

我查看这个doc:

http://datastax.github.io/python-driver/getting_started.html#passing-parameters-to-cql-queries

所以我尝试了两种不同的方式:

首先,我将String创建为完整的String,然后执行它.

requete = "insert into Tweets(id_tweet,texttweet,hashtag,url) values ('%s','%s','%s','%s')"%(id_tweet,texttweet,hashtag,url)
session.execute(requete)

或者
我在执行功能中发送参数.

requete2 = "insert into Tweets(id_tweet,texttweet,hashtag,url) values ('%s','%s','%s','%s')"
session.execute(requete2,(id_tweet,id_texttweet,hashtag,url))

问题是,如果我的推文中没有URL或Hashtag作为示例,那么2种不同的方式会给我空值.

如果列连续为空,是否有可能看不到列,就像我在很多教程中看到的那样?

在此输入图像描述

谢谢.



1> Andy Tolbert..:

如果您使用的是Cassandra 2.2或更高版本,则可以执行此操作.在Cassandra 2.2中引入了"UNSET"的概念.这允许您使用相同的语句来插入行,即使您不想提供某些值,以下是如何执行此操作:

from cassandra.query import UNSET_VALUE
ps = session.prepare("insert into tweets(id_tweet,texttweet,hashtag,url) values (?,?,?,?)")
session.execute(ps, ("id", "hello world!", UNSET_VALUE, UNSET_VALUE));

这将向cassandra表明您不希望将这些值插入为null,而应将它们全部一起省略,因此不会将"null"值(内部这些是墓碑)插入到cassandra中.

在你这边,我认为你需要做一些预处理逻辑来转换任何传入的NoneUNSET_VALUE.2.2之前的解决方案是根据缺少的列调整查询,即insert into tweets(id_tweet,texttweet) values (?,?)hashtag和url是否None.

在检索端,技术上应该远离区分null和unset值(我会看看这个),但我不认为这样的机制存在于python驱动程序中.如果可以在协议中执行,我将打开一张票,但驱动程序中不存在该功能. 编辑:它看起来不像cassandra区分显式设置为null的值(内部标记为墓碑)和返回数据时从未设置的值.

您可以在此博客文章中阅读有关python驱动程序中的"UNSET"和其他2.2功能的更多信息.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有