ClickHouse Virtual Server
Perspective provides a built-in virtual server for
ClickHouse, allowing <perspective-viewer> clients
to query a ClickHouse server over WebSocket.
For browser-only usage, see the JavaScript ClickHouse guide.
Installation
pip install perspective-python clickhouse-connect
Usage
Create a server that exposes ClickHouse tables to browser clients:
import clickhouse_connect
import tornado.web
import tornado.ioloop
from perspective import ClickhouseVirtualServer
from perspective.handlers.tornado import PerspectiveTornadoHandler
# Connect to ClickHouse
client = clickhouse_connect.get_client(host="localhost")
# Create virtual server backed by ClickHouse
server = ClickhouseVirtualServer(client)
# Serve over WebSocket
app = tornado.web.Application([
(r"/websocket", PerspectiveTornadoHandler, {"perspective_server": server}),
])
app.listen(8080)
tornado.ioloop.IOLoop.current().start()
Connect from the browser:
const websocket = await perspective.websocket("ws://localhost:8080/websocket");
const table = await websocket.open_table("my_table");
document.getElementById("viewer").load(table);
Supported features
The ClickHouse virtual server supports:
group_by— aggregation via ClickHouse’sGROUP BYsort— ordering resultsfilter— standard filter operators (==,!=,>,<,>=,<=,LIKE,IS NOT NULL, etc.)expressions— computed columns via ClickHouse SQL expressions
Note that split_by is not currently supported with ClickHouse.