Schema 未完全从 Thrift 协议转换为 CQL 协议

Posted

技术标签:

【中文标题】Schema 未完全从 Thrift 协议转换为 CQL 协议【英文标题】:Schema not translated completely from Thrift protocol to CQL protocol 【发布时间】:2017-03-14 04:06:11 【问题描述】:

我正在尝试在我的项目中从使用 pycassa 转移到本机协议(这将让我们升级 cassandra 的版本)。我的模式是使用 pycassa 定义的,因此它使用紧凑存储创建了一个列族,它有 3 个不属于复合主键的列(我知道 CQL 协议不允许这样做。)

我当前 Cassandra 集群的版本是 2.0.17。当我使用 thrift 协议“显示模式”时的模式是:

create column family store
    with column_type = 'Standard'
    and comparator = 'CompositeType(org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.LongType),org.apache.cassandra.db.marshal.AsciiType,org.apache.cassandra.db.marshal.AsciiType)'
    and default_validation_class = 'DoubleType'
    and key_validation_class = 'AsciiType'
    and column_metadata = [
       column_name : 'something1',
       validation_class : AsciiType,
      column_name : 'something2',
      validation_class : AsciiType]

但是当我检查本机协议的架构时,它缺少“column3”和“value”列。结果如下:

CREATE TABLE store (
  key ascii,
  column1 bigint,
  column2 ascii,
  something1 ascii,
  something2 ascii,
  PRIMARY KEY ((key), column1, column2)
) WITH COMPACT STORAGE AND
CLUSTERING ORDER BY (column1 DESC, column2 ASC)

现在,由于这种差异,我无法在客户端从 pycassa 转换到本机协议。我找不到任何东西来克服这个问题并确保本机协议看到正确的模式。你有什么可以建议我解决这个问题的吗?

【问题讨论】:

【参考方案1】:

简而言之,改变表格添加缺失的列。

您似乎没有 valuecolumn3 的任何列元数据如果它们只是 ascii,我不确定它们是什么类型那么你应该能够做到以下几点:

ALTER TABLE store ADD column3 ascii;
ALTER TABLE store ADD value ascii;

【讨论】:

我的商店里已经有很多数据了。如果我只是更改表,我怀疑这些数据是否会回到这个新模式,因为数据实际上已经存在于 Thrift 协议中。此外,Thrift 协议在 comparatordefault_validation_class 下已经有了 valuecolumn3 详细信息

以上是关于Schema 未完全从 Thrift 协议转换为 CQL 协议的主要内容,如果未能解决你的问题,请参考以下文章

RPC远程协议之Thrift入门

go thrift 开发

duboo服务使用thrift协议 + MQ

通过 Thrift 从 Chrome 扩展程序保存到 Evernote 的二进制文件在 Unicode 转换后出现乱码

dubbo协议层 jsonrpc协议迁移到http协议

Apache Thrift系列详解 - 序列化机制