百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Doris 函数(二)(dotline函数)

wxin55 2024-10-25 18:03 10 浏览 0 评论

JSON函数

  1. 建表,导?测试数据
CREATE TABLE test_json (
 id INT,
 json_string String
 )
 DUPLICATE KEY(id)
 DISTRIBUTED BY HASH(id) BUCKETS 3
 PROPERTIES("replication_num" = "1");

--测试数据
1_{"k1":"v31", "k2": 300, "a1": [{"k1":"v41", "k2": 400}, 1, "a", 3.14]}
2_{"k1":"v32", "k2": 400, "a1": [{"k1":"v41", "k2": 400}, 2, "a", 4.14],"a2":{"k3":"v33", "k4": 200,"a2": [{"k1":"v41", "k2": 400}, 2, "a", 4.14]}}
3_{"k1":"v33", "k2": 500, "a1": [{"k1":"v41", "k2": 400}, 3, "a", 5.14],"a2":{"k3":"v33", "k4": 200,"a2": [{"k5":"v42", "k6": 600}]}}
4_{"k1":"v31"}
5_{"k1":"v31", "k2": 300}
6_{"k1":"v31", "k2": 200 "a1": []}

-- json是?种??存着?对对key,value类型的结构
--针对值类型的不同:
 1.简单值:"k1":"v31"
 2.数组:[{"k1":"v41", "k2": 400}, 1, "a", 3.14]
 3.对象:"a2":{"k3":"v33", "k4": 200,"a2": [{"k5":"v42", "k6": 600}]}

取值的时候,指定的'$.k1'==>这样的东西我们称之为json path ,json的路劲

-- 通过本地?件的?式导?
 curl \
 -u root: \
 -H "label:load_local_file1" \
 -H "column_separator:_" \
 -T /opt/apache-doris-2.0.3-bin-x64/json.txt \
 http://cdh004:8840/api/test/test_json/_stream_load

 -- ?insert into 的?式导??条
 INSERT INTO test_json VALUES(7, '{"k1":"v1", "k2": 200}');
  1. get_json_double,get_json_int,get_json_string
语法:
      DOUBLE get_json_double(VARCHAR json_str, VARCHAR json_path)
      INT get_json_int(VARCHAR json_str, VARCHAR json_path)
      VARCHAR get_json_string(VARCHAR json_str, VARCHAR json_path)
解释 :
      解析并获取 json 字符串内指定路径的浮点型内容。
      其中 json_path 必须以 $ 符号作为开头,使用 . 作为路径分割符。如果路径中包含 . ,则可以使用双引号包围。
      使用 [ ] 表示数组下标,从 0 开始。
      path 的内容不能包含 ", [ 和 ]。
      如果 json_string 格式不对,或 json_path 格式不对,或无法找到匹配项,则返回 NULL。

      另外,推荐使用jsonb类型和jsonb_extract_XXX函数实现同样的功能。

 示例 :
    --1.获取到k1对应的value的值
     mysql> select id, get_json_string(json_string,'$.k1') as k1 from test_json;
                  +------+------+
                  | id   | k1   |
                  +------+------+
                  |    2 | v32  |
                  |    4 | v31  |
                  |    5 | v31  |
                  |    6 | NULL |
                  |    1 | v31  |
                  |    3 | v33  |
                  +------+------+

		--2.获取到key 为a1 ??的数组
     mysql> select id, get_json_string(json_string,'$.a1') as arr from test_json;
                  +------+------------------------------------+
                  | id   | arr                                |
                  +------+------------------------------------+
                  |    4 | NULL                               |
                  |    5 | NULL                               |
                  |    6 | NULL                               |
                  |    1 | [{"k1":"v41","k2":400},1,"a",3.14] |
                  |    3 | [{"k1":"v41","k2":400},3,"a",5.14] |
                  |    2 | [{"k1":"v41","k2":400},2,"a",4.14] |
                  +------+------------------------------------+
    --3.获取到key 为a1 ??的数组中第?个元素的值
     mysql> select id, get_json_string(json_string,'$.a1[0]') as arr from test_json;
                  +------+-----------------------+
                  | id   | arr                   |
                  +------+-----------------------+
                  |    1 | {"k1":"v41","k2":400} |
                  |    3 | {"k1":"v41","k2":400} |
                  |    2 | {"k1":"v41","k2":400} |
                  |    4 | NULL                  |
                  |    5 | NULL                  |
                  |    6 | NULL                  |
                  +------+-----------------------+
    --4.获取到key 为a1 ??的数组中第?个元素的值(这个值是?个json串,再次获取到这个字符串
    中)
     mysql> select id, get_json_string(get_json_string(json_string,'$.a1[0]'),'$.k1') as arr from test_json;
					等价 select id, get_json_string(json_string,'$.a1[0].k1') as arr from test_json;
                  +------+------+
                  | id   | arr  |
                  +------+------+
                  |    4 | NULL |
                  |    5 | NULL |
                  |    6 | NULL |
                  |    2 | v41  |
                  |    1 | v41  |
                  |    3 | v41  |
                  +------+------+
  1. json_object
语法:VARCHAR json_object(VARCHAR,...)
解释 :  生成一个包含指定Key-Value对的json object, 当Key值为NULL或者传入参数为奇数个时,返回异常错误

示例 :
MySQL> SELECT json_object('id', 87, 'name', 'carrot');
          +-----------------------------------------+
          | json_object('id', 87, 'name', 'carrot') |
          +-----------------------------------------+
          | {"id": 87, "name": "carrot"}            |
          +-----------------------------------------+

窗?函数

doris中的窗?函数和hive中的窗?函数的?法?样

漏?模型分析函数window_funnel

语法:  window_funnel(window, mode, timestamp_column, event1, event2, ... , eventN)
解释 : 
    漏斗分析函数搜索滑动时间窗口内最大的发生的最大事件序列长度。

    - window :滑动时间窗口大小,单位为秒。
    - mode :模式,共有四种模式
        - "default": 默认模式。
        - "deduplication": 当某个事件重复发生时,这个重复发生的事件会阻止后续的处理过程。如,指定事件链为[event1='A', event2='B', event3='C', event4='D'],原始事件链为"A-B-C-B-D"。由于B事件重复,最终的结果事件链为A-B-C,最大长度为3。
        - "fixed": 不允许事件的顺序发生交错,即事件发生的顺序必须和指定的事件链顺序一致。如,指定事件链为[event1='A', event2='B', event3='C', event4='D'],原始事件链为"A-B-D-C",则结果事件链为A-B,最大长度为2
        - "increase": 选中的事件的时间戳必须按照指定事件链严格递增。
    - timestamp_column :指定时间列,类型为DATETIME, 滑动窗口沿着此列工作。
    - eventN :表示事件的布尔表达式。

    漏斗分析函数按照如下算法工作:

    - 搜索到满足满足条件的第一个事件,设置事件长度为1,此时开始滑动时间窗口计时。
    - 如果事件在时间窗口内按照指定的顺序发生,时间长度累计增加。如果事件没有按照指定的顺序发生,时间长度不增加。
    - 如果搜索到多个事件链,漏斗分析函数返回最大的长度。

示例 : 
MySQL [test]> select * from windowfunnel_test;
+------+---------------------+-------+
| xwho | xwhen               | xwhat |
+------+---------------------+-------+
| 1    | 2022-03-12 19:05:04 |     4 |
| 1    | 2022-03-12 16:15:01 |     3 |
| 1    | 2022-03-12 13:28:02 |     2 |
| 1    | 2022-03-12 10:41:00 |     1 |
| 1    | 2022-03-12 16:05:04 |     5 |
| 2    | 2022-03-12 13:28:02 |     2 |
| 2    | 2022-03-12 10:41:00 |     1 |
| 3    | 2022-03-12 16:15:01 |     3 |
+------+---------------------+-------+
MySQL [test]> select `xwho`, window_funnel(3600 * 12, 'default', t.xwhen, t.xwhat = 1, t.xwhat = 2 , t.xwhat = 3, t.xwhat = 4,t.xwhat = 5) AS level from windowfunnel_test t group by `xwho`;
+------+-------+
| xwho | level |
+------+-------+
| 1    |     4 |
| 2    |     2 |
| 3    |     0 |
+------+-------+

MySQL [test]> select `xwho`, window_funnel(3600 * 12, 'deduplication', t.xwhen, t.xwhat = 1, t.xwhat = 2 , t.xwhat = 3, t.xwhat = 4,t.xwhat = 5) AS level from windowfunnel_test t group by `xwho`;
+------+-------+
| xwho | level |
+------+-------+
| 1    |     4 |
| 2    |     2 |
| 3    |     0 |
+------+-------+
MySQL [test]> select `xwho`, window_funnel(3600 * 12, 'fixed', t.xwhen, t.xwhat = 1, t.xwhat = 2 , t.xwhat = 3, t.xwhat = 4,t.xwhat = 5) AS level from windowfunnel_test t group by `xwho`;
+------+-------+
| xwho | level |
+------+-------+
| 1    |     2 |
| 2    |     2 |
| 3    |     0 |
+------+-------+

相关推荐

ES6中 Promise的使用场景?(es6promise用法例子)

一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...

JavaScript 对 Promise 并发的处理方法

Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...

Promise的九大方法(promise的实例方法)

1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...

360前端一面~面试题解析(360前端开发面试题)

1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...

前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?

Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...

最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式

看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...

前端分享-Promise可以中途取消啦(promise可以取消吗)

传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...

手写 Promise(手写输入法 中文)

前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...

什么是 Promise.allSettled()!新手老手都要会?

Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...

前端面试-关于Promise解析与高频面试题示范

Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...

宇宙厂:为什么前端离不开 Promise.withResolvers() ?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...

Promise 新增了一个超实用的 API!

在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...

一次搞懂 Promise 异步处理(promise 异步顺序执行)

PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...

Promise 核心机制详解(promise机制的实现原理)

一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...

javascript——Promise(js实现promise)

1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...

取消回复欢迎 发表评论: