使用说明
SQL查询工具将对数据表(DataFrame)执行Spark SQL查询。Spark SQL查询不仅可以实现对数据的过滤,还可以对数据做复杂的统计和分析,以及可以使用空间操作函数对空间对象进行计算等,操作灵活、便捷,具有较高的操作效率。
数据表(DataFrame)是Spark SQL引入的结构化数据存储方式,使我们能使用SQL语句进行分布式数据的读取和计算,DataFrame 的底层仍然是RDD,数据表SQL查询最终是在Spark中执行,即在内存中完成计算,同时,省去了中间结果的存储,可以提供更加便捷的数据处理能力,适合在复杂在业务流程中使用。
SQL查询工具一般用于对Spark SQL查询的中间结果进行进一步查询计算,也就是对“数据集SQL查询”工具的结果进行进一步查询计算,将“数据集SQL查询”工具的输出结果数据表(DataFrame),作为“数据表SQL查询”工具的输入数据。
Spark SQL查询,不仅可以使用Spark SQL原生的查询能力,而且可以使用SuperMap扩展的空间数据操作能力(扩展是基于Spark SQL的用户自定义函数。(User-defined Function, UDF),提供一系列满足OGC标准的OpenGIS Simple Feature访问-SQL规范的地理空间数据操作UDF函数,这些函数是以st_开头,具体参见“数据集SQL查询”工具页面的附表2:地理空间数据操作UDF函数。)
参数说明
参数名 | 默认值 | 参数释义 | 参数类型 |
---|---|---|---|
查询数据表 | 指定待查询的数据表(DataFrame)。 数据表SQL查询工具一般用于对Spark SQL查询的中间结果进行进一步查询计算,也就是对“要素数据集SQL查询”工具的结果进行进一步查询计算,“要素数据集SQL查询”工具的输出结果为数据表(DataFrame),该输出将作为“数据表SQL查询”工具的输入数据。 |
DataFrame | |
Spark SQL查询语句 | Spark SQL查询语句,如 select * from viewName where id > 180。有关Spark SQL查询语句的详细示例请参见下文附表1。 | String | |
查询数据表视图别名 (可选) |
指定待查询的数据表(DataFrame)视图别名,用于在Spark SQL查询语句中引用该数据表,如:select * from viewName,其中viewName即为该参数指定的视图别名。 | String | |
关联查询数据表 (可选) |
关联查询的数据表(DataFrame),该参数由“要素数据集SQL查询”工具的输出结果传入。 | DataFrame | |
关联查询数据表视图别名 (可选) |
关联查询数据表视图别名,用于Spark SQL查询语句中引用该数据表,如:select * from joinViewName,其中joinViewName即为该参数指定的视图别名。 | String | |
扩展关联查询数据表 (可选) |
扩展关联查询数据表(DataFrame),该参数由“要素数据集SQL查询”工具的输出结果传入。 | DataFrame | |
扩展关联查询数据表视图别名 (可选) |
扩展关联查询查询数据表视图别名,用于Spark SQL查询语句中引用该数据表,如:select * from joinExtraViewName,其中joinExtraViewName即为该参数指定的视图别名。 | String |
输出结果
SQL查询工具的输出结果为满足指定查询条件的数据,数据以DataFrame(数据表)的形式进行存储。
数据表(DataFrame)是Spark SQL引入的结构化数据存储方式,使我们能使用SQL语句进行分布式数据的读取和计算,DataFrame的底层仍然是RDD。
附表1:Spark SQL 查询语句示例
备注说明:以下查询语句示例中所使用的字段“the_geom”、“smgeometry”、“geom”均为空间数据的几何字段,不同数据库对于空间数据存储的几何字段名称不同,所以要根据实际数据情况填写几何字段的名称。
查询语句示例 | 详细说明 |
---|---|
select dltb.DLMC,starea(dltb.thegeom) as tb_area from dltb where dltb.DLMC=“水田” | 通过过滤获得地类图斑数据中的水田,同时,计算出各水田地块的面积。 |
select dltb.DLMC, SUM(starea(dltb.thegeom)) as sumarea from dltb Group by dltb.DLMC Order by sumarea desc | 按照土地类型分类汇总,计算各土地类型的总面积,并按照面积大小降序显示查询结果。 |
select dltb.QSDWMC, SUM(starea(dltb.thegeom)) as sumarea from dltb where dltb.DLMC=“水田” Group by dltb.QSDWMC Order by sumarea desc | 按照土地行政归属,计算各村水田的总面积,并按照面积大小降序显示查询结果。 |
select dltb.DLMC, COUNT(dltb.DLMC) as tbcount from dltb Group by dltb.DLMC Order by tbcount desc | 计算各土地类型的图斑总数,并按照总数大小降序显示查询结果。 |
select testr.Name from testr where stintersects(testr.thegeom, stmakeBBOX(103, 17, 119,27)) | 查询与指定范围相交的对象。 |
select dbcname,province, starea(ProvinceR.geom) from Airportpt join ProvinceR on Airportpt.Province = ProvinceR.name where starea(ProvinceR.geom)> 300000000000 | 使用行政区域数据与全国机场数据进行关联查询,查询面积大于30万平方千米的行政区以及它所管辖的机场信息。 |