我在配置单元上有一个表,我正在尝试在该表中插入数据。我正在从sql获取数据,但我不想插入已存在于配置单元表中的id。我试着使用相同的条件,比如where not exists。我用的是Pypark的气流。
6yoyoihd1#
这个 exists spark中不存在运算符,但有2个联接运算符可以替换它: left_anti 以及 left_semi .例如,如果要插入Dataframe df 在Hive桌上 target ,您可以执行以下操作:
exists
left_anti
left_semi
df
target
new_df = df.join( spark.table("target"), how='left_anti', on='id' )
然后你写 new_df 在你的table上。 left_anti 允许您仅保留不满足连接条件的行(相当于 not exists ). 相当于 exists 是 left_semi .
new_df
not exists
r8xiu3jd2#
我认为星火不存在这样的属性。我认为你可以使用两种方法:解决方法 UNIQUE condition(典型的关系数据库):在尝试插入(in)时使用这种方式 append 模式)一个已经存在的记录,您将得到一个可以正确处理的异常。读你想写的表格, outer join 它包含要添加到上述表中的数据,然后将结果写入 overwrite mode (但我认为第一种解决方案的性能可能更好)。更多细节请随时询问
UNIQUE
append
outer join
overwrite mode
2条答案
按热度按时间6yoyoihd1#
这个
exists
spark中不存在运算符,但有2个联接运算符可以替换它:left_anti
以及left_semi
.例如,如果要插入Dataframe
df
在Hive桌上target
,您可以执行以下操作:然后你写
new_df
在你的table上。left_anti
允许您仅保留不满足连接条件的行(相当于not exists
). 相当于exists
是left_semi
.r8xiu3jd2#
我认为星火不存在这样的属性。我认为你可以使用两种方法:
解决方法
UNIQUE
condition(典型的关系数据库):在尝试插入(in)时使用这种方式append
模式)一个已经存在的记录,您将得到一个可以正确处理的异常。读你想写的表格,
outer join
它包含要添加到上述表中的数据,然后将结果写入overwrite mode
(但我认为第一种解决方案的性能可能更好)。更多细节请随时询问