在 Go 应用程序中使用 RisingWave
由于 RisingWave 与 PostgreSQL 兼容,您可以使用第三方 PostgreSQL 驱动程序从 Python 应用程序与 RisingWave 交互。
在本指南中,我们使用 pgx
驱动程序连接 RisingWave。
运行 RisingWave
要了解如何运行 RisingWave,请参阅运行 RisingWave。
安装 pgx
驱动程序
运行以下命令安装 pgx
驱动程序:
go get github.com/jackc/pgx/v4
连接到 RisingWave
通过 pgx
连接到 RisingWave:
package main
import (
"context"
"fmt"
"log"
"github.com/jackc/pgx/v4"
)
func main() {
// 请用实际的凭据替换占位符。
connStr := "postgres://USER:PASSWORD@localhost:4566/DATABASE"
conn, err := pgx.Connect(context.Background(), connStr)
if err != nil {
log.Fatalf("Unable to connect to RisingWave: %v\n", err)
}
defer conn.Close(context.Background())
fmt.Println("Connected to RisingWave")
}
创建 source
下面的代码可创建一个带有 datagen
连接器的 source walk
。datagen
连接器用于生成模拟数据。walk
source 由 distance
和 duration
两列组成,分别表示步行的距离和持续时间。该 source 是智能手表所跟踪数据的简化版本。
请注意,代码需要放在函数中。
sql := `CREATE TABLE walk(distance INT, duration INT)
WITH (
connector = 'datagen',
fields.distance.kind = 'sequence',
fields.distance.start = '1',
fields.distance.end = '60',
fields.duration.kind = 'sequence',
fields.duration.start = '1',
fields.duration.end = '30',
datagen.rows.per.second='15',
datagen.split.num = '1'
) FORMAT PLAIN ENCODE JSON`
_, err := conn.Exec(context.Background(), sql)
return err
创建物化视图
本节的代码可创建一个物化视图 counter
,获取最新的总距离和持续时间。请注意,代码需要放在函数中。
sql := `CREATE MATERIALIZED VIEW counter AS
SELECT
SUM(distance) as total_distance,
SUM(duration) as total_duration
FROM walk`
_, err := conn.Exec(context.Background(), sql)
return err
查询物化视图
本节的代码可查询物化视图 counter
,获取实时数据。请注意,代码需要放在函数中。
sql := `SELECT * FROM counter`
rows, err := conn.Query(context.Background(), sql)
if err != nil {
return err
}
defer rows.Close()
for rows.Next() {
var total_distance, total_duration float64
err = rows.Scan(&total_distance, &total_duration)
if err != nil {
return err
}
fmt.Printf("Total Distance: %.2f, Total Duration: %.2f\n", total_distance, total_duration)
}
return rows.Err()