如何解析sql语句插入以使用pyspark获取值

Posted

技术标签:

【中文标题】如何解析sql语句插入以使用pyspark获取值【英文标题】:How to parse sql statement insert into to get values with pyspark 【发布时间】:2020-02-02 03:12:21 【问题描述】:

我有一个带有几个insert into 的 sql 转储,如下所示

query ="INSERT INTO `temptable` VALUES (1773,0,'morne',0),(6004,0,'ATT',0)"

我试图只获取数据框中的值

(1773,0,'morne',0)
(6004,0,'ATT',0)

我试过了

spark._jsparkSession.sessionState().sqlParser().parsePlan(query) 

得到

'InsertIntoTable 'UnresolvedRelation `temptable`, false, false
+- 'UnresolvedInlineTable [col1, col2, col3, col4], [List(1773, 0, 
morne, 0), List(6004,0, 0, ATT, 0)]

但我不知道如何检索那些价值列表

有没有办法不用蜂巢?

【问题讨论】:

【参考方案1】:

如果您想从多个插入语句中仅获取值列表,那么您可以在下面尝试

listOfInserts = [('''INSERT INTO temptable VALUES (1773,0,'morne',0),(6004,0,'ATT',0)''',),('''INSERT INTO temptable VALUES (1673,0,'morne',0),(5004,0,'ATT',0)''',)]

df = spark.createDataFrame(listOfInserts, ['VALUES'])

from pyspark.sql.functions import substring_index

df.select(substring_index(df.VALUES, 'VALUES', -1).alias('right')).show(truncate = False)

【讨论】:

是的,我试图在每个列表的行中仅获取 df 中的值,例如 +----+----+----+ ----+ |col1|col2|col3|col4| +----+----+----+----+ |1773| 0|早| 0| |6004| 0| ATT| 0| |1773| 0|早| 0| |6004| 0| ATT| 0| +----+----+----+----+

以上是关于如何解析sql语句插入以使用pyspark获取值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pyspark 中使用“不存在”的 SQL 条件?

sql语句从一张表查询一个字段值插入另一个表中

在ibatis和mysql环境下使用insert如何获取返回值

如何创建 SQL 存储过程以插入多个值

用sql语句如何获取当前时间,如何通过写sql语句改变数据库中的值如何通过写sql语句把数据从数据中提取出来

Access SQL:从插入语句或从 DAO.QueryDef 获取受影响记录的标识值