Delta Lake 分区表覆盖写入操作
01 覆盖写
INSERT OVERWRITE TABLE 分区表时分三种场景:
- 动态分区 - 写入前会删除所有分区,并根据数据中的分区字段写入相应新分区
- 静态分区 - 只会对指定的分区进行覆盖写操作
- 混合分区(动态+静态分区) - 上述两种情况的结合
如果想通过 SQL 转化为上述 API ,首先需要在 sql parser 的时候获取到 insertMode 和 partitions 信息,并将 partitions 信息存在一个有序的结构中,例如 LinkedHashMap。然后利用这些信息,就可以拼装进行拼装实现上述三种场景。
1.1 动态分区
对所有 ds 分区进行覆盖写操作,将会清空所有 ds 分区
sql
INSERT OVERWRITE TABLE db.tableA partition(ds)
select name,ds