2012-03-06 98 views
1

我一直在尝试查看是否可以在cassandra列族中嵌套列,无论是超级还是普通列。我已经看遍了,并没有完全看到我在找什么。在Cassandra的列族中创建一个子列

我想要做这样的事情。

`[{ firstname: "Me", 
    lastname: "Smith", 
    HomeAddress: { Street: "1234 Any Place Dr" 
        ,State: "IL" 
        ,zip: "62024" 
        } 
    }]` 

从下面的帖子Create a Cassandra schema for a super column with metadata

我发现类似的东西,但它不工作我想要的方式。

create column family users       
with comparator = UTF8Type 
and compression_options = { sstable_compression:SnappyCompressor, chunk_length_kb:64} 
and column_metadata = [ 
    { column_name: FirstName, validation_class : UTF8Type} 
    { column_name: LastName, validation_class : UTF8Type}, 
    { column_name: FavStore, validation_class : IntegerType} 
, { column_type: super, column_name: HomeAddress } 
]; 

这是我的代码,显示了我是如何创建我的列家族。

它创建它,但如果我把地址像上面的JSON例子似乎并不工作。

这是我的输出,当我从cli做一个列表。

RowKey: 646f68616c6c => (column=FavStore, value=59580595188280, timestamp=1330696438) => (column=Favorites, value=HASH(0x3618bc0), timestamp=1330696438) => (column=FirstName, value=Me, timestamp=1330696438) => (column=HomeAddress, value=HASH(0x3618b30), timestamp=1330696438) => (column=LastName, value=Smith, timestamp=1330696438)

当我尝试和住址拉出值我什么也没得到。看起来它是空的。我从一些Perl代码中取出它,哈希告诉我它是空白的。

我想知道这是否甚至是可能的,如果它不是什么是最好的方法添加一个子列到列家庭。或者我只是在错误的树上吠叫。

任何信息将不胜感激。

回答

2

您正在尝试混合普通列和超级列。 Cassandra要求列族中的所有列都是普通列或超级列。使用address_streetaddress_stateaddress_zip

  • 商店地址的部件在一列:不要试图使用超列,你可以做以下之一:

    • 斯普利特家庭地址栏成3列你最喜欢的序列化格式(json,协议缓冲区等)
  • +0

    感谢您的信息。我喜欢地址信息的JSON理念。我会给那一枪。 – 2012-03-07 16:52:49