sql-server - 将数据从 SQL Server 插入到 Postgres - UTF8 0x00 错误
问题描述
我正在使用 PySpark 从 SQL Server 读取数据并将其写入 AWS 上的 Postgres DB。
INSERT
到 Postgres 失败并出现此错误
错误:编码“UTF8”的字节序列无效:0x00
我一直在寻找修复方法,但没有运气。我用来查找 char(0) 的语句说在任何列中都没有。我正在使用这个
cast(ExportName AS varchar) like '%' + char(0) +'%'
替换不起作用。
我尝试使用更改 pyspark 脚本中的编码
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
但仍然收到错误。
任何帮助是极大的赞赏。
编辑:这是完整的 pyspark 代码
# pyspark --jars /deployment/mssql-jdbc-9.2.0.jre8.jar,/deployment/postgresql-42.2.11.jar --num-executors 3 --executor-cores 8 --executor-memory 16g
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession
conf = SparkConf()
conf.setMaster("local").setAppName("My app")
sc = SparkContext.getOrCreate(conf=conf)
spark = SparkSession(sc)
ms_url = "jdbc:sqlserver://hostname;instanceName=instance;databaseName=database;"
ms_user = "username"
ms_password = "password"
mssql_query = ''' (SELECT *
FROM DBO.TBL_SENSORS
WHERE TYPE IN ('S','C')) query'''
jdbcDF = spark.read.format("jdbc") \
.option("url", ms_url) \
.option("dbtable", mssql_query) \
.option("user", ms_user) \
.option("password", ms_password) \
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
.load()
pg_url = "jdbc:postgresql://hostname:5432/database"
pg_user = "pg_username"
pg_password = "pg_password"
pg_table = "SCO.TBL_SENSORS"
jdbcDF.write.format("jdbc") \
.option("driver", "org.postgresql.Driver") \
.option("url", pg_url)\
.option("user", pg_user) \
.option("password", pg_password) \
.option("dbtable", pg_table) \
.mode("append") \
.save()
解决方案
推荐阅读
- javascript - 无法 POST 成功的 ajax 请求
- mysql - 使用聚合函数 mySQL 时不断出现错误
- git - 如何在 Mac 上使用 Git 和 NPM 安装此软件
- php - Symfony Doctrine 捕获连接异常
- java - 从另一个容器内的 Java 应用程序引用 docker 容器内的 MySQL 服务器
- reactjs - 我应该构建一个本地数据层/应用程序状态来维护 React Native/Firestore 应用程序中的状态吗?
- batch-file - 批处理:批处理文件终止时关闭可执行文件
- r - 是否有映射日期索引的 R 函数?
- google-colaboratory - 防止 Google Colab 进程断开连接
- react-native - 世博常量 deviceId 和 installationId 未定义