【问题标题】:Cassandra Composite Columns - How are CompositeTypes chosen?Cassandra Composite Columns - 如何选择 CompositeTypes?
【发布时间】:2012-10-24 12:10:35
【问题描述】:

我试图了解创建复合列时使用的类型。

我使用 CQL3(通过 cqlsh)创建 CF,然后使用 CLI 发出描述命令。 列中的类型按以下排序:...CompositeType(Type1,Type2,...) 不是我所期望的。

我使用的是 Cassandra 1.1.6。

CREATE TABLE CompKeyTest1 (
             KeyA int,
             KeyB int,
             KeyC int,
             MyData varchar,
             PRIMARY KEY (KeyA, KeyB, KeyC)
           );

返回的 CompositeType 是

CompositeType(Int32,Int32,UTF8)

不应该是(Int32,Int32,Int32)吗?

CREATE TABLE CompKeyTest2 (
             KeyA int,
             KeyB varchar,
             KeyC int,
             MyData varchar,
             PRIMARY KEY (KeyA, KeyB, KeyC)
           );

返回的 CompositeType 是

CompositeType(UTF8,Int32,UTF8)

为什么和我定义表格时使用的类型不一样?我可能在类型分配中遗漏了一些基本的东西......

谢谢!

【问题讨论】:

    标签: cassandra cql3


    【解决方案1】:

    复合列名由主键 2...n 的 和正在保存的非主键列的 name 组成。

    (因此,如果您有 5 个非关键字段,那么您将拥有 5 个这样的列,并且它们的列名将仅在最后一个组合值(即非关键字段名称)中有所不同。)

    因此,在这两个示例中,复合列由 KeyB、KeyC 的 values 和要存储的列的 name 组成("MyData",在这两种情况下)。这就是为什么您会看到那些CompositeTypes 被退回的原因。

    (顺便说一句,主键中的第一个键是分区键,它的值仅用作行键(如果您熟悉 Cassandra)。它不用作任何复合列名。)

    【讨论】:

    • 感谢您的回答。只是为了确保我理解,第一个键是原始键,在这种情况下,它总是一个 int。下一个“键”是由其余主键字段和第一个数据字段(在我的情况下,它是唯一的数据字段)组成的复合键。
    • 差不多。每个非键字段存储在其自己的列中,其复合名称由键 2...n 的值和所存储的非键字段的名称组成。如果您有 5 个非键字段,那么您将有五个这样的列,它们的列名将仅在最后一个组合值中有所不同,该值将是非键字段名。第一个主键是分区键,它的值仅用作行键(如果您熟悉 Cassandra 的话),而不是任何复合列名的一部分。
    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2018-05-27
    • 2018-05-13
    • 2015-05-22
    相关资源
    最近更新 更多