1. 问题背景

用spark-sql,insert overwrite分区表时发现两个比较麻烦的问题:

  1. 从目标表select出来再insert overwrite目标表时报错:Error in query: Cannot overwrite a path that is also being read from.
  2. 从其他表select出来再insert overwrite目标表时,其他分区都被删除了.

2. 问题描述

2.1 代码示例

drop table pt_table_test1;
create table pt_table_test1 (id int,region string,dt string
) using parquet
partitioned by (region, dt)
;drop table pt_table_test2;
create table pt_table_test2 (id int,region string,dt string
) using parquet
partitioned by (region, dt)
;set hive.exec.dynamic.partition =true;
set hive.exec.dynamic.partition.mode = nonstrict;truncate table pt_table_test1;
insert into table pt_table_test1 values (1,'id', '2022-10-01'),(2,'id', '2022-10-02'),(3,'ph', '2022-10-03'),(1,'sg', '2022-10-01'),(2,'sg', '2022-10-02'),(3,'ph', '2022-10-03');
select * from pt_table_test1;insert overwrite table pt_table_test1 select * from pt_table_test1 where dt = '2022-10-01';
select * from pt_table_test1;truncate table pt_table_test2;
insert into table pt_table_test2 values (2,'id', '2022-10-01'),(2,'id', '2022-10-02'),(2,'sg', '2022-10-01'),(2,'sg', '2022-10-02');
insert overwrite table pt_table_test1 select * from pt_table_test2 where id = 2;
select * from pt_table_test1;

2.2 错误演示

3. 解决方法

印象中这两个问题也出现过,但凭经验和感觉,应该可以解决。找到以前正常运行的表,对比分析了下,发现是建表方式不一致问题:

  • 错误建表,指定表的文件格式:using parquet
  • 正确姿势,指定表的文件格式:stored as parquet

3.1 示例代码

drop table pt_table_test1;
create table pt_table_test1 (id int,region string,dt string
) stored as parquet
partitioned by (region, dt)
;drop table pt_table_test2;
create table pt_table_test2 (id int,region string,dt string
) stored as parquet
partitioned by (region, dt)
;set hive.exec.dynamic.partition =true;
set hive.exec.dynamic.partition.mode = nonstrict;truncate table pt_table_test1;
insert into table pt_table_test1 values (1,'id', '2022-10-01'),(1,'id', '2022-10-02'),(1,'ph', '2022-10-03'),(1,'sg', '2022-10-01'),(1,'sg', '2022-10-02'),(1,'ph', '2022-10-03');
select * from pt_table_test1;insert overwrite table pt_table_test1 select * from pt_table_test1 where dt = '2022-10-01';
select * from pt_table_test1;truncate table pt_table_test2;
insert into table pt_table_test2 values (2,'id', '2022-10-01'),(2,'id', '2022-10-02'),(2,'sg', '2022-10-01'),(2,'sg', '2022-10-02');
insert overwrite table pt_table_test1 select * from pt_table_test2 where id = 2;
select * from pt_table_test1;

3.2 正确演示

4. using parqnet和stored as parquet

对比两种建表:

  1. 建表无论是using parquet还是stored as parquet,执行show create table都显示: USING parquet。
  2. stored as parquet时,执行show create table,新增了TBLPROPERTIES属性。

spark-sql: insert overwrite分区表问题相关推荐

  1. 【spark】Spark SQL:INSERT INTO语句语法

    Spark SQL:INSERT INTO语句语法 您可以INSERT像通常那样使用语句: INSERT INTO hello (someId,name) VALUES (1,"hello& ...

  2. hive on spark执行insert overwrite非常慢

    把一些sql执行从hive改到spark,发现执行更慢,sql主要是一些insert overwrite操作,从执行计划看到,用到InsertIntoHiveTable spark-sql> e ...

  3. Spark SQL overwrite问题

    背景 今天发现hive中有张表,每天会有定时插入操作,但是会有比较多的重复数据,于是想着每天再插入的时候清理一下,用的Spark SQL. 问题 在试用的时候,出现了两个问题: 1.Cannot ov ...

  4. Flume+Spark+Hive+Spark SQL离线分析系统

    前段时间把Scala和Spark一起学习了,所以借此机会在这里做个总结,顺便和大家一起分享一下目前最火的分布式计算技术Spark!当然Spark不光是可以做离线计算,还提供了许多功能强大的组件,比如说 ...

  5. hive分区表之insert overwrite 注意事项

    hive version 3.1.3 以往我们插入分区 需要 insert ovewrite table  p_table partition(period_id='202212') select i ...

  6. Spark SQL 1.3.0 DataFrame介绍、使用及提供了些完整的数据写入

     问题导读 1.DataFrame是什么? 2.如何创建DataFrame? 3.如何将普通RDD转变为DataFrame? 4.如何使用DataFrame? 5.在1.3.0中,提供了哪些完整的 ...

  7. Spark SQL玩起来

    标签(空格分隔): Spark [toc] 前言 Spark SQL的介绍只包含官方文档的Getting Started.DataSource.Performance Tuning和Distribut ...

  8. sparksql删除MySQL数据_Databricks 第6篇:Spark SQL 维护数据库和表

    Spark SQL 表的命名方式是db_name.table_name,只有数据库名称和数据表名称.如果没有指定db_name而直接引用table_name,实际上是引用default 数据库下的表. ...

  9. spark sql读取hive底层_scala – 从一个hive表中读取并使用spark sql写回来

    我正在使用Spark SQL读取Hive表并将其分配给 scala val val x = sqlContext.sql("select * from some_table") 然 ...

最新文章

  1. 关于Sqlserver中 BCP命令,实现数据导出功能。
  2. 百度地图API二次开发小经验分享
  3. 汉塔克问题(C语言递归)
  4. Libra教程之:来了,你最爱的Move语言
  5. 分享一下dudu回答的一个方法
  6. 兰州大学第一届 飞马杯 ★★飞马祝福语★★ 线段树维护dp(动态dp)
  7. 银行营业网点管理系统——entity类(CityArea)
  8. 【渝粤教育】国家开放大学2019年春季 1161开放英语3 参考试题
  9. 三菱a系列motion软体_通化三菱Q00JCPU
  10. 读《向外行一样思考、像专家一样实践》之 简单、省略、抽象化、例子分析
  11. 计算机数字模拟仿真软件,实时数字仿真系统
  12. 多径瑞利信道的一种matlab产生方法
  13. 软件测试知识点 fiddler抓包教程
  14. 显卡功耗测试用什么软件,跑什么测试显卡功耗最高:这20个项目能给你答案
  15. java多线程并发测试工具_java线程并发工具类CyclicBarrier、CountDownLatch及Semaphore
  16. kernel编译错误R_ARM_THM_JUMP19
  17. AutoLayout(Ⅱ):遇到的几个小问题(Keng)
  18. usb启动pe和Linux,打造自己的多功能USB启动盘——grub2引导WinPE、Archlinux安装镜像和Ubuntu liveCD...
  19. 空气颗粒度PM2.5的检测设计与实现
  20. 2020起重机司机(限桥式起重机)作业考试题库及起重机司机(限桥式起重机)实操考试视频

热门文章

  1. Vue devtools 与 react-developer-tools 插件地址
  2. 谷歌调试屏蔽某个请求
  3. springboot-mybatisplus-redis二级缓存
  4. 网上银行如何防盗成关键
  5. Detected problems with API compatibility
  6. 【小程序测试】接口测试
  7. ROS_MASTER_URI和ROS_IP的设置
  8. 计算机房用活动地板技术条件,计算机机房用活动地板技术条件gb665086.doc
  9. 6.5Python面向对象(5):多继承
  10. 运用Javascript实现时间重置、进行时间加减计算