
# 读取Hudi mor表视图
mor表同步给Hive后，会在Hive表中同步出："表名+后缀_rt"和"表名+后缀_ro"两张表。其中后缀为rt表代表实时视图，后缀为ro的表代表读优化视图。例如：同步给Hive的hudi表名为**${table_name}** ， 同步Hive后hive表中多出两张表分别为**${table_name}_rt** ,和**${table_name}_ro**。
- 实时视图读取（Hive，SparkSQL为例）：直接读取Hive里面存储的后缀为_rt的hudi表即可。
  ```
  select count(*) from ${table_name}_rt;
  ```
  

- 实时视图读取（Spark dataSource API为例）：和cow表一样，请参考cow表相关操作。

- 增量视图读取（hive为例）：
  ```
  set hive.input.format=org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat; // sparksql 不需要指定
  set hoodie.${table_name}.consume.mode=INCREMENTAL;
  set hoodie.${table_name}.consume.max.commits=3;
  set hoodie.${table_name}.consume.start.timestamp=20201227153030;
  select count(*) from default.${table_name}_rt where `_hoodie_commit_time`>'20201227153030';
  ```
  

- 增量视图读取（SparkSQL为例）：
  ```
  set hoodie.${table_name}.consume.mode=INCREMENTAL;
  set hoodie.${table_name}.consume.start.timestamp=20201227153030;  // 指定初始增量拉取commit
  set hoodie.${table_name}.consume.end.timestamp=20210308212318;  // 指定增量拉取结束commit，如果不指定的话采用最新的commit
  select count(*) from default.${table_name}_rt where `_hoodie_commit_time`>'20201227153030';
  ```
  
- 增量视图（Spark dataSource API为例）：和cow表一样，请参考cow表相关操作。
- 读优化视图读取（Hive，SparkSQL为例）：直接读取Hive里面存储的后缀为_ro的hudi表即可。
  ```
  select count(*) from ${table_name}_ro;
  ```
  

- 读优化视图读取（Spark dataSource API为例）：和读普通的dataSource表类似。 必须指定查询类型QUERY_TYPE_OPT_KEY 为QUERY_TYPE_READ_OPTIMIZED_OPT_VAL
  ```
  spark.read.format("hudi")
  .option(QUERY_TYPE_OPT_KEY, QUERY_TYPE_READ_OPTIMIZED_OPT_VAL) // 指定查询类型为读优化视图
  .load("/tmp/default/mor_bugx/") // 指定读取的hudi表路径
  .createTempView("mycall")
  spark.sql("select * from mycall").show(100)
  ```
  
 
