您好,登錄后才能下訂單哦!
今天小編給大家分享一下如何對mongodb存儲類JSON數據文檔統計分析的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
很多的開發者都使用過mongodb,在mongodb中數據記錄是以文檔的形式存在的(類似于一種多級嵌套SQL的形式)。比如下面的JSON數據結構:dev_ip表示某一臺服務器的ip、location字段存放經緯度、meminfo.total和meminfo.userd分別代表內存總量和使用量。
[{ "dev_ip": "123.46.5.111", "location": [39.916527, 116.397128], "meminfo": { "total": 64, "used": 23.2 } }, { "dev_ip": "123.46.5.112", "location": [39.916144, 116.392582], "meminfo": { "total": 64, "used": 27.8 } }]
存儲文檔需要使用到Map這種數據類型,在某些比較舊的版本中,Map數據類型還是實驗性的,不能直接使用。如果想使用,需要執行set allow_experimental_map_type = 1;
。
然后我們可以按照JSON的數據結構來建表,location是數組Array數據類型,meminfo是Map數據類型。
CREATE TABLE dev_meminfo ( dev_ip String, location Array(Float64), meminfo Map(String, Float32) ) ENGINE = MergeTree() ORDER BY dev_ip;
clickhouse提供了數組類型Array(T),數組類型由多個T元素組成。T可以是任意的基礎數據類型,或者也可以是數組類型。如果是數組類型就形成了多維數組,Cickhouse對多維數組的支持有限,所以不建議使用多維數組。數組里面所有的T元素的數據類型必須是一樣的,否則會拋出異常。
在linux環境下,我們可以將JSON數據保存為一個文檔,命名如:dev_meminfo.json。然后使用下面的命令行,完成文檔JSON數據的入庫。jq
的作用是將JSON數組及Map從結構中剝離出來,從而符合JSONEachRow要求的輸入格式。
cat dev_meminfo.json |jq -c .[] | clickhouse-client --database acaidb -m -u acai --password '<你的密碼>' \ --query="INSERT INTO dev_meminfo FORMAT JSONEachRow"
或者我們可以直接使用INSERT語句來完成數據的單條插入,如下:
INSERT INTO dev_meminfo FORMAT JSONEachRow {"dev_ip": "123.46.5.112", "location": [39.916144, 116.392582],"meminfo": {"total": 64,"used": 27.8}};
select *
的方式查詢數據:
# clickhouse-client --database acaidb -m -u acai --password '4rfv$RFV' --query="SELECT * FROM dev_meminfo" 123.46.5.111 [39.916527,116.397128] {'total':64,'used':23.2} 123.46.5.112 [39.916144,116.392582] {'total':64,'used':27.8}
使用字段名稱方式查詢數據,需要注意的是Ciickhouse的數組的下標是從0開始的,這與我們傳統編程開發中的規范是不一致的。
# clickhouse-client --database acaidb -m -u acai --password '4rfv$RFV' --query="SELECT dev_ip,location[1],location[2],meminfo['total'],meminfo['used'] FROM dev_meminfo" 123.46.5.111 39.916527 116.397128 64 23.2 123.46.5.112 39.916144 116.392582 64 27.8
以上就是“如何對mongodb存儲類JSON數據文檔統計分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。