【问题标题】:separate select clause and insert clause from sql string从 sql 字符串中分离 select 子句和 insert 子句
【发布时间】:2017-12-31 18:13:28
【问题描述】:

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

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

我可以在 spark sql 中运行上面的 sql 问题是与具有 (merge small files= true) 选项的 hive 相比,它会创建小文件等...这在 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 字符串中分离出来?

谢谢

【问题讨论】:

    标签: java regex scala


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2012-01-26
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多