当前位置: 首页 > 知识库问答 >
问题:

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

梁研
2023-03-14

我正在尝试使用Python和DataStax驱动程序(Python-

一切都很好,但有些事情我无法理解。如何插入没有空值的行?

例如,

CREATE TABLE tweets (

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

如果我想插入一个没有url值的行,它可以工作,但在卡桑德拉中,我会在url列中看到“null”。

我检查这个文档:

http://datas tax . github . io/python-driver/getting _ started . html #将参数传递给cql-queries

所以我尝试了2种不同的方法:

首先,我创建一个完整的字符串,并执行它。

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))

问题是,如果我的tweet中没有URL或Hashtag,这两种不同的方法会给我空值。

像我在很多教程中看到的那样,如果一行是空的,有可能看不到列吗?

谢谢。

共有1个答案

阎星华
2023-03-14

如果您使用的是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插入,而是应该将它们一起省略,这样就不会在cassandra中插入“null”值(内部这些是墓碑)。

在您方面,我认为您需要执行一些预处理逻辑,以将任何传入的None值转换为UNSET_VALUE。2.2版之前的解决方案是根据缺少哪些列来调整查询,即插入tweets(id_tweet,texttweet)值(?,?)如果hashtag和url为

在检索端,从技术上讲,应该区分null和unset值(我将对此进行研究),但我认为python驱动程序中不存在这样的机制。如果可以在协议中执行,但驱动程序中没有该功能,我将打开一张罚单。编辑:看起来cassandra并没有区分显式设置为null(在内部标记为tombstone)的值和返回数据时从未设置的值。

你可以在这篇博客文章中阅读更多关于“UNSET”和python驱动程序中的其他2.2特性。

 类似资料:
  • 我有一个表(“table1”),有3列,分别称为col1、col2和col3(每个列都是VARCHAR),其中有4个值,如下所示: 我需要能够在任何时候将数据添加到任何列中,而不影响其他列。互联网上非常流行的代码是(比如,我们只需要在col2和col3列中添加数据): 但它添加了新行,如下所示: 我真正需要的是用新值填充列“col1”中以值“datA2”开头的行,并得到如下表: 该表有3列,每列对

  • 我试图使用Datastax驱动程序将作为<code>int、time、hash</code>提供的值存储到Cassandra中。 哈希显示为< code>{ "Q17.1_4"= 已将表定义为: 整数 时间戳 地图 PK(int,时间戳) 我可以把PK插入ok,但是我很难把哈希值强制转换成Cassandra可以处理的东西。 创建了一个准备好的语句,并在(尝试)遍历值时使用它: 如果我将“val”作

  • 我的cassandra DB结构: 我的代码: 我有一个错误,所以从print语句中获取查询,如下所示: 然后我手动运行此查询到cql,得到以下错误: 语法异常:

  • 我正在尝试使用Pig将HDFS中的文件中的数据复制到Cassandra中的表中。但在将数据存储在Cassandra中时,作业失败,出现空指针异常。有人能帮我吗? 用户表结构: 创建表用户(user\u id text主键、age int、第一个文本、最后一个文本) 我的猪脚本 > A=加载“/用户/hduser/用户。txt“使用PigStorage(',')作为(id:chararray,age

  • 我有一个名为的表 它有100列:{,,...,} 我了解如何特定列中不包含空值的行,例如: 如何任何列中不包含空值的所有行 但这将在(我正在使用)中返回一个错误