实时数据关于企业极速做出决策十分关键。企业高管可以直观地看到这些数据协助他们更快地做出决策,可以经常使用各种数据运行程序或仪表板创立数据的可视化示意。Dash是一个开源Python库,它提供了宽泛的内置组件,用于创立交互式图表、图形、表格和其余用户界面(UI)元素。RisingWave是一个基于SQL的流数据库,用于实时数据处置。本文将对如何经常使用Python、Dash开源库和RisingWave对实时数据成功可视化启动了引见。
实时数据是指立刻生成和处置的数据,由于它是从不同的数据源搜集的。源可以是典型的数据库(例如Postgres或MySQL),也可以是信息代理(例如Kafka)。实时数据的可视化包括几个步骤:首先摄取,而后处置,最后在仪表板中显示这些数据。
在订单交付数据的状况下,实时可视化这些数据可认为餐厅或配送服务的绩效提供有价值的见地。例如,可以经常使用实时数据来监控订单交付所需的期间,识别交付环节中的瓶颈,并跟踪随着期间变动的订单量。在处置不时变动的数据时,很难跟踪正在出现的一切并识别形式或趋向。经常使用Dash和RisingWave等收费工具,可以创立交互式可视化,经常使用户能够探求和剖析这些不时变动的数据。
说四处置数据,人们或许首先想到的编程言语是Python,由于Python有一系列库。Dash是其中之一,它准许用户仅经常使用Python代码创立具备丰盛和可定制用户界面的数据运行程序。Dash是在Flask、Plotly.js和React.js之上构建的,这些都是盛行的 eb开发工具,所以用户不须要知道HTML、CSS或其余JavaScript框架。
sycopg2 (Python中的PostgreSQL客户端库)驱动程序衔接到RisingWave,并启动查问操作。
可视化订单交付数据演示
在这个演示教程中,将应用上方的GitHub存储库和RisingWave演示,假定一切必要的内容都是经常使用Docker Compose设置的。可以在官方网站上检查运转RisingWave的其余方法。在这里有一个名为delivery_orders的Kafka主题,其中蕴含在食品配送网站上搁置的每个订单的事情。每个事情都蕴含无关订单的信息,例如订单ID、餐厅ID和交付形态。上班负载生成器(称为Datagen的Python脚本)模拟随机模拟数据的延续生成,并将其流式传输到Kafka主题中。实践上,这些模拟数据可以被来自 eb运行程序或后端服务的数据所取代。
要成功这一教程,首先成功以下操作:
这一教程在Windows操作系统、Docker桌面和装置的Python 3.10.11版本上
首先,将RisingWave示例存储库克隆到本地环境。
而后,进入integration_tests/delivery目录,并从docker compose文件启动演示集群。
cd risingwave/integration_tests/deliverydocker compose up -d
确保一切容器都已启动并运转。
要装置Dash,也可以参考网站上的Dash装置指南。基本上,须要经过运转以下pip install命令来装置两个库(Dash自身和Pandas)
# This also brings along the Plotly graphing library.# Plotly is known for its interactive charts# Plotly Express requires Pandas to be installed too.pip install dash pandas
pip install psycopg2-binary
要经常使用RisingWave失掉实时数据,首先须要设置一个数据源。在演示名目中,Kafka应该被定义为数据源。将创立一个名为create-a-source.py的新文件,与衔接到RisingWave的Python脚本的integration_tests/delivery目录相反,并创立一个表来消费和耐久化delivery_orders Kafka主题。可以便捷地将以下代码复制并粘贴到新文件中。
import psycopg2conn = psycopg2.connect(database="dev", user="root", password="", host="localhost", port="4566") # Connect to RisingWave.conn.autocommit = True # Set queries to be automatically committed.with conn.cursor() as cur: cur.execute("""CREATE TABLE delivery_orders_source ( order_id BIGINT, restaurant_id BIGINT, order_state VARCHAR, order_timestamp TIMESTAMP) WITH ( connector = 'kafka', topic = 'delivery_orders', properties.bootstrap.server = 'message_queue:29092', scan.startup.mode = 'earliest') ROW FORMAT JSON;""") # Execute the query.conn.close() # Close the connection.
在创立文件之后,运转python create-a-source.py,它将在RisingWave中创立源表。
接上去,创立一个新的物化视图,相似于创立表的形式。在此创立一个名为create-a-materialized-view.py的新文件,并经常使用 sycopg2库运转SQL查问。也可以将上方的最后两个步骤兼并到一个Python脚本文件中。
import psycopg2conn = psycopg2.connect(database="dev", user="root", password="", host="localhost", port="4566")conn.autocommit = Truewith conn.cursor() as cur: cur.execute("""CREATE MATERIALIZED VIEW restaurant_orders_view ASSELECT window_start, restaurant_id, COUNT(*) AS total_orderFROM HOP(delivery_orders_source, order_timestamp, INTERVAL '1' MINUTE, INTERVAL '15' MINUTE)WHERE order_state = 'CREATED'GROUP BY restaurant_id, window_start;""")conn.close()
在上方的示例中,SQL查问实时计算特定餐厅在过去15分钟内创立的订单总数,并将结果缓存到物化视图中。假设出现任何数据更改或新的Kafka主题,RisingWave会智能参与和降级物化视图的结果。一旦设置了数据源,物化视图,就可以开局摄取数据,并经常使用Dash将这些数据可视化。
如今构建Dash运行程序来查问和可视化RisingWave中的物化视图内容。可以在20分钟内追随教程Dash来了解Dash的基本构建块。这一示例的运行程序代码以表格和图形两种格局显示餐厅订复数据。请参阅dash-example.py中的以下Python代码:
import psycopg2import pandas as pdimport dashfrom dash import dash_tablefrom dash import dccimport dash_html_components as htmlimport plotly.express as px# Connect to the PostgreSQL, user="root", password="", host="localhost", port="4566")# Retrieve, columns=[{"name": i, "id": i} for i in df.columns],, figure=px.bar(df, x="window_start", y="total_order", color="restaurant_id", barmode="group"))])# Run the applicationif __name__ == '__main__': app.run_server(debug=True)
andas从restaurant_orders_view物化视图检索数据,并经常使用Dash_table.DataTable将其显示在Dash表中,经常使用dcc.Graph将数据显示在条形图中。该表和条形图的列与物化视图的列('window_start'、'total_order'和'restaurant_id')相对应,行与物化中的数据相对应。
可以经过运转上方的dash-example.py脚本并导航到在网络阅读器中(用户会在终端收到一条信息,通知转到这个链接)。
总的来说,Dash是一个弱小的工具,用于创立须要复杂用户界面和可视化配置的数据剖析视图,一切这些都经常使用便捷和优雅的Python编程言语。当将它与RisingWave流数据库一同经常使用时,可以深化了解实时数据,这可以协助人们做出更理智的决策,并采取执行提升性能。
原文题目: Visualize Real-Time>