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)
查询库参考
有关如何使用查询库的更多信息,请参考相应库的文档: