cassandra-3.0 - 如何使用 QueryBuilder 创建需要更新 UDT 值的更新语句
问题描述
我有以下udt type
CREATE TYPE tag_partitions(
year bigint,
month bigint);
和下表
CREATE TABLE ${tableName} (
tag text,
partition_info set<FROZEN<tag_partitions>>,
PRIMARY KEY ((tag))
)
使用以下模型映射表架构
case class TagPartitionsInfo(year:Long, month:Long)
case class TagPartitions(tag:String, partition_info:Set[TagPartitionsInfo])
我编写了一个应该创建Update.IfExists
查询的函数:但我不知道应该如何更新该udt
值。我尝试使用set
,但它不起作用。
def updateValues(tableName:String, model:TagPartitions, id:TagPartitionKeys):Update.IfExists = {
val partitionInfoType:UserType = session.getCluster().getMetadata
.getKeyspace("codingjedi").getUserType("tag_partitions")
//create value
//the logic below assumes that there is only one element in the set
val partitionsInfoSet:Set[UDTValue] = model.partition_info.map((partitionInfo:TagPartitionsInfo) =>{
partitionInfoType.newValue()
.setLong("year",partitionInfo.year)
.setLong("month",partitionInfo.month)
})
println("partition info converted to UDTValue: "+partitionsInfoSet)
QueryBuilder.update(tableName).
`with`(QueryBuilder.WHAT_TO_DO_HERE_TO_UPDATE_UDT("partition_info",partitionsInfoSet))
.where(QueryBuilder.eq("tag", id.tag)).ifExists()
}
解决方案
错误是我partitionsInfoSet
在表中添加,但它是一组 Scala。我需要使用转换成 Java 集setAsJavaSet
QueryBuilder.update(tableName).`with`(QueryBuilder.set("partition_info",setAsJavaSet(partitionsInfoSet)))
.where(QueryBuilder.eq("tag", id.tag))
.ifExists()
}
推荐阅读
- microsoft-translator - 自定义翻译器无法提取 XLIFF 文件的内容
- jupyter - Holoviews 图表不会消失,即使在 jupyter 实验室笔记本关闭后
- r - R中的降雨季节性指数
- scala - maxDiscardedFactor 在 ScalaTest 中做了什么?
- python - python请求缺少部分内容
- node.js - 在电子中获取输入文本控件的句柄 HWND
- django - 如何在 Django 中使用 posgresql 'interval'?
- ruby-on-rails - # 未定义的方法“图像”
- awk - 从另一个文件中删除包含字符串的文件中的所有行
- python-3.x - Python Pandas 数据框列在拆分数据分数上未正确更新