программно определяя столбцы Cassandra во время выполнения

Я обращаюсь к базе данных Cassandra и знаю только имена таблиц.

Я хочу узнать имена и типы столбцов.

Это даст мне имена столбцов:

select column_name 
  from system.schema_columns 
where columnfamily_name = 'customer' 
allow filtering;

Это разумно?

У кого-нибудь есть предложения по определению типов столбцов?


person user1126515    schedule 11.11.2015    source источник
comment
Вы можете попробовать описать оператор: Describe Table [keyspace].customer   -  person DBug    schedule 11.11.2015
comment
describe работает только изнутри cqlsh.   -  person Aaron    schedule 11.11.2015


Ответы (3)


Вы можете сделать вывод о типах столбцов, просмотрев классы, используемые для валидатора. Столбец валидатора — это просто строка.

Строка имеет один из 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) для карт

person DBug    schedule 11.11.2015
comment
я новичок в кассандре. Можете ли вы описать немного больше о том, как я могу просмотреть классы, используемые для валидатора? - person user1126515; 11.11.2015
comment
Извините, валидатор указан в последнем столбце таблицы system.schema_columns. Это просто строковый столбец, где значением является имя класса, выполняющего проверки. Вам нужно будет разобрать эти строки. Я отредактирую свой ответ. - person DBug; 11.11.2015

В зависимости от того, какой драйвер вы используете, вы сможете использовать API метаданных.

Пара примеров:

http://datastax.github.io/python-driver/api/cassandra/metadata.html#schemas https://datastax.github.io/java-driver/features/metadata/#schema-metadata

Драйверы запрашивают метаданные системной схемы для создания этих моделей.

person Adam Holmberg    schedule 11.11.2015

Довольно старый, но все еще актуальный вопрос. В вашей модели есть переменная класса, описывающая столбцы (имя поля и класс столбца):

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>)])
person BangTheBank    schedule 27.09.2018