我有一个名为df_result
的数据帧,它有36条记录。我需要将此数据帧加载到SQL Server中的两个不同表中。我试图在pyspark中使用两种不同的模式:append
和overwrite
来加载这些表。但我看到的结果没有意义
我有两个目标表:
TableA (empty)
TableB (contains data)
我需要将df_result
加载到这两个表中,但使用不同的modes
我的代码如下:
对于表A(为空):
df_result.write.jdbc(url=jdbcUrl, table='abc.TableA', mode = 'append')
按预期从df_result
加载所有36条记录
对于表B(有数据):
df_result.write.option("truncate", "true").jdbc(url=jdbcUrl, table='abc.TableB', mode = 'overwrite')
仅从df_result
加载18条记录,这很奇怪
两个表的dataframe和DDL的架构如下所示:
df_result
root
|-- SID: decimal(19,0) (nullable = true)
|-- Code: string (nullable = true)
|-- LocName: string (nullable = true)
|-- Country: string (nullable = true)
|-- Cnumber: integer (nullable = true)
|-- StartDate: timestamp (nullable = true)
|-- EndDate: timestamp (nullable = true)
|-- CurrentIND: string (nullable = true)
TableA:
CREATE TABLE [abc].[TableA]
(
[SID] [decimal](18, 0) NOT NULL,
[Code] [char](3) NOT NULL,
[LocName] [varchar](50) NOT NULL,
[Country] [varchar](50) NOT NULL,
[Cnumber] [int] NOT NULL,
[StartDate] [datetime2](7) NOT NULL,
[EndDate] [datetime2](7) NOT NULL,
[CurrentIND] [char](1) NOT NULL
)
WITH
(
DISTRIBUTION = ROUND_ROBIN,
CLUSTERED COLUMNSTORE INDEX
);
TableB:
CREATE TABLE [abc].[TableB]
(
[SID] [decimal](18, 0) NOT NULL,
[Code] [char](3) NOT NULL,
[LocName] [varchar](50) NOT NULL,
[Country] [varchar](50) NOT NULL,
[Cnumber] [int] NOT NULL,
[StartDate] [datetime2](7) NOT NULL,
[EndDate] [datetime2](7) NOT NULL,
[CurrentIND] [char](1) NOT NULL
)
WITH
(
DISTRIBUTION = ROUND_ROBIN,
CLUSTERED COLUMNSTORE INDEX
);
我希望TableA
和TableB
都有相同的数据,至少在我第一次运行它时是这样,因为TableA
在append
模式下是空的。但事实并非如此,因为两行加载的记录数不同
这是非常奇怪的,因为两条线应该做相同的事情。我无法理解这里出了什么问题。有人能解释一下这里出了什么问题吗?提前谢谢
目前没有回答
相关问题 更多 >
编程相关推荐