我在存盤在服務器中的 SQL 資料庫中有一個表 (TableA),可通過 Microsoft SQL Server Management Studio 訪問。
然后我有一個 Databricks 筆記本,它創建一個表(TableB),然后將其附加到存盤在服務器中的那個(表 A)。
要將 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 可能有一個稍微不同的架構,特別是可能有額外的列。
因此,我想知道是否有一種附加表格的模式,以便所有共同的列都按現在的樣子附加,并且新的列也被附加,可能顯示“無”。你能提出一種聰明而優雅的方式來實作我的目標嗎?
uj5u.com熱心網友回復:
閱讀的架構TableA并僅從中選擇那些列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被選中,并且順序是正確的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448830.html
