暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GreptimeDB 使用指南|快速查询分析外部数据

原创 Greptime 2023-05-30
451

GreptimeDB 是什么

GreptimeDB 是一款用 Rust 语言编写的时序数据库,具有分布式、开源、云原生和兼容性强等特点。它可以在帮助企业实时读写、处理和分析时序数据的同时,降低长期存储的成本。

为了让新用户快速上手使用 GreptimeDB,我们准备了超级详细的 GreptimeDB 新用户使用指南,旨在帮助大家快速掌握我们产品的使用方法。

我们将根据不同的使用场景进行分类,提供详细的安装和使用步骤,制作成一系列使用攻略让用户在特定的应用环境中,更好地运用我们的产品

让我们一起探索 GreptimeDB 的无限可能吧!

使用 GreptimeDB 来查询分析外部数据

只有当数据被用起来,才能真正体现其价值,GreptimeDB 通过支持 SQL/Python 脚本来强化数据分析的能力。

假设你有一份 CSV 格式的数据文件,如何利用 GreptimeDB 的分析能力呢?GreptimeDB 支持两种方式来快速查询分析外部数据,接下来会逐一说明。

为了方便说明,我们先假设一个场景,这个场景来自于 Kaggle 公开数据集的一段内容:

你正在与政府合作,愿景是打造一个数字化和智能化城市,以提高民众服务的效率。而政府目前面临的问题之一是严重的交通堵塞,你作为一位数据科学家,致力于更好地管理城市交通,将为未来基础设施规划提供意见。政府希望通过构建强大的交通系统来应对高峰期的交通问题,他们想要了解城市每个交叉口的交通模式,并给你提供了一份过往数据,而你就需要建立一套模型进行分析预测。

前期准备

如果你的环境中还没有安装 GreptimeDB,那接下来的内容,会告诉大家如何快速安装启动 GreptimeDB;如果你本地已经安装并启动了 GreptimeDB,可以进入到 数据准备 章节。

环境准备

  • 安装 GreptimeDB(这里以 Docker 的方式作为例子)

在电脑上打开终端,输入如下代码(下同)

docker pull greptime/greptimedb:latest

更多安装方式,请前往 Greptime 官网Getting Started 文档中查看。

  • 启动 GreptimeDB
docker run -p 4000-4004:4000-4004 \ -p 4242:4242 -v "$(pwd)/greptimedb:/tmp/greptimedb" \ --name greptime --rm greptime/greptimedb standalone start \ --http-addr 0.0.0.0:4000 \ --rpc-addr 0.0.0.0:4001 \ --mysql-addr 0.0.0.0:4002 \ --postgres-addr 0.0.0.0:4003 \ --prom-addr 0.0.0.0:4004 \ --opentsdb-addr 0.0.0.0:4242
  • 通过 MySQL 或者其他兼容客户端连接 GreptimeDB

温馨提示:电脑上需要预先下载好 MySQLPostgreSQL 客户端才能操作使用哦~

mysql -h 127.0.0.1 -P 4002 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 5.1.10-alpha-msql-proxy Greptime Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show tables; +---------+ | Tables | +---------+ | numbers | | scripts | +---------+ 2 rows in set (0.01 sec)

数据准备

目前 GreptimeDB 支持 CSV/JSON/Parquet 格式文件的导入。本文在公开的数据集网站 Kaggle 上下载了一份 IoT 数据,主要是模拟了某个城市四个交通路口的车流量情况,以下是部分数据:

DateTime,Junction,Vehicles,ID 2015-11-01 00:00:00,1,15,20151101001 2015-11-01 01:00:00,1,13,20151101011 2015-11-01 02:00:00,1,10,20151101021 2015-11-01 03:00:00,1,7,20151101031 2015-11-01 04:00:00,1,9,20151101041 2015-11-01 05:00:00,1,6,20151101051 2015-11-01 06:00:00,1,9,20151101061 2015-11-01 07:00:00,1,8,20151101071 2015-11-01 08:00:00,1,11,20151101081

在准备数据的时候,要留意一下,数据表头的字段名不要和数据库的关键词重复了,比如上面的数据表格里面 DateTime 就是 DB 关键词,我们在导入之前需要将它改掉, 可以修改为 TS。

示例中,我们是通过 docker 启动了 GreptimeDB,并做了文件映射 -v "$(pwd)/greptimedb:/tmp/greptimedb" ,所以需要将准备好的数据文件复制到对应的目录中,你可以根据自己的环境来准备数据:

copy /<path_of_data_folder>/train_ML_IOT.csv $(pwd)/greptimedb/

查询分析外部数据

通过外部表查询数据

GreptimeDB 支持直接查询分析外部的数据,操作非常简单。

  • 创建外部表
mysql> CREATE EXTERNAL TABLE train_ML_IOT_sample WITH (LOCATION='/tmp/greptimedb/train_ML_IOT.csv',FORMAT='csv'); Query OK, 0 rows affected (0.08 sec)
  • 查询分析

这里进行简单举例

mysql> SELECT * FROM "train_ML_IOT_sample" WHERE "Junction" = 1 LIMIT 10; +---------------------+----------+----------+-------------+ | TS | Junction | Vehicles | ID | +---------------------+----------+----------+-------------+ | 2015-11-01 00:00:00 | 1 | 15 | 20151101001 | | 2015-11-01 01:00:00 | 1 | 13 | 20151101011 | | 2015-11-01 02:00:00 | 1 | 10 | 20151101021 | | 2015-11-01 03:00:00 | 1 | 7 | 20151101031 | | 2015-11-01 04:00:00 | 1 | 9 | 20151101041 | | 2015-11-01 05:00:00 | 1 | 6 | 20151101051 | | 2015-11-01 06:00:00 | 1 | 9 | 20151101061 | | 2015-11-01 07:00:00 | 1 | 8 | 20151101071 | | 2015-11-01 08:00:00 | 1 | 11 | 20151101081 | | 2015-11-01 09:00:00 | 1 | 12 | 20151101091 | +---------------------+----------+----------+-------------+ 10 rows in set (0.02 sec)

这种方式数据并不会真正导入到 GreptimeDB 中,但依然可以利用到 GreptimeDB 的分析能力。

通过导入外部数据进行查询

如果数据量非常大,直接查询外部表的性能可能会不佳,可以通过下面方式将数据导入到 GreptimeDB 中再进行分析。

  • 创建表

我们需要提前为要导入的数据创建 table, 包括字段、类型和可能查询会用到的索引等等,假设上述的数据中有的查询场景可能会需要按时间查看不同路口的车辆情况,那就需要对 TSJunction 建索引。对于 GreptimeDB 而言,TS 字段往往作为 Time index,而 Junction 是熟知的 Primary Key。

小技巧
对于建表过程,可以通过建立外部表的方式,快速获取表结构/表结构(Schema),具体方法如下:

mysql> CREATE EXTERNAL TABLE train_ML_IOT_sample WITH (LOCATION='/tmp/greptimedb/train_ML_IOT.csv',FORMAT='csv'); Query OK, 0 rows affected (0.08 sec) mysql> SHOW CREATE TABLE train_ML_IOT_sample; +---------------------+------------------------------------------------------------+ | Table | Create Table | +---------------------+------------------------------------------------------------+ | train_ML_IOT_sample | CREATE EXTERNAL TABLE IF NOT EXISTS train_ML_IOT_sample ( TS TIMESTAMP(0) NULL, Junction BIGINT NULL, Vehicles BIGINT NULL, ID BIGINT NULL, ) ENGINE=file WITH( format = 'csv', location = '/tmp/greptimedb/train_ML_IOT.csv' ) | +---------------------+------------------------------------------------------------+ 通过上面的结果,我们就能看到 DB 识别到的字段类型,剩下就是 Copy/Paste 字段名字和类型,并执行下面的代码创建内部表: CREATE TABLE IF NOT EXISTS train_ML_IOT ( TS TIMESTAMP(0) NULL, Junction BIGINT NULL, Vehicles BIGINT NULL, ID BIGINT NULL, TIME INDEX (TS), PRIMARY KEY (Junction) );
  • 导入数据
    GreptimeDB 支持 COPY 语法,可以导入导出数据,具体可参考: https://docs.greptime.com/reference/sql/copy
mysql> COPY train_ML_IOT FROM '/tmp/greptimedb/train_ML_IOT.csv' WITH (FORMAT='csv'); Query OK, 48120 rows affected (0.11 sec)
  • 查询分析
mysql> SELECT * FROM "train_ML_IOT" WHERE "Junction" = 1 LIMIT 10; +---------------------+----------+----------+-------------+ | TS | Junction | Vehicles | ID | +---------------------+----------+----------+-------------+ | 2017-06-20 08:00:00 | 1 | 60 | 20170620081 | | 2017-06-20 09:00:00 | 1 | 76 | 20170620091 | | 2017-06-20 10:00:00 | 1 | 92 | 20170620101 | | 2017-06-20 11:00:00 | 1 | 102 | 20170620111 | | 2017-06-20 12:00:00 | 1 | 113 | 20170620121 | | 2017-06-20 13:00:00 | 1 | 100 | 20170620131 | | 2017-06-20 14:00:00 | 1 | 107 | 20170620141 | | 2017-06-20 15:00:00 | 1 | 110 | 20170620151 | | 2017-06-20 16:00:00 | 1 | 101 | 20170620161 | | 2017-06-20 17:00:00 | 1 | 108 | 20170620171 | +---------------------+----------+----------+-------------+ 10 rows in set (0.03 sec)

结论

上述提到的两种方式,都可以快速地通过 GreptimeDB 来分析查询外部数据,通过结合机器学习代码库进行建模,就可以做预测分析了。因为 GreptimeDB 支持 Python 脚本分析数据,就可以利用到其生态中的机器学习库对数据进行建模分析,具体的做法并非本篇重点,就不再展开。

GreptimeDB 一直处于快速的迭代中,我们也会不断地为大家带来更多的使用方式和最佳实践案例解析,如果使用上有任何问题,也欢迎随时在公众号留言或加入 Slack 社区与我们联系。


关于 Greptime

Greptime 格睿科技于 2022 年创立,目前正在完善和打造时序数据库。GreptimeDB 和格睿云 GreptimeCloud 这两款产品。

GreptimeDB 是款用 Rust 语言编写的时序数据库。具有分布式,开源,云原生,兼容性强等特点,帮助企业实时读写、处理和分析时序数据的同时,降低长期存储的成本。

GreptimeCloud 基于开源的 GreptimeDB,为用户提供全托管的 DBaaS,以及与可观测性、物联网等领域结合的应用产品。利用云提供软件和服务,可以达到快速的自助开通和交付,标准化的运维支持,和更好的资源弹性。GreptimeCloud 已正式开放内测,欢迎关注公众号或官网了解最新动态

官网:https://greptime.com/

公众号:GreptimeDB

GitHub: https://github.com/GreptimeTeam/greptimedb

文档:https://docs.greptime.com/

Twitter: https://twitter.com/Greptime

Slack: https://greptime.com/slack

LinkedIn: https://www.linkedin.com/company/greptime/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论