日志OLAP:在SQL中使用UDF, lambda函數使用案例

場景

日志服務內置了20+類SQL函數。面對用戶復雜的業務場景,例如使用json來沉淀業務數據,普通的SQL函數可能就無法滿足需求,需要一些用戶自定義處理邏輯。為了處理json類的業務數據,我們可以采用把json展開成多行的形式進行統計分析,今天我們介紹使用UDF(lambda)的方式來編寫自定義邏輯,處理json、array、map類型的數據。

數據樣例:

__source__:  11.164.232.105
__tag__:__hostname__:  vm-req-170103232316569850-tianchi111932.tc
__topic__:  TestTopic_4
array_column:  [1,2,3]
double_column:  1.23
map_column:  {"a":1,"b":2}
text_column:  商品

lambda函數對array類型的數據進行求均值

為了遍歷每一個array元素,并且把計算所有元素的均值,我們通過reduce函數進行計算。

* | select  array_column,  reduce( cast(  json_parse(array_column) as  array(bigint))  , CAST(ROW(0.0, 0) AS ROW(sum DOUBLE, count INTEGER))  ,  (s,x) -> cast(row( x+ s.sum,  s.count+1) as ROW(sum double, count INTEGER)), s -> IF(s.count = 0, NULL, s.sum / s.count))

image.png

reduce 函數的具體語義參考語法文檔。參數分為四部分

  1. cast( json_parse(array_column) as array(bigint)) 表示輸入的數組數據
  2. CAST(ROW(0.0, 0) AS ROW(sum DOUBLE, count INTEGER)) 定義起始狀態為一個復雜的row類型,分別記錄sum和count
  3. 對每一個元素,計算累加值,(s,x) -> cast(row( x+ s.sum, s.count+1) as ROW(sum double, count INTEGER)) s代表已經有的狀態,x代表新輸入的元素,計算結果通過cast強制定義為row類型
  4. 最后對最終狀態,計算avg值,s -> IF(s.count = 0, NULL, s.sum / s.count)。s代表最終狀態。

對所有行的array元素求avg:

* |  select  sum(rows.sum ) / sum(rows.count)  from(select  array_column,  reduce( cast(  json_parse(array_column) as  array(bigint))  , CAST(ROW(0.0, 0) AS ROW(sum DOUBLE, count INTEGER))  ,  (s,x) -> cast(row( x+ s.sum,  s.count+1) as ROW(sum double, count INTEGER)), s -> s)  as rows from log )

通過子查詢的方式,先reduce每一行的array的sum 和count。之后在嵌套查詢中,求所有行的sum和count,最后相除求avg:

image.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254221.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254221.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254221.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

瓶子個數計數halcon

文章目錄處理要求處理方法一源碼效果方法二源碼效果博主寫作不容易,孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 處理要求 查找紙箱內瓶子個數 處理方法一 源碼 dev_clear_window () dev_open_window (0, 0, 640*1.5, 512*1.5, black, WindowHandle…

lightoj1060_組合數學

http://lightoj.com/volume_showproblem.php?problem1060 有一些用尼康托展開http://blog.csdn.net/niushuai666/article/details/6611131,簡單的尼康托,每個字母多個數的還不會 組合數學解看起來比較簡單 給定一個字符串和k,求字符串第k大字…

幾個so經常使用Function

SD_WF_ORDER_REJECT SO拒絕 RV_ORDER_FLOW_INFORMATION 獲得憑證流,支持OBD,SO等 call function RV_ORDER_FLOW_INFORMATION exporting aufbereitung 2 belegtyp C comwa l_comwa…

LIVE555建立RTSP服務記錄

在官網上面 http://www.live555.com/liveMedia/#config-unix下載最新源碼,并進行編譯,同時官網上面告訴了你怎么樣編譯已經不同平臺對應需要修改的內容 一、arm_linux_g下面編譯視頻文件LIVE555 【config.armlinux】 CROSS_COMPILE arm-none…

halcon自動對焦算法

1、介紹 圖像清晰度是衡量圖像質量的一個重要指標,對于相機來說,其一般工作在無參考圖像的模式下,所以在拍照時需要進行對焦的控制。對焦不準確,圖像就會變得比較模糊不清晰。相機對焦時通過一些清晰度評判指標,控制鏡…

HTML學習筆記06-連接

HTML超鏈接 HTML使用標簽<a>來設置文本超鏈接。 超鏈接可以是文字&#xff0c;也可以是圖片&#xff0c;點擊這些內容跳轉到新的文檔或當前文檔的某個部分 代碼類似這樣&#xff1a; <a href"url">連接文本</a> 實例&#xff1a; <!DOCTYPE HTM…

在Xcode中使用Git進行源碼版本控制

在Xcode中使用Git進行源碼版本控制 在應用程序開發過程中&#xff0c;很重要的一部分工作就是如何進行源碼的版本控制。當代碼出現問題時&#xff0c;我們就需要將代碼恢復到原先正常的版本。如果是多個人共同開發一個項目&#xff0c;那么代碼的控制就會非常復雜。幸運的是&am…

Linux環境變量的設置和查看方法

1. 顯示環境變量HOME $ echo $HOME /home/redbooks 2. 設置一個新的環境變量hello $ export HELLO"Hello!" $ echo $HELLO Hello! 3. 使用env命令顯示所有的環境變量 $ env HOSTNAMEredbooks.safe.org PVM_RSH/usr/bin/rsh Shell/bin/bash TERMxterm HISTSIZE1000 ..…

CefSharp試用

Github地址&#xff1a; https://github.com/cefsharp/CefSharp 首先下載所有源代碼下來 然后直接打開Sln 然后就可以直接調試WinForm、Wpf的Example了 注意地方&#xff1a; CefSharp.Core、CefSharp.BrowserSubprocess.Core 這兩個類庫是用C寫的&#xff0c;所以VisualStudio…

ORA-30649: 缺少DIRECTORY關鍵字的問題解決方法

在oracle 里執行該語句時 提示 ORA-30649: 缺少 DIRECTORY 關鍵字把NOT null 放到 default 后面&#xff0c;就是如下寫法&#xff0c;oracle 正常執行alter table PM_INFO ADD sort NUMBER(10,0) DEFAULT (0) NOT NULL;轉載于:https://www.cnblogs.com/person008/p/9234637.ht…

java 解決漢諾塔問題

//漢諾塔問題//HanYang 2016/10/15 import java.util.Scanner; //輸出public class Hanuota { public static void Show(String a,String b){ System.out.print(" " a "->" b " " ); } //從a移到c public static void Fun(int n, Str…

利用VC++實現局域網實時傳輸

本文針對不同的局域網&#xff0c;提出一種通用的實時視頻傳輸的解決方案。在使用Divx編解碼的基礎上&#xff0c;提出了從壓縮、組幀、發送到接收、解壓整個流程的思想&#xff0c;具體實施方案和VC實現核心源代碼以及傳輸控制策略&#xff0c;有效地保證了高質量的實時視頻傳…

ASP.NET Web API之消息[攔截]處理(轉)

出處&#xff1a;http://www.cnblogs.com/Leo_wl/p/3238719.html 標題相當難取&#xff0c;內容也許和您想的不一樣&#xff0c;而且網上已經有很多這方面的資料了&#xff0c;我不過是在實踐過程中作下記錄。廢話少說&#xff0c;直接開始。 Exception 當服務端拋出未處理異常…

無人駕駛遇見人工智能 百度將推有“大腦”的汽車

在日前舉行的中國云計算大會&#xff0c;百度高級副總裁、技術戰略委員會主席王勁表示&#xff0c;百度將在今年下半年推出無人駕駛汽車。不過&#xff0c;百度自己并不會造車&#xff0c;它將與第三方汽車廠商合作制造。據介紹&#xff0c;百度將利用現有的大數據、地圖、人工…

AdlinkMotionCardLibrary函數C++

#include "stdafx.h" #include "AdlinkMotionCardLibrary.h"extern "C" _declspec(dllexport) bool _stdcall MotionCardIni(I32& BoardId_InBits, I32 Mode) { try{//mode0&#xff1a;&#xff1a; 系統指定卡號 mode1&#xff1a;&am…

查看表的結構

describe 表名轉載于:https://www.cnblogs.com/dengyg200891/p/5966565.html

定制一個網絡文件系統

定制一個網絡文件系統【把pc上的文件系統掛接到開發板上面】 1、修改exports文件【PC上】一定要修改&#xff0c;否則不會成功 vi /etc/exports 修改為 /空格* 并保存 2、設置開發板上的IP地址 ifconfig eth0 192.168.0.11 up 3、設置PC上的IP地址 ifconfig et…

創建Hbase Hive外部表報錯: Unable to determine ZooKeeper ensemble

創建HBase的Hive外部表1: create external table ttt(rowkey string,info map<string,string>)STORED BY org.apache.hadoop.hive.hbase.HBaseStorageHandler WITH SERDEPROPERTIES ("hbase.columns.mapping" ":key,info:") TBLPROPERTIES ("h…

死磕算法之快速排序

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。博客源地址為zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80851021 學習更多算法系列請參考文章&#xff1a;死磕算法之匯總篇 快速排序是一個運用了分治法和遞歸算法的排序方…

九點標定進行仿射變換halcon仿真代碼

篩選出來的點得坐標已經顯示在PxRow、PxColunm里邊 * Image Acquisition 01: Code generated by Image Acquisition 01 read_image (Image, C:/Users/Administrator/Desktop/標定板圖片.png) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHand…