我正在尝试使用Spark将DF记录写入Teradata表。
示例代码:
df.write.format("jdbc")\
.option("url", jdbcUrl)\
.option("driver", "com.teradata.jdbc.TeraDriver") \
.option("dbtable", dbTableName) \
.option("user", userName)\
.option("password", passWord) \
.option("numPartitions", 3) \
.option("truncate", True) \
.mode('overwrite')\
.save()总是删除该表并再次创建该表。当它再次创建表时,它将表创建为SET表,而不是多集表。
根据Spark文档,当我将truncate作为True传递时,它应该截断表而不是删除表。
这是一个与JDBC编写器相关的选项。启用SaveMode.Overwrite时,此选项将导致Spark截断现有表,而不是删除和重新创建它。这可以提高效率,并防止删除表元数据(例如索引)。但是,在某些情况下,例如当新数据有不同的模式时,它将无法工作。默认为false。此选项仅适用于写作。
发布于 2018-09-19 12:48:31
默认的多集表可以在ANSI模式下创建
您可以在JDBC中指定以TMODE=ANSI为参数的teradata模式。
val jdbcUrl = jdbc:teradata://TDHOST/database=databasename,TMODE=ANSI
df.write.format("jdbc")\
.option("url", jdbcUrl)\
.option("driver", "com.teradata.jdbc.TeraDriver") \
.option("dbtable", dbTableName) \
.option("user", userName)\
.option("password", passWord) \
.option("numPartitions", 3) \
.option("truncate", True) \
.mode('overwrite')\
.save()https://stackoverflow.com/questions/52386322
复制相似问题