Java中使用正则表达式:(1)\\表示要插入正则表达式的反斜线,并且后面的字符有特殊意义。所以正则表达式\d在实际使用的时候就写成了 \\d。(2)要正确理解Matcher类中group组的概念,组是用括号划分的正则表达式,可以通过编号来引用组,相当于“子表达式”。由于刚开始对Java正则表达式中的组的概念不清晰,导致理解困难。当将“组”的概念与“子表达式”对应起来之后,理解matcher的group就没有障碍了。
对于需求2:现在测试用的数据库是mysql,但最终要用的数据库的Spark Sql。这2种数据库支持的sql语句还是有所差异的。我没找到Spark Sql支持的sql语句的格式说明。而且对sql语句进行语法分析也是比较复杂的,所以目前就先看看Spark Sql的源码,看看能不能在启动数据库执行sql查询之前使用Spark Sql里面的SqlParser解析sql语句、检查sql语句的合法性。
Spark Sql的总体架构:主要包括两部分,一是生成SchemaRDD,二是执行查询。总体上由四个模块组成:core、catalyst、hive、hive-Thriftserver。core:处理数据的输入输出,从不同的数据源获取数据(RDD、Parquet、json等),将查询结果输出成schemaRDD;catalyst:处理查询语句的整个处理过程,包括解析、绑定、优化、物理计划等,说其是优化器,还不如说是查询引擎;hive:对hive数据的处理hive-ThriftServer:提供CLI和JDBC/ODBC接口。所以我需要重点了解的是catalyst模块中查询语句的解析过程。