apache-spark - 如何在使用 Spark Session 写入之前启用会话集命令将数据帧结果写入 teradata
问题描述
我的数据有特殊字符(如笑脸字符,一些垃圾字符)。我想将数据按原样插入 Terdata 表中。我可以看到 Hive 以 UTF-8 格式存储数据。哪里在 teradata spark 数据帧写入失败并出现错误
错误 6705 翻译过程中遇到了非法格式的字符串
为了解决这个问题,我遵循了以下过程
- 使用 DriverManager 和 Connection createStatement 编写自定义 Scala 代码。
JDBC ConnectionString = jdbc:teradata://connection/DATABASE=dbname,CHARSET=UTF-8,COLUMN_NAME=ON,MAYBENULL=ON
- 在写入实际数据之前,启用 SESSION 命令 -
设置会话字符设置 UNICODE 直通
- 会话命令执行成功后,将实际数据写入 teradata 表。
但我想看看在将数据帧数据写入 teradata 表之前是否有任何可能的选项来启用会话级命令。
我可以在数据框选项方法中使用会话级别集语句吗?喜欢
table_df.write.format("jdbc").option("url",jdbcurl").option("dbtable",tablename).option("dbname",dbname).option("username",user).option( “密码”,密码)
请提供您对此的看法。谢谢
解决方案
您可以指定 Teradata JDBC 驱动程序的RUNSTARTUP=ON
连接参数,并SET SESSION CHARACTER SET UNICODE PASS THROUGH ON
在数据库用户STARTUP
子句中指定命令。
有关详细信息,请参阅 Teradata JDBC 驱动程序用户指南,在标题为“用户启动 SQL 请求”的部分中:
推荐阅读
- r - 如何用不同的变量处理覆盖两个图?
- python - 在xml python中查找子元素的子元素
- python - 代码不适用于列 CONTENT 每一行的停用词
- sql - 将非结构化字符串转换为特定格式
- elasticsearch - Elasticsearch - 包括在_source中排除的突出显示字段
- javascript - 对象内部的数组拆分
- android - 我可以声明一个 OnClickListener 派生类并将其实例传递给 Frida 中视图的 setOnClickListener 方法吗
- java - 限制客户端仅使用从 yml 文件创建的配置列表中的一种配置
- c++ - C++ - “类”类型重新定义
- ios - 如何解码具有动态嵌套级别数的嵌套 JSON 结构?