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,st_area(dltb.the_geom) as tb_area from dltb where dltb.DLMC="水田" 通过过滤获得地类图斑数据中的水田,同时,计算出各水田地块的面积。
select dltb.DLMC, SUM(st_area(dltb.the_geom)) as sum_area from dltb Group by dltb.DLMC Order by sum_area desc 按照土地类型分类汇总,计算各土地类型的总面积,并按照面积大小降序显示查询结果。
select dltb.QSDWMC, SUM(st_area(dltb.the_geom)) as sum_area from dltb where dltb.DLMC="水田" Group by dltb.QSDWMC Order by sum_area desc 按照土地行政归属,计算各村水田的总面积,并按照面积大小降序显示查询结果。
select dltb.DLMC, COUNT(dltb.DLMC) as tb_count from dltb Group by dltb.DLMC Order by tb_count desc 计算各土地类型的图斑总数,并按照总数大小降序显示查询结果。
select test_r.Name from test_r where st_intersects(test_r.the_geom, st_makeBBOX(103, 17, 119,27)) 查询与指定范围相交的对象。
select dbcname,province, st_area(Province_R.geom) from Airport_pt join Province_R on Airport_pt.Province = Province_R.name where st_area(Province_R.geom)> 300000000000 使用行政区域数据与全国机场数据进行关联查询,查询面积大于30万平方千米的行政区以及它所管辖的机场信息。