SQL 工具
GreptimeDB 使用 SQL 作为主要查询语言,并支持许多流行的 SQL 工具。 本文档指导你如何使用 SQL 工具与 GreptimeDB 交互。
编程语言 Driver
推荐使用成熟的 SQL driver 来查询数据。
推荐的查询库
- Java
- Go
安装
- Java
- Go
如果你使用的是 Maven,请将以下内容添加到 pom.xml
的依赖项列表中:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
使用下方的命令安装 GORM:
go get -u gorm.io/gorm
以 MySQL 为例安装 driver:
go get -u gorm.io/driver/mysql
将库引入到代码中:
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
Connect to database
下面以 MySQL 为例演示如何连接到 GreptimeDB。
- Java
- Go
public static Connection getConnection() throws IOException, ClassNotFoundException, SQLException {
Properties prop = new Properties();
prop.load(QueryJDBC.class.getResourceAsStream("/db-connection.properties"));
String dbName = (String) prop.get("db.database-driver");
String dbConnUrl = (String) prop.get("db.url");
String dbUserName = (String) prop.get("db.username");
String dbPassword = (String) prop.get("db.password");
Class.forName(dbName);
Connection dbConn = DriverManager.getConnection(dbConnUrl, dbUserName, dbPassword);
return Objects.requireNonNull(dbConn, "Failed to make connection!");
}
你需要一个 properties 文件来存储数据库连接信息,将其放在 Resources 目录中并命名为 db-connection.properties
。文件内容如下:
# DataSource
db.database-driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:4002/public
db.username=
db.password=
或者你可以从这里获取文件。
type Mysql struct {
Host string
Port string
User string
Password string
Database string
DB *gorm.DB
}
m := &Mysql{
Host: "127.0.0.1",
Port: "4002", // default port for MySQL
User: "username",
Password: "password",
Database: "public",
}
dsn := fmt.Sprintf("tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
m.Host, m.Port, m.Database)
dsn = fmt.Sprintf("%s:%s@%s", m.User, m.Password, dsn)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
// error handling
}
m.DB = db
时区
- Java
- Go
通过设置 URL 参数来设置 JDBC 时区:
jdbc:mysql://127.0.0.1:4002?connectionTimeZone=Asia/Shanghai&forceConnectionTimeZoneToSession=true
connectionTimeZone={LOCAL|SERVER|user-defined-time-zone}
配置连接时区。forceConnectionTimeZoneToSession=true
使 sessiontime_zone
变量被设置为connectionTimeZone
指定的值。
在 DSN 中设置时区。例如,将时区设置为 Asia/Shanghai
:
dsn := fmt.Sprintf("tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local&time_zone=%27Asia%2FShanghai%27",
m.Host, m.Port, m.Database)
更多信息请参考 MySQL Driver 文档。
Raw SQL
推荐使用 Raw SQL 来体验 GreptimeDB 的全部功能。 下面的例子展示了如何使用 Raw SQL 查询数据:
- Java
- Go
try (Connection conn = getConnection()) {
Statement statement = conn.createStatement();
// DESC table;
ResultSet rs = statement.executeQuery("DESC cpu_metric");
LOG.info("Column | Type | Key | Null | Default | Semantic Type ");
while (rs.next()) {
LOG.info("{} | {} | {} | {} | {} | {}",
rs.getString(1),
rs.getString(2),
rs.getString(3),
rs.getString(4),
rs.getString(5),
rs.getString(6));
}
// SELECT COUNT(*) FROM cpu_metric;
rs = statement.executeQuery("SELECT COUNT(*) FROM cpu_metric");
while (rs.next()) {
LOG.info("Count: {}", rs.getInt(1));
}
// SELECT * FROM cpu_metric ORDER BY ts DESC LIMIT 5;
rs = statement.executeQuery("SELECT * FROM cpu_metric ORDER BY ts DESC LIMIT 5");
LOG.info("host | ts | cpu_user | cpu_sys");
while (rs.next()) {
LOG.info("{} | {} | {} | {}",
rs.getString("host"),
rs.getTimestamp("ts"),
rs.getDouble("cpu_user"),
rs.getDouble("cpu_sys"));
}
}
请参考此处获取直接可执行的代码。
The following code declares a GORM object model:
type CpuMetric struct {
Host string `gorm:"column:host;primaryKey"`
Ts time.Time `gorm:"column:ts;primaryKey"`
CpuUser float64 `gorm:"column:cpu_user"`
CpuSys float64 `gorm:"column:cpu_sys"`
}
如果你正在使用高层级 API 来插入数据,你可以在模型中同时声明 GORM 和 GreptimeDB Tag。
type CpuMetric struct {
Host string `gorm:"column:host;primaryKey" greptime:"tag;column:host;type:string"`
Ts time.Time `gorm:"column:ts;primaryKey" greptime:"timestamp;column:ts;type:timestamp;precision:millisecond"`
CpuUser float64 `gorm:"column:cpu_user" greptime:"field;column:cpu_user;type:float64"`
CpuSys float64 `gorm:"column:cpu_sys" greptime:"field;column:cpu_sys;type:float64"`
}
声明表名:
func (CpuMetric) TableName() string {
return "cpu_metric"
}
使用 Raw SQL 查询数据:
var cpuMetric CpuMetric
db.Raw("SELECT * FROM cpu_metric LIMIT 10").Scan(&result)
查询库参考
有关如何使用查询库的更多信息,请参考相应库的文档:
命令行工具
MySQL
你可以使用 mysql
命令行工具连接到 GreptimeDB。
请参考 MySQL 协议 文档获取连接信息。
连接到服务器后,你可以使用所有 GreptimeDB SQL 命令与数据库交互。
PostgreSQL
你可以使用 psql
命令行工具连接到 GreptimeDB。
请参考 PostgreSQL 协议 文档获取连接信息。
连接到服务器后,你可以使用所有 GreptimeDB SQL 命令与数据库交互。
GreptimeDB 控制台
你可以在 Greptime 控制台中运行 SQL 并可视化数据。
GUI 工具
DBeaver
请参考 DBeaver 集成指南。
HTTP API
你可以将 POST SQL 到 GreptimeDB HTTP API 以查询数据。 请参考 HTTP API 文档获取更多信息。