数据表SQL查询

使用说明

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万平方千米的行政区以及它所管辖的机场信息。