我正在访问一个Cassandra数据库,我只知道表名。
我想发现这些名字&列的类型。
这将为我提供列名:
select column_name
from system.schema_columns
where columnfamily_name = 'customer'
allow filtering;
这是否合理?
有没有人有关于确定列类型的建议?
答案 0 :(得分:3)
根据您使用的驱动程序,您应该能够使用元数据API。
几个例子:
http://datastax.github.io/python-driver/api/cassandra/metadata.html#schemas https://datastax.github.io/java-driver/features/metadata/#schema-metadata
驱动程序查询系统架构元数据以创建这些模型。
答案 1 :(得分:0)
您可以通过查看用于验证程序的类来推断列类型。验证器列只是一个字符串。
字符串有3种格式之一:
org.apache.cassandra.db.marshal.XXXType用于简单列类型,其中XXX是列的Java类型(例如,对于bigint列,XXX是" Long",对于varchar / text, XXX是" UTF8"等。)
设置列的org.apache.cassandra.db.marshal.SetType(org.apache.cassandra.db.marshal.XXXType),其中括号中的类型是每个集合元素的类型
地图的org.apache.cassandra.db.marshal.MapType(org.apache.cassandra.db.marshal.XXXType,org.apache.cassandra.db.marshal.XXXType)
答案 2 :(得分:0)
非常古老但仍然有效的问题。模型中有一个用于描述列的类变量(字段名称和列类):
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>)])