Apache Superset可以使用不同的后端存储来存储用户查询,其中包括SQLAlchemy(用于传统关系数据库)和Druid(用于分布式数据库)。查询存储在Superset元数据库(元数据存储),Superset的元数据库可以是SQLite、MySQL或PostgreSQL的一个实例。
在Superset元数据库中,用户查询存储在Query表中。以下是使用Python和SQLAlchemy从Query表中检索所有查询的示例代码:
from superset import db
from superset.models.sql_lab import Query
# Connect to Superset metadata database
engine = db.engine
# Query all queries from Query table
with engine.connect() as con:
query = con.execute(
'SELECT * FROM query'
)
for q in query.fetchall():
print(q)
使用Druid时,查询存储在Druid数据源本身中,而不是Superset元数据存储中。以下是检索Druid数据源上所有正在运行的查询的示例代码:
from pydruid.db import connect
from pydruid.utils import retrying_multi_func_wrapper
# Connect to Druid data source
connect_kwargs = {'host': '', 'port': ''}
conn = connect(**connect_kwargs)
@retrying_multi_func_wrapper
def run_query(query):
results = conn.export_pandas(query)
return results
# Retrieve all running queries from Druid data source
query = "SELECT * FROM sys.queries"
results = run_query(query)
for index, row in results.iterrows():
print(row)