首页 > 解决方案 > 当一个查询插入和一个同时更改同一张表时会发生什么?

问题描述

如果一个或多个进程试图将数据附加到表中,而一个或多个进程同时试图改变表,会发生什么?

假设我们有一个名为 db.table 的表(按带列分区):

band |name |age
---------------------------
 1        abc   18
 1        xyz   20
 2        aaa   18
 2        bbb   19
 3        ccc   22
 4        ddd   28

更改命令:

spark.sql("alter table db.table add columns (year_of_birth int, salary double, city string)")

数据附加:

df = spark.sql("select 5 as band, 'fff' as name, 33 as age")

df.write.partitionBy('band').mode('append').saveAsTable('db.table')

这里 df.write 和 spark.sql(alter command) 由多个进程同时执行。在这种情况下 spark 的行为是什么?

标签: apache-sparkapache-spark-sql

解决方案


tl; dr简单,不会发生任何令人惊讶的事情,因为要写入的数据将在该数据(作为表格)被附加到之前加载。

此外,附加查询是安全的,因为它们会添加数据(实际上并未真正按行修改)。


推荐阅读