This patch changes output for our http SQL API and prepare it for our SQL editor development. Changes includes: - includes aide for OAS 3.1 openapi documents, available at /v1/private/api.json - simplified some of http handlers return type, use string or json directly - created new HttpRecordsOutput type to hide internals of RecordBatch from end-user. It also tuned data structure to be friendly for application to consume - updated response struct to use code for success or detailed error code Residual issue #366 * feat: allow http post for our sql http api * feat: update our http api and attempt to add openapi spec support * test: correct test against new handler apis * refactor: rename rows to records * refactor: removed HttpResponse completely * feat: add information to our openapi docs * feat: add docs for sql interface response * refactor: use struct to represent query so we can doc it via aide * refactor: use arc wrapped api * feat: add redoc UI support * Update src/servers/src/http.rs Co-authored-by: LFC <bayinamine@gmail.com> * Update src/servers/src/http.rs Co-authored-by: LFC <bayinamine@gmail.com> * fix: address review comments * test: update integration tests for new api output * refactor: make prometheus http apis compatible with recent changes * refactor: get schema from stream * test: add test for recordbatch to json serialization * test: add todo for a test to be fixed later * Revert "test: add todo for a test to be fixed later" This reverts commita5a50c7afb. * fix: Revert "refactor: get schema from stream" This reverts commit945b685556. * chore: add todo for pending issue #366 * chore: remove fixed server url in openapi docs * feat: include error_code in json response * refactor: use code over success field in json response Co-authored-by: LFC <bayinamine@gmail.com>
GreptimeDB
GreptimeDB: the next-generation hybrid timeseries/analytics processing database in the cloud.
Getting Started
Prerequisites
To compile GreptimeDB from source, you'll need the following:
- Rust
- Protobuf
Rust
The easiest way to install Rust is to use rustup, which will check our rust-toolchain file and install correct Rust version for you.
Protobuf
protoc is required for compiling .proto files. protobuf is available from
major package manager on macos and linux distributions. You can find an
installation instructions here.
Build the Docker Image
docker build --network host -f docker/Dockerfile -t greptimedb .
Usage
Start Datanode
// Start datanode with default options.
cargo run -- datanode start
OR
// Start datanode with `http-addr` option.
cargo run -- datanode start --http-addr=0.0.0.0:9999
OR
// Start datanode with `log-dir` and `log-level` options.
cargo run -- --log-dir=logs --log-level=debug datanode start
Start datanode with config file:
cargo run -- --log-dir=logs --log-level=debug datanode start -c ./config/datanode.example.toml
Start datanode by runing docker container:
docker run -p 3000:3000 \
-p 3001:3001 \
-p 3306:3306 \
greptimedb
Start Frontend
Frontend should connect to Datanode, so Datanode must have been started at first!
// Connects to local Datanode at its default GRPC port: 3001
// Start Frontend with default options.
cargo run -- frontend start
OR
// Start Frontend with `mysql-addr` option.
cargo run -- frontend start --mysql-addr=0.0.0.0:9999
OR
// Start datanode with `log-dir` and `log-level` options.
cargo run -- --log-dir=logs --log-level=debug frontend start
Start datanode with config file:
cargo run -- --log-dir=logs --log-level=debug frontend start -c ./config/frontend.example.toml
SQL Operations
-
Connecting DB by mysql client:
# The datanode listen on port 3306 by default. mysql -h 127.0.0.1 -P 3306 -
Create table:
CREATE TABLE monitor ( host STRING, ts TIMESTAMP, cpu DOUBLE DEFAULT 0, memory DOUBLE, TIME INDEX (ts), PRIMARY KEY(host)) ENGINE=mito WITH(regions=1); -
Insert data:
INSERT INTO monitor(host, cpu, memory, ts) VALUES ('host1', 66.6, 1024, 1660897955); INSERT INTO monitor(host, cpu, memory, ts) VALUES ('host2', 77.7, 2048, 1660897956); INSERT INTO monitor(host, cpu, memory, ts) VALUES ('host3', 88.8, 4096, 1660897957); -
Query data:
mysql> SELECT * FROM monitor; +-------+------------+------+--------+ | host | ts | cpu | memory | +-------+------------+------+--------+ | host1 | 1660897955 | 66.6 | 1024 | | host2 | 1660897956 | 77.7 | 2048 | | host3 | 1660897957 | 88.8 | 4096 | +-------+------------+------+--------+ 3 rows in set (0.01 sec)You can delete your data by removing
/tmp/greptimedb.
Contributing
Please refer to contribution guidelines for more information.