1

我一直在尝试查看是否可以在 cassandra 列族中拥有超级或普通的嵌套列。我已经看遍了,还没有完全看到我在寻找什么。

我想做这样的事情。

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

从以下帖子为具有元数据的超级列创建 Cassandra 架构

我发现了类似的东西,但它没有按照我想要的方式工作。

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 代码中提取它,哈希告诉我它是空白的。

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

任何信息,将不胜感激。

4

1 回答 1

2

You are trying to mix normal columns and super columns. Cassandra requires that all columns in a column family are either normal columns or super columns. Instead of trying to use a super column you could do one of the following:

  • Split the home address column up into 3 columns: address_street, address_state, address_zip
  • Store the components of the address in one column using your favorite serialization format (json, protocol buffers, etc.)
于 2012-03-07T16:37:43.600 回答