通过python获取cassandra的信息

问题描述 投票:0回答:3

我通过以下方式连接到远程 Cassandra DB:

from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
from cassandra.query import dict_factory

cluster = Cluster(contact_points=[CASSANDRA_HOST], username='1',password='123')
session=cluster.connect()

然后,我想获取 Cassandra 中已有的键空间、表、列的列表。 在 cqlsh 中,它与

describe keyspace
一起使用。 我怎样才能在Python中做到这一点?

python cassandra
3个回答
2
投票

Cluster
的实例有一个
metadata
字段,它是Metadata类的实例 - 它有
keyspaces
成员,它是现有键空间的列表,迭代它你可以获得所有表,然后每个表 - 列等

DESCRIBE KEYSPACE
cqlsh
命令,尽管它可能会作为普通 CQL 命令被支持(不记得了,也许它将成为 4.0 版本的一部分)


2
投票

除了集群元数据之外,

system_schema
键空间也是您的朋友! 您可以像下表中的任何其他数据一样
SELECT
此数据:

system_schema.keyspaces
system_schema.tables
system_schema.columns

拉取列元数据可能如下所示:

    strCCQL = "SELECT column_name,type FROM system_schema.columns WHERE keyspace_name=? AND table_name=?"
    pcStatement = session.prepare(strCCQL)
    pcStatement.consistency_level=ConsistencyLevel.LOCAL_ONE

    crows = session.execute(pcStatement,[keyspace,table])
    for crow in crows:
        column = crow.column_name
        type = crow.type
        print (keyspace,table,column,type)

这个例子将所有内容放在一起。 但是您可以通过以类似的方式查询

keyspaces
tables
表来使用键空间和表名称数据作为种子。


0
投票

我已经检查了您的要求,并说一旦您获得键空间名称,您就可以分开并相应地使用下面的代码;

注意:要从 Cassandra DB 获取表和视图的列表,我们还必须传递适当的键空间名称。

# Note: pip install cassandra-driver
import pandas as pd
from cassandra.cluster import Cluster
from cassandra.query import dict_factory
from cassandra.auth import PlainTextAuthProvider


def get_keyspace_list_and_view_names(HOST, PORT, USERNAME, PASSWORD, KEYSPACE_NAME):
    """
    This method fetches the keyspace, list and view names from a given cassandra cluster
    """
    try:
        t_list, v_list, keyspace_list = [], [], []
        cluster = Cluster(contact_points=[HOST], port=int(PORT), load_balancing_policy=None, 
                            auth_provider=PlainTextAuthProvider(username=USERNAME, password=PASSWORD))
        session = cluster.connect(KEYSPACE_NAME) 
        for i in session.execute("SELECT * FROM system_schema.keyspaces;"): keyspace_list.append(i.keyspace_name)
        for i in session.execute("SELECT * FROM system_schema.tables WHERE keyspace_name = cassandra_test_keyspace;"): t_list.append(i.table_name)
        for i in session.execute("SELECT * FROM system_schema.views WHERE keyspace_name = cassandra_test_keyspace;"): v_list.append(i.view_name)
            
    except Exception as error_msg:
        return error_msg

    finally:
        session.shutdown()
        return keyspace_list, t_list, v_list

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.