
# 读取Hudi cow表视图
- 实时视图读取（Hive，SparkSQL为例）：直接读取Hive里面存储的Hudi表即可，**${table_name}** 表示表名称。
  ```
  select count(*) from ${table_name};
  ```
  

- 实时视图读取（Spark dataSource API为例）：和读普通的dataSource表类似。 必须指定查询类型QUERY_TYPE_OPT_KEY 为QUERY_TYPE_SNAPSHOT_OPT_VAL，**${table_name}**表示表名称。
  ```
  spark.read.format("hudi")
  .option(QUERY_TYPE_OPT_KEY, QUERY_TYPE_SNAPSHOT_OPT_VAL) // 指定查询类型为实时视图模式
  .load("/tmp/default/cow_bugx/") // 指定读取的hudi表路径
  .createTempView("mycall")
  spark.sql("select * from mycall").show(100)
  ```
  

- 增量视图读取（Hive为例，**${table_name}** 表示表名称）：
  ```
  set hoodie.${table_name}.consume.mode=INCREMENTAL;  //设置增量读取模式
  set hoodie.${table_name}.consume.max.commits=3;  // 指定最大消费的commits数量
  set hoodie.${table_name}.consume.start.timestamp=20201227153030;  // 指定初始增量拉取commit
  select count(*) from default.${table_name} where `_hoodie_commit_time`>'20201227153030'; // 这个过滤条件必须加且值为初始增量拉取的commit。
  ```
  

- 增量视图读取（SparkSQL为例，**${table_name}** 表示表名称）：
  ```
  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} where `_hoodie_commit_time`>'20201227153030'; // 这个过滤条件必须加且值为初始增量拉取的commit。
  ```
  
- 增量视图读取（Spark dataSource API为例）： 必须指定查询类型QUERY_TYPE_OPT_KEY 为增量模式QUERY_TYPE_INCREMENTAL_OPT_VAL
  ```
  spark.read.format("hudi")  
  .option(QUERY_TYPE_OPT_KEY, QUERY_TYPE_INCREMENTAL_OPT_VAL) // 指定查询类型为增量模式
  .option(BEGIN_INSTANTTIME_OPT_KEY, "20210308212004")  // 指定初始增量拉取commit
  .option(END_INSTANTTIME_OPT_KEY, "20210308212318")  // 指定增量拉取结束commit
  .load("/tmp/default/cow_bugx/")  // 指定读取的hudi表路径
  .createTempView("mycall")  // 注册为spark临时表
  spark.sql("select * from mycall where `_hoodie_commit_time`>'20210308211131'")// 开始查询，和hive增量查询语句一样
  .show(100, false)
  ```
  

- 读优化视图：cow表读优化视图等同于实时视图。
 
