prestosql和prestodb对hudi的支持分析

  1. prestosql与prestodb的支持程度

     在hudi的官网上,并没有介绍prestosql与hudi的集成对接,其实只要将hudi的jar包放到prestosql的connector的目录下,prestosql也是能正常对接的,但是 prestosql对hudi的对接不如prestodb完善,两者的对接情况如下:

COW的实时视图COW的增量查询MOR的实时视图MOR的增量查询MOR的读优化视图
prestosqlYNNNY
prestodbYNYNY

    2. prestosql与prestodb访问hudi数据源的方式

    prestosql与prestodb两者获取split的区别:

获取实时视图的splits方式获取读优化视图的splits方式
prestosqlHoodieParquetRealtimeInputFormat的getSplits()接口HoodieParquetInputFormat的getSplits()接口
prestodb

HoodieParquetInputFormat的getSplits()接口

通过hdfs的路径自己生成splits

      prestodb在获取优化视图的splits的时候,还做了一些路径过滤的优化。   

     

      prestodb和prestosql在获取数据源的数据上也有区别:

      prestodb的数据读取时通过HoodieParquetRealtimeInputFormat.getRecordReader进行的,在数据读取的时候,会传入日志更新文件路径,基准文件路径等信息,Hudi内部的InputFormat会根据日志修改信息对基准文件操作后再返回,所以读到的数据都是最新的,因此prestodb是支持hudi的实时读取的。

   prestosql读取hudi的实时视图使用了Parquet原生接口,Parquet原生读取器只能认识Parquet的基准文件,对于Hudi维持的数据变化信息的log文件并不认识,因此在hudi upsert的时候,log更新信息对prestosql来说等同透明,所以prestosql是不支持hudi实时视图的读取的。

      读优化视图读取的都是Parquet基准文件,因此在读优化视图上,prestosql和prestodb功能上无区别。

  3. prestodb访问hudi实时视图关键代码的走读

     1.    如果是Hudi的实时视图,使用的是数据源的InputFormat,其他视图则自己构造splits,并且根据数据源的路径优化信息尽心读取的文件过滤 

      2. 在读取Parquet的时候,如果数据源有使用UseRecordReaderFromInputFormat注解,则使用数据源的RecordReader。HoodieParquetRealtimeInputFormat有标有此注解,HoodieParquetInputFormat无标此注解,Hudi实时视图使用的是HoodieParquetRealtimeInputFormat格式,因此读取数据的时候使用的是数据源的RecordReader方式。

      3.上边返回Optional.empty()之后,presto将构造GenericHiveRecordCursorProvider进行数据读取

     4. GenericHiveRecordCursorProvider中使用了数据源的getRecordReader进行数据读取,即上述的HoodieParquetRealtimeInputFormat.getRecordReader的接口进行数据拉取。

     5. 传给数据源的customSplitInfo参数包括基准文件,log更新文件等信息。

Presto是Facebook最新研发的数据查询引擎,可对250PB以上的数据进行快速地交互式分析。据称该引擎的性能是 Hive 的 10 倍以上。 PrestoDB 是 Facebook 推出的一个大数据的分布式 SQL 查询引擎。可对从数 G 到数 P 的大数据进行交互式的查询,查询的速度达到商业数据仓库的级别。 Presto 可以查询包括 Hive、Cassandra 甚至是一些商业的数据存储产品。单个 Presto 查询可合并来自多个数据源的数据进行统一分析Presto 的目标是在可期望的响应时间内返回查询结果。Facebook 在内部多个数据存储中使用 Presto 交互式查询,包括 300PB 的数据仓库,超过 1000 个 Facebook 员工每天在使用 Presto 运行超过 3 万个查询,每天扫描超过 1PB 的数据。此外包括 Airbnb 和 Dropbox 也在使用 Presto 产品。 Presto 是一个分布式系统,运行在集群环境中,完整的安装包括一个协调器 (coordinator) 和多个 workers。查询通过例如 Presto CLI 的客户端提交到协调器,协调器负责解析、分析和安排查询到不同的 worker 上执行。 此外,Presto 需要一个数据源来运行查询。当前 Presto 包含一个插件用来查询 Hive 上的数据,要求: Hadoop CDH4 远程 Hive metastore service Presto 不使用 MapReduce ,只需要 HDFS 要求: Mac OS X or Linux Java 7, 64-bit Maven 3 (for building) Python 2.4 (for running with the launcher script) 标签:PrestoDB  查询引擎  大数据
不同的数据库管理系统对于命名的支持不同,其中是否支持使用`-`作为命名的一部分也有所不同。 - Presto: Presto支持使用`-`作为命名的一部分,但是建议遵循以下规则:表名和列名只能包含字母(a-z,A-Z)、数字(0-9)和下划线(_),第一个字符必须是字母或下划线。 - ClickHouse: ClickHouse支持使用`-`作为命名的一部分,但是建议遵循以下规则:表名和列名只能包含字母(a-z,A-Z)、数字(0-9)和下划线(_),第一个字符必须是字母或下划线。 - HBase: HBase不支持使用`-`作为命名的一部分,建议使用字母、数字和下划线来命名表名和列名。 - Apache Hudi: Apache Hudi支持使用`-`作为命名的一部分,但是建议遵循以下规则:表名和列名只能包含字母(a-z,A-Z)、数字(0-9)和下划线(_),第一个字符必须是字母或下划线。 - MySQL: MySQL支持使用`-`作为命名的一部分,但是建议遵循以下规则:表名和列名只能包含字母(a-z,A-Z)、数字(0-9)和下划线(_),第一个字符必须是字母或下划线。 - Oracle: Oracle支持使用`-`作为命名的一部分,但是建议遵循以下规则:表名和列名只能包含字母(a-z,A-Z)、数字(0-9)和下划线(_),第一个字符必须是字母。 - SQL Server: SQL Server支持使用`-`作为命名的一部分,但是建议遵循以下规则:表名和列名只能包含字母(a-z,A-Z)、数字(0-9)和下划线(_),第一个字符必须是字母或下划线。 - PostgreSQL: PostgreSQL支持使用`-`作为命名的一部分,但是建议遵循以下规则:表名和列名只能包含字母(a-z,A-Z)、数字(0-9)和下划线(_),第一个字符必须是字母或下划线。 总的来说,建议使用字母、数字和下划线来命名表名和列名,以避免在不同的数据库管理系统中出现命名问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值