首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用覆盖模式向Teradata表写入DF的星星之火--尽管截断为真

问使用覆盖模式向Teradata表写入DF的星星之火--尽管截断为真
EN

Stack Overflow用户
提问于 2018-09-18 12:11:38
回答 1查看 3.3K关注 0票数 0

我正在尝试使用Spark将DF记录写入Teradata表。

示例代码:

代码语言:javascript
复制
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。此选项仅适用于写作。

EN

回答 1

Stack Overflow用户

发布于 2018-09-19 12:48:31

默认的多集表可以在ANSI模式下创建

您可以在JDBC中指定以TMODE=ANSI为参数的teradata模式。

代码语言:javascript
复制
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()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52386322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档