如何使用带有Datastax Java驱动程序的CQL向Cassandra添加任意列?

时间:2013-10-01 05:35:08

标签: java cassandra cql cql3 datastax-java-driver

我最近开始对CQL感兴趣,因为我正在考虑使用Datastax Java驱动程序。以前,我使用的是column family而不是表格,我使用的是Astyanax驱动程序。我需要在这里澄清一些事情 -

我在生产群集中使用以下列系列定义。我可以动态插入任意列(及其值),而无需实际修改列族模式。

create column family FAMILY_DATA
with key_validation_class = 'UTF8Type'
and comparator = 'UTF8Type'
and default_validation_class = 'BytesType'
and gc_grace = 86400;

但是在经历了这个post之后,它看起来像每当我得到一个新列插入时我需要改变模式,这不是我想做的......我相信CQL3要求列元数据存在......

还有其他方法,如果我使用Datastax Java驱动程序,我仍然可以添加任意列及其特定值吗?

任何代码示例/示例都会帮助我更好地理解..谢谢..

2 个答案:

答案 0 :(得分:4)

我相信你使用collections来解决这个问题。

您可以将字段的数据类型定义为地图,然后将任意数量的键值对插入到地图中,这应该主要表现为传统Thrift中的动态列。

类似的东西:

CREATE TABLE data ( data_id int PRIMARY KEY, data_time long, data_values map );
INSERT INTO data (data_id, data_time, data_values) VALUES (1, 21341324, {'sum': 2134, 'avg': 44.5 });

Here是更多信息。

此外,您还可以找到CQL3类型与DataStax驱动程序here使用的Java类型之间的映射。

答案 1 :(得分:0)

如果为该表启用了压缩存储,它将向后兼容thrift和CQL 2.0,这两者都允许您输入动态列名。

使用此方法,您可以拥有任意名称的任意列。主键由两部分组成,第一个元素是row_key,剩下的元素作为一个组合形成一个列名。

请参阅推文示例here

虽然您已经说过它已经投入生产,但可能无法使用现有数据更改表格以使用紧凑型存储。