[英]How to append 2 SQL tables with different number of columns?
我在服务器中存储的 SQL 数据库中有一个表 (TableA),可通过 Microsoft SQL Server Management Studio 访问。
然后我有一个 Databricks 笔记本,它创建一个表 (TableB),然后将其附加到存储在服务器中的表 (表 A)。
到 append TableB 到 TableA 我使用 spark:
df_tableB.write.format("jdbc") \
.mode('append') \
.option("url", db_jdbc_url) \
.option("driver", driver) \
.option("dbtable", table_name) \
.option("user", db_user) \
.option("password", db_password) \
.save()
如果 TableA 和 TableB 的架构相同,这将非常有效。 但是我发现现在我的 TableB 可能有一个稍微不同的模式,特别是可能有额外的列。
因此,我想知道 append 表是否有一种模式,以便所有共有的列都按原样附加,并且新列也被附加,可能显示“无”。 你能提出一个聪明而优雅的方法来实现我的目标吗?
只读取TableA
和 select 的架构,仅读取TableB
中的那些列:
df_tableA = spark.read.format("jdbc").option(...)...load(...)
columns = [F.col(column_name) if column_name in df_tableB.schema.names else F.lit(None).alias(column_name) for column_name in df_tableA.schema.names]
df_tableB.select(columns).write.format("jdbc") \
.mode('append') \
.option("url", db_jdbc_url) \
.option("driver", driver) \
.option("dbtable", table_name) \
.option("user", db_user) \
.option("password", db_password) \
.save()
这样只会选择TableA
中存在的列,并且顺序是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.