Presto简介(附格式转换)

------ 欢迎来到Presto的世界 biu biu biu ~ ------


本文标题是: Presto简介

官方地址:Presto 镇楼
Wiki地址来一波:Presto

1.简介

  • Presto是Facebook开发的数据查询引擎,可对250PB以上的数据进行快速地交互式分析。
  • 该项目始于 2012 年秋季开始开发,目前该项目已经在超过 1000 名 Facebook 雇员中使用,运行超过 30000 个查询,每日数据在 1PB 级别。Facebook 称 Presto 的性能比Hive要好上 10 倍有多。2013年Facebook正式宣布开源 Presto。

2.速度

本人使用Presto,感觉飞一般的感觉。

3.场景

  • Presto 支持 SQL 并提供了一个标准数据库的语法特性,但其不是一个通常意义上的关系数据库,他不是关系数据库,如 MySQL、PostgreSQL 或者 Oracle 的替代品。Presto 不是设计用来解决在线事物处理(OLTP);
  • Presto 是一个工具,被用来通过分布式查询来有效的查询大量的数据。Presto 是一个可选的工具,可以用来查询 HDFS,通过使用 MapReduce 的作业的流水线,例如 hive,pig,但是又不限于查询 HDFS 数据,它还能查询其他的不同数据源的数据,包括关系数据库以及其他的数据源,比如 cassandra;
  • Presto 被设计为处理数据仓库和分析:分析数据,聚合大量的数据并产生报表,这些场景通常被定义为 OLAP。

4.本人使用发现的

主要是各种格式转换,本人表(table)中所有数据均是string格式,所有的格式均需要转换:

  • 日期需要转化为date型
  • 除法中分子&分母需要转化为double型
  • 因为create_time是2019-01-01 00:00:00.0的格式,我用substr取前10位,结果在presto中就成空了,我就用的split函数根据空格分割的create_time,然后取分割后的第一部分,在presto中取第一部分是[1]不是[0]
  • 如果需要计算前几天的 日期可以用
    • 绝对日期:date '2019-03-15' - interval '2' day,也就是2019-03-13
    • 相对日期:假如今天是2019-03-15,也可以用cast(sysdate(-1) as date) - interval '1' day,也就是2019-03-13

举个栗子,如下

select
    'num_07d' as zhibiao,
    zb,
    num,
    num_all,
    cast(num as double) / cast(num_all as double) as ration
from
    (
        select
            index_a as zb,
            count(id) as num
        from
            table
        where
            dp = 'ACTIVE'
            and cast(split(create_time, ' ') [1] as date) <= cast(sysdate(-2) as date)
            and cast(split(create_time, ' ') [1] as date) >(cast(sysdate(-2) as date) - interval '7' day)
        group by
            index_a
    )
    a,
    (
        select
            count(id) as num_all
        from
            table
        where
            dp = 'ACTIVE'
            and cast(split(create_time, ' ') [1] as date) <= cast(sysdate(-2) as date)
            and cast(split(create_time, ' ') [1] as date) >(cast(sysdate(-2) as date) - interval '7' day)
    )
    b

你可能感兴趣的:(Presto)