No.4時序數(shù)據(jù)庫隨筆 - 安裝
2021 校招請閱讀:阿里云2021春招
開篇寄語
昨天是2021的正月初五,大家都迎了財神,孫金城 在這里祝?福大家 2021新春快樂,牛年大吉,萬事順?biāo)欤霞野部担?br>

同時,也祝愿大家在新的一年,能以 “唯天下之至拙能勝天下之至巧” 的巧干、 “唯天下之至誠能勝天下之至偽”的坦蕩 并 踏著 有恒 這塊基石,在2021邁入人生的新臺階!!!
不積跬步無以至千里,系統(tǒng)的學(xué)習(xí)一項領(lǐng)域知識也是一個 有恒 堅持的過程,我們既可以從原理入手,先知其所以然,也可以從操作入手,先知其然!本篇將給你一個低起點,從簡單做起,從安裝IoTDB,執(zhí)行第一個IoTDB SQL 作為2021學(xué)習(xí)IoTDB的起點....每天進(jìn)步一點點...

本篇環(huán)境
MocOS 11.1
IoTDB 0.11.2
JDK 1.8.0_211
二進(jìn)制安裝
二進(jìn)制安裝是最簡單的安裝方式了,三部曲,下載解壓,啟動驗證,實操體驗:
下載解壓
jincheng:2021IoT jincheng.sunjc$ wget https://archive.apache.org/dist/iotdb/0.11.2/apache-iotdb-0.11.2-bin.zip
jincheng:2021IoT jincheng.sunjc$ tar -zxf apache-iotdb-0.11.2-bin.zipjincheng:2021IoT jincheng.sunjc$ lsapache-iotdb-0.11.2 apache-iotdb-0.11.2-bin.zipjincheng:2021IoT jincheng.sunjc$
啟動驗證
jincheng:apache-iotdb-0.11.2 jincheng.sunjc$ nohup sbin/start-server.sh -rpc_port 6668 >/dev/null 2>&1 &[2] 24160jincheng:apache-iotdb-0.11.2 jincheng.sunjc$ sbin/start-cli.sh -h 127.0.0.1 -p 6668 -u root -pw root

實操體驗
操作部分需要對對時序數(shù)據(jù)概念有一定的了解,大家可以先看操作直觀體驗,也可以花2個小時進(jìn)行一下科普《No.1-Apache IoTDB 隨筆 - Time Series DBMS 綜述》
查看和創(chuàng)建 存儲組(STORAGE GROUP)
STORAGE GROUP 是IoTDB 中組織時間序列數(shù)據(jù)的邏輯概念,在實際業(yè)務(wù)中你可以用STORAGE GROUP來邏輯區(qū)分不同的邏輯組織(部門/業(yè)務(wù)團隊)、地理區(qū)間(廠區(qū)/省市)等等你想對時序數(shù)據(jù)進(jìn)行大的分組區(qū)分的邏輯手段。細(xì)節(jié)我們后面介紹,這里先直觀體驗如果查看和創(chuàng)建:
SHOW STORAGE GROUP
SET STORAGE GROUP TO root.happy
IoTDB> SHOW STORAGE GROUP+-------------+|storage group|+-------------++-------------+Empty set.It costs 0.222sIoTDB> SET STORAGE GROUP TO root.happyMsg: The statement is executed successfully.IoTDB> SHOW STORAGE GROUP+-------------+|storage group|+-------------+| root.happy|+-------------+Total line number = 1It costs 0.026sIoTDB>
查看和創(chuàng)建 時間序列(TIMESERIES)
TIMESERIES 是IoTDB 中的核心概念了,是實際時序數(shù)據(jù)的抽象,比如工業(yè)領(lǐng)域的某個傳感器數(shù)據(jù)的采集,對應(yīng)到IoTDB就是一個時間序列,我們使用CREATE TIMESERIES語法來創(chuàng)建新的時間序列,就像數(shù)據(jù)庫的DDL一樣,創(chuàng)建時間序列時需要定義時間序列指標(biāo)數(shù)據(jù)的數(shù)據(jù)的類型和編碼方式,同樣,這里先直觀體驗如果查看和創(chuàng)建:
CREATE TIMESERIES
SHOW TIMESERIES
IoTDB> CREATE TIMESERIES root.happy.device1.sensor1.temperature WITH DATATYPE=FLOAT, ENCODING=RLEMsg: The statement is executed successfully.IoTDB> SHOW TIMESERIES+--------------------------------------+-----+-------------+--------+--------+-----------+----+----------+| timeseries|alias|storage group|dataType|encoding|compression|tags|attributes|+--------------------------------------+-----+-------------+--------+--------+-----------+----+----------+|root.happy.device1.sensor1.temperature| null| root.happy| FLOAT| RLE| SNAPPY|null| null|+--------------------------------------+-----+-------------+--------+--------+-----------+----+----------+Total line number = 1It costs 0.019sIoTDB>

細(xì)心的你一定發(fā)現(xiàn)了,除了我們剛才說的 STORAGE GROUP,數(shù)據(jù)類型、編碼方式、TIMESERIES還出現(xiàn)了 alias/tags/attributes這些陌生的字段,這些又是什么概念在IoTDB有什么作用呢?我們下一篇和大家進(jìn)行介紹,如果在下一篇還沒有出來之前,你已經(jīng)迫不及待了怎么辦?想必大家都知道,在Apache IoTDB社區(qū)還有一位大神 叫 喬嘉林,學(xué)習(xí)IoTDB,喬老師的文章不得不收藏哈,趕緊關(guān)注 Apache IoTDB 官方公眾號,高質(zhì)文章等你來...

插入和查詢
TIMESERIES的插入和查詢,就和傳統(tǒng)數(shù)據(jù)庫越來越接近了, IoTDB 中元數(shù)據(jù)的組織方式是樹形結(jié)構(gòu),上面的 root.happy.device1.sensor1.temperature就是一個樹的Path ,那么我們怎樣插入時間序列的值和查詢對應(yīng)的時間序列呢?同樣,這里先直觀體驗如果查看和創(chuàng)建:
INSERT INTO
SELECT
INSERT INTO root.happy.device1.sensor1(timestamp,temperature) values(5927, 25.72)Msg: The statement is executed successfully.SELECT * FROM root.happy.device1.sensor1+-----------------------------+--------------------------------------+| Time|root.happy.device1.sensor1.temperature|+-----------------------------+--------------------------------------+|1970-01-01T08:00:05.927+08:00| 25.72|+-----------------------------+--------------------------------------+Total line number = 1It costs 0.091s
源碼和Docker安裝
我們后續(xù)篇章介紹...
帶著問題期待明天
學(xué)習(xí)的路上總是好奇心驅(qū)動成長,不知道你在幾分鐘時間看完上面的內(nèi)容后,是否有問題?我這里有一個問題,那就是:“如果我的傳感器的值是 null 怎么辦?IoTDB支持null嗎?
IoTDB> INSERT INTO root.happy.device1.sensor1(timestamp,temperature) values(5927, null)Msg: 401: line 1:75 mismatched input 'null' expecting {NOW, TRUE, FALSE, '-', '.', 'NaN', INT, EXPONENT, DATETIME, DOUBLE_QUOTE_STRING_LITERAL, SINGLE_QUOTE_STRING_LITERAL}
上面的插入語句我將temperature的值設(shè)置為 null,得到來 mismatched input 'null' expecting的錯誤提示。那么目前IoTDB如何處理null的呢?
IoTDB> INSERT INTO root.happy.device1.sensor1(timestamp,temperature) values(7925, NaN)Msg: The statement is executed successfully.IoTDB> SELECT * FROM root.happy.device1.sensor1+-----------------------------+--------------------------------------+| Time|root.happy.device1.sensor1.temperature|+-----------------------------+--------------------------------------+|1970-01-01T08:00:05.927+08:00| 52.72||1970-01-01T08:00:07.925+08:00| 0.0|+-----------------------------+--------------------------------------+Total line number = 2
如上大家發(fā)現(xiàn)IoTDB用NaN來代表沒有值,查詢之后我們發(fā)現(xiàn)NaN應(yīng)該代表來當(dāng)前數(shù)據(jù)類型的默認(rèn)值。如上:FLOAT 的默認(rèn)值就是 0.0.

所以,這里的問題就是: “我們需要Apache IoTDB 對時間序列的值 支持 null 嗎?” 你的實際業(yè)務(wù)中有沒有場景不能用NaN默認(rèn)值,而必須允許null的存在?期待你的反饋,Apache IoTDB 為你的業(yè)務(wù)而生,你的要求就是IoTDB社區(qū)的需求!!!
由我需要到我提供
關(guān)于Apache IoTDB中是否要支持 nullable 的問題,歡迎你在公眾號留言,也歡迎大家關(guān)注社區(qū)動態(tài)。
阿里招聘
時序數(shù)據(jù)庫開發(fā)崗位
(P7/P8/P9)
(長期有效)
職位描述:
1. 精通Java/Scala編程
2. 精通常用數(shù)據(jù)結(jié)構(gòu)和算法應(yīng)用,具備良好的、精益求精的設(shè)計思維,每一個bit都是客戶/技術(shù)價值。
3. 了解Hadoop/Flink/Spark等計算框架和熟悉HBase/LevelDB/RocksDB等主流NoSQL數(shù)據(jù)庫,深入理解其實現(xiàn)原理和架構(gòu)優(yōu)勢劣勢;
4. 具備分布式系統(tǒng)的設(shè)計和應(yīng)用的經(jīng)歷,能對分布式常用技術(shù)進(jìn)行應(yīng)用和改進(jìn)者優(yōu)先;
5. 有開源社區(qū)貢獻(xiàn),并成為Flink/Spark/Druid/OpenTSDB/InfluxDB/IoTDB等社區(qū)的Committer/PMC者優(yōu)先;
6. 要具備良好的團隊協(xié)作能力,良好的溝通表達(dá)能力,和對正確事情持之以恒的韌性和耐力。
來!讓我看到你的簡歷,因為成就你的不僅僅是能力,更是雷厲風(fēng)行的執(zhí)行力!
