如何使用 gzip basXml 作为 python 格式反编译 SAP ERP 中的 blob 字段?就我而言,我想从 ODQDATA 表中读取“xdata”字段。
我尝试使用 gzip 和 zlib 解压该对象,但没有成功(BadGzipFile:不是 gzip 压缩文件)。我自己也没什么想法了。
import zlib
import gzip
import base64
jdbcHostname = "xxx"
jdbcPort = "xx"
jdbcUrl = f"jdbc:sap://{jdbcHostname}:{jdbcPort}"
jdbcUsername = "xx"
jdbcPassword = "xx"
query="SELECT * FROM SAPHANADB.ODQDATA LIMIT 1"
df = spark.read \
.format("jdbc") \
.option("url", jdbcUrl) \
.option("query", query) \
.option("driver", "com.sap.db.jdbc.Driver") \
.option("user", jdbcUsername) \
.option("password", jdbcPassword) \
.load()
#for row in df.collect():
for row in df.collect():
blob_data = row["XDATA"]
data = gzip.decompress blob_data)
尝试一下
import gzip
import base64
import pyspark
import xml.etree.ElementTree as ET
jdbcHostname = "xxx"
jdbcPort = "xx"
jdbcUrl = f"jdbc:sap://{jdbcHostname}:{jdbcPort}"
jdbcUsername = "xx"
jdbcPassword = "xx"
query="SELECT * FROM SAPHANADB.ODQDATA LIMIT 1"
spark = pyspark.sql.SparkSession.builder.getOrCreate()
df = spark.read \
.format("jdbc") \
.option("url", jdbcUrl) \
.option("query", query) \
.option("driver", "com.sap.db.jdbc.Driver") \
.option("user", jdbcUsername) \
.option("password", jdbcPassword) \
.load()
for row in df.collect():
blob_data = row["XDATA"]
decoded_data = base64.b64decode(blob_data)
decompressed_data = gzip.GzipDecompressor().decompress(decoded_data)
xml_tree = ET.fromstring(decompressed_data)
xdata = xml_tree.find("xdata").text
print(xdata)