首页 文章

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

提问于
浏览
4

我最近开始对 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 回答

  • 4

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

    使用此方法,您可以拥有任意名称的任意列 . 主键由两部分组成,第一个元素是row_key,其余元素在组合为一个列时形成一个列名 .

    查看推文示例here

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

  • 0

    我相信你使用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类型之间的映射 .

相关问题