在运行时以编程方式确定Cassandra列

在运行时以编程方式确定Cassandra列,cassandra,cassandra-2.0,Cassandra,Cassandra 2.0,我正在访问一个Cassandra数据库,我只知道表名 我想发现列的名称和类型 这将为我提供列名: select column_name from system.schema_columns where columnfamily_name = 'customer' allow filtering; 这合理吗 有人对确定列类型有什么建议吗?您可以通过查看用于验证程序的类来推断列类型。验证程序列只是一个字符串 该字符串有三种格式之一: org.apache.cassandra.db.mar

我正在访问一个Cassandra数据库,我只知道表名

我想发现列的名称和类型

这将为我提供列名:

select column_name 
  from system.schema_columns 
where columnfamily_name = 'customer' 
allow filtering;
这合理吗


有人对确定列类型有什么建议吗?

您可以通过查看用于验证程序的类来推断列类型。验证程序列只是一个字符串

该字符串有三种格式之一:

org.apache.cassandra.db.marshal.XXXType表示简单列类型,其中XXX表示列的Java类型(例如,对于bigint列,XXX表示“Long”,对于varchar/text,XXX表示“UTF8”,等等)

set列的org.apache.cassandra.db.marshal.SetType(org.apache.cassandra.db.marshal.XXXType),其中括号中的类型是每个set元素的类型


地图的org.apache.cassandra.db.marshal.MapType(org.apache.cassandra.db.marshal.XXXType,org.apache.cassandra.db.marshal.XXXType)根据您使用的驱动程序,您应该能够使用元数据API

举几个例子:


驱动程序查询系统架构元数据以创建这些模型。

非常古老但仍然有效的问题。模型中有一个类变量,用于描述列(字段名和列类):

class Tweet(cqldb.Model):
"""
对象,表示Cassandra中的tweet列族
"""
__keyspace\uuux='my\uks'
#遵循模型定义
...
...
打印(Tweet.\u定义的\u列)
#输出
OrderedDict([('tweetid',),
),
(“tweet_id”,
),
(“创建于”,
),
(“ttype”,
),
(‘推特’,
),
(‘郎’,
)])

您可以尝试“descripe”语句:descripe Table[keyspace]。customer
descripe
只在cqlsh内部工作。我是卡桑德拉的新手。您能详细描述一下我将如何完成查看用于验证程序的类吗?对不起,验证程序列在表system.schema_列的最后一列中,这只是一个字符串列,其中的值是执行验证的类的名称。您必须解析这些字符串。我将编辑我的答案。
class Tweet(cqldb.Model):
    """
    Object representing the tweet column family in Cassandra
    """
    __keyspace__ = 'my_ks'
    # follows model definition
    ...
    ...

print(Tweet._defined_columns)

# output

OrderedDict([('tweetid',
                        <cassandra.cqlengine.columns.Text at 0x7f4a4c9b66a0>),
                       ('tweet_id',
                        <cassandra.cqlengine.columns.BigInt at 0x7f4a4c9b6828>),
                       ('created_at',
                        <cassandra.cqlengine.columns.DateTime at 0x7f4a4c9b6748>),
                       ('ttype',
                        <cassandra.cqlengine.columns.Text at 0x7f4a4c9b6198>),
                       ('tweet',
                        <cassandra.cqlengine.columns.Text at 0x7f4a4c9b6390>),
                       ('lang',
                        <cassandra.cqlengine.columns.Text at 0x7f4a4c9b3d68>)])