【问题标题】:are nested queries supported in spark sql?spark sql 支持嵌套查询吗?
【发布时间】:2021-05-12 11:54:51
【问题描述】:

我做了一张这样的桌子

spark.sql("""create table temp stored as parquet TBLPROPERTIES('parquet.compression'='snappy') AS...""")

我可以查询表格。但是,当我在子查询中使用此表时,例如

spark.sql("""
SELECT DISTINCT 
...
AND col in (select * from temp)
...
""")

我收到此错误

org.apache.spark.sql.AnalysisException: Table or view not found: `temp`

这是火花的限制吗? 原始表名和列名不用于保密

【问题讨论】:

  • 当您不指定数据库时,将使用default 一个。您确定在创建表和选择时使用了正确的数据库吗?

标签: sql apache-spark pyspark apache-spark-sql


【解决方案1】:

是的,SparkSQL 支持嵌套查询。

由于您没有给出明确的示例,请参阅下面的示例。 考虑下面由create语句创建的数据集,表名temp

+---+-------------+------+
| id|         name|gender|
+---+-------------+------+
|  1|   John Smith|  Male|
|  2|   John Smith|  null|
|  3|Rebecca Davis|Female|
|  4|   Paul Adams|  Male|
|  5|         null|  null|
+---+-------------+------+

要获取名称恰好出现一次的记录,您可以编写如下内容,

spark.sql("""SELECT T.* FROM temp AS T 
              RIGHT JOIN 
              (SELECT name, COUNT(name) AS count_name FROM temp GROUP BY name HAVING count_name = 1) AS sq 
              ON sq.name=T.name""")

这会给你,

+---+-------------+------+
| id|         name|gender|
+---+-------------+------+
|  3|Rebecca Davis|Female|
|  4|   Paul Adams|  Male|
+---+-------------+------+

对于您的示例,我建议再次检查查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    相关资源
    最近更新 更多