我有一个数据框正试图像下面这样存储到数据库中
oversampled_df.write \
.format('jdbc') \
.option('truncate', 'true') \
.options(url=EXT_DB_URL,
driver='oracle.jdbc.driver.OracleDriver',
dbtable=DEST_DB_TBL_NAME) \
.mode('overwrite') \
.save()
然而,它一直在列名中添加双引号"
,我如何删除它以便能够从表中查询而不包括它们,即
代替
select "description" from schema.table;
成为
select description from schema.table;
答案 0 :(得分:0)
我也遇到了同样的问题,我的解决方法是
CREATE TABLE schema_name.table_name(
table_catalog VARCHAR2(255 BYTE),
table_schema VARCHAR2(255 BYTE)
)
oversampled_df.write.format('jdbc').options(
url='jdbc:oracle:thin:schema/user@ip:port/dbname',
driver='oracle.jdbc.driver.OracleDriver',
dbtable='schema_name.table_name',
user='user',
password='password').option("truncate", "true")\
.mode('overwrite').save()
为我工作,希望对我有帮助
答案 1 :(得分:0)
从它的声音来看,Oracle 似乎将您的列名视为带引号的标识符来查询它,您需要它使用双引号并且它也区分大小写。我发现的一个解决方法是在保存到 Oracle 之前确保您的 DataFrame 中的所有列都大写(它们也可以有数字和下划线),以便将它们视为未加引号的标识符。它们,您应该能够以小写或大写形式查询它们,例如说明或说明,无需双引号。