Spark SQL实现分区表的分区覆盖

在Spark SQL中,如果想把一个DataFrame保存到Hive表中,有两个方法可以使用,分别是insertInto和saveAsTable()。

1、保存DataFrame数据到Hive表中

当使用saveAsTable()方法时:

  • 1)如果表不存在,则会创建表;
  • 2)如果表已经存在,则取决于保存模式(SaveMode):
    • (1) 如果不指定保存模式(默认),则会抛出异常;
    • (2) 如果指定append模式,则会追加df数据到表中,且df的schema与已存在的schema个数要相同(列顺序可以不同),否则出错;
    • (3) 如果指定overwrite模式,则会用df数据覆盖表中已有的数据。

当使用insertInto()方法时,表必须已经存在,且df的schema结构顺序与指定Hive表的schema结构顺序必须一致。其行为也取决于插入模式(SaveMode):

  • (1) 如果不指定保存模式,则默认是append,会追加df数据到表中;
  • (2) 如果指定overwrite模式,则会用df数据覆盖表中已有的数据。

2、对分区表的全表覆盖

在分区表中,当调用saveAsTable()方法和insertInto()方法并均指定SaveMode存储模式为orvewrite时,实现的是分区表的全表覆盖。

......

......

抱歉,只有登录会员才可浏览!会员登录


《Flink原理深入与编程实战》