sql apache-spark subquery apache-spark-sql

¿SparkSQL admite subconsultas?



apache-spark subquery (2)

https://issues.apache.org/jira/browse/SPARK-4226

Hay una solicitud de extracción para implementar esa característica ... supongo que podría aterrizar en Spark 2.0.

Estoy ejecutando esta consulta en Spark Shell pero me da un error,

sqlContext.sql( "select sal from samplecsv where sal < (select MAX(sal) from samplecsv)" ).collect().foreach(println)

error:

java.lang.RuntimeException: [1.47] error: ``) '''' esperado pero identificador MAX encontrado

seleccione sal de samplecsv donde sal <(seleccione MAX (sal) de samplecsv) ^ en scala.sys.package $ .error (package.scala: 27) ¿Alguien puede explicarme, gracias


Características planificadas :

  • SPARK-23945 (Column.isin () debe aceptar un DataFrame de una sola columna como entrada).
  • SPARK-18455 (Soporte general para el procesamiento de subconsultas correlacionadas).

Spark 2.0+

Spark SQL debe admitir subconsultas correlacionadas y no correlacionadas. Ver SubquerySuite para más detalles. Algunos ejemplos incluyen:

select * from l where exists (select * from r where l.a = r.c) select * from l where not exists (select * from r where l.a = r.c) select * from l where l.a in (select c from r) select * from l where a not in (select c from r)

Desafortunadamente, por ahora (Spark 2.0) es imposible expresar la misma lógica usando DataFrame DSL.

Chispa <2.0

Spark admite subconsultas en la cláusula FROM (igual que Hive <= 0.12).

SELECT col FROM (SELECT * FROM t1 WHERE bar) t2

Simplemente no admite subconsultas en la cláusula WHERE En general, las subconsultas arbitrarias (en particular las subconsultas correlacionadas) no se pueden expresar usando Spark sin promocionar la unión cartesiana.

Dado que el rendimiento de las subconsultas suele ser un problema importante en un sistema relacional típico y cada subconsulta puede expresarse utilizando JOIN aquí no hay pérdida de función.