从sql string中分离select子句和insert子句

时间:2017-12-30 21:54:53

标签: java regex scala

我正在尝试使用上述方法解决spark sql小文件问题,例如在我的组织中用户传入sql语句。

insert overwrite table x partition (column1) select * from y;

我可以在spark sql中运行上面的sql问题是它与hive相比创建了小文件,而hive有(merge small files = true)选项等...它不能在spark sql中工作。

我想出了一个解决方法,就像拿用户sql语句并分成两个部分select子句和insert子句,从select子句创建Dataframe首先得到估计大小并计算输出文件并插入到目标表下面就是例子

val df=sqlContext.sql(select * from y)
val size=SizeEstimator.estimate(df)
val outputFiles=size/256000
df.coleasce(outputFiles).wirte.mode.Append("x partition (column1)")

Java / Scala中是否有正则表达式函数或库可以将select子句和insert子句与sql字符串分开?

由于

1 个答案:

答案 0 :(得分:0)

我会使用以下正则表达式:

(.+?) (?=select)(.+)

第一个捕获组将包含INSERT语句,第二个捕获组将包含SELECT语句。当然,建议采用不区分大小写的方法。您可以看到有效的演示here