在Cassandra中的Column Family中创建一个SubColumn

时间:2012-03-06 22:28:30

标签: cassandra super-columns

我一直试图看看我是否可以在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代码中删除它,Hash告诉我它是空白的。

我想知道这是否可行,如果不是将子列添加到列族的最佳方法。或者我只是在咆哮错误的树。

任何信息都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您正在尝试混合普通列和超级列。 Cassandra要求列族中的所有列都是普通列或超级列。您可以执行以下操作之一,而不是尝试使用超级列:

  • 将家庭住址栏拆分为3列:address_streetaddress_stateaddress_zip
  • 使用您喜欢的序列化格式(json,协议缓冲区等)将地址的组件存储在一列中