首页 > 解决方案 > 如何在使用 Spark Session 写入之前启用会话集命令将数据帧结果写入 teradata

问题描述

我的数据有特殊字符(如笑脸字符,一些垃圾字符)。我想将数据按原样插入 Terdata 表中。我可以看到 Hive 以 UTF-8 格式存储数据。哪里在 teradata spark 数据帧写入失败并出现错误

错误 6705 翻译过程中遇到了非法格式的字符串

为了解决这个问题,我遵循了以下过程

  1. 使用 DriverManager 和 Connection createStatement 编写自定义 Scala 代码。

JDBC ConnectionString = jdbc:teradata://connection/DATABASE=dbname,CHARSET=UTF-8,COLUMN_NAME=ON,MAYBENULL=ON

  1. 在写入实际数据之前,启用 SESSION 命令 -

设置会话字符设置 UNICODE 直通

  1. 会话命令执行成功后,将实际数据写入 teradata 表。

但我想看看在将数据帧数据写入 teradata 表之前是否有任何可能的选项来启用会话级命令。

我可以在数据框选项方法中使用会话级别集语句吗?喜欢

table_df.write.format("jdbc").option("url",jdbcurl").option("dbtable",tablename).option("dbname",dbname).option("username",user).option( “密码”,密码)

请提供您对此的看法。谢谢

标签: apache-sparkapache-spark-sqlteradatapyspark-dataframes

解决方案


您可以指定 Teradata JDBC 驱动程序的RUNSTARTUP=ON连接参数,并SET SESSION CHARACTER SET UNICODE PASS THROUGH ON在数据库用户STARTUP子句中指定命令。

有关详细信息,请参阅 Teradata JDBC 驱动程序用户指南,在标题为“用户启动 SQL 请求”的部分中:

https://teradata-docs.s3.amazonaws.com/doc/connectivity/jdbc/reference/current/jdbcug_chapter_2.html#BGBHBDAB


推荐阅读