zoukankan      html  css  js  c++  java
  • presto调研和json解析函数的使用

    presto简单介绍

              presto是一个分布式的sql交互式查询引擎。可以达到hive查询效率的5到10倍。支持多种数据源的秒级查询。

              presto是基于内存查询的,这也是它为什么查询快的原因。除了基于内存,presto还使用了

      • 向量计算,
      • 动态编译执⾏计划
      • 优化的ORC和Parquet Reader技术

              从而优化查询的速度。

      1. presto和hive的对比
        hive和presto是针对不同使用场景的。presto虽然查询很快,但是也不是适用于所有的查询场景。
        比如做多张大表的关联查询,
        由于presto是基于内存查询的。做大表关联查询时,数据要加载到内存中,假如使用presto查询超过了几分钟才会有返回。
        且严重影响集群的性能。这就违背了presto交互式查询的初衷,交互式就是要做到近实时查询与返回。
        所以,presto不适合做多张大表的join操作或者ETL操作。这种情况就该使用hive了。
        另外,hive只能做hdfs查询(es等需要插件支持),而presto支持了mysql,pg,kafka,redis等。
        总之,presto是支持多数据源的查询利器。

      2. 适用场景
        presto不应作为etl工具,和做多表关连查询。而应该更多的作为单表的查询操作。
      3. 结合我们的业务场景,不难想到,presto适用的场景是
        1. 在数仓的前两层,presto可以做验数,查询某条数据使用;
        2. 业务人员和数据分析师在操作生成好的事实表查询时,使用presto,体验会有很大的提升 

    presto的使用

               presto的官方文档写的十分清楚,相信大家结合文档,可以很快的把一句hive sql 转化为presto sql

               https://prestodb.github.io/docs/current/

      • json解析
      • 因为我们解析log最常用的就是json解析。
        我们单独说下json解析的方法。直接上代码:

        --  employee表的xjson字段,只有一条数据
        [{"name":"王二","sex":"男","age":"25"},{"name":"李四","sex":"男","age":"47"}]

        取出"王二"的年龄:

      • hive sql为:

        select
        	get_json_object(xjson,'$.[0].age')
        	from 
        	employee limit 1;

        hive 查询结果为: 25

      • presto 对json的处理函数是 json_array_get() 和 json_extract()

        -- 我们分步操作,先用 json_array_get()取出jsonArray的第一个元素
        select
        	json_array_get(xjson,0)
        	from 
        		employee
        	limit 1;

        presto查询结果:  {"name":"王二","sex":"男","age":"25"}

        -- 再介绍下用 json_extract() 在 {"name":"王二","sex":"男","age":"25"} 中查询 "王二"的年龄
        -- json_extract 和 hive中的get_json_object类似
        select
        	json_extract('{"name":"王二","sex":"男","age":"25"}', '$.age')

        presto查询结果是:25

         

              总结:presto提供了解析json的函数, json_array_get() 和 json_extract(),对于jsonArray,需要用 json_array_get() 获取到从0开始的第几个元素。
                         对与jsonObject和hive的get_json_object()的用法一致。
     
          hive函数 get_json_object,请参考我的另一篇文章 https://www.cnblogs.com/drjava/p/10486134.html
     
  • 相关阅读:
    ant 软件包不存在报错
    在 Internet Explorer 中使用 Windows 窗体控件
    智能客户端
    Back to the Future with Smart Clients
    "Automation 服务器不能创建对象" 的解决方案
    Top 10 Reasons for Developers to Create Smart Clients
    Updater Application Block for .NET
    Smart Client Application Model and the .NET Framework 1.1
    Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
    智能客户端技术总结(二)
  • 原文地址:https://www.cnblogs.com/drjava/p/10536922.html
Copyright © 2011-2022 走看看