更新时间:2026-07-03 GMT+08:00
分享

FROM

功能描述

FROM子句用于指定查询的数据源。Spark 4.0增强了FROM子句,支持LATERAL子查询、TABLE关键字、VALUES行构造等多种数据源形式。

语法格式

FROM table_reference [, ...]

其中 table_reference 为:

{ table_name [ TABLE ] [ alias ]
  | join_table
  | LATERAL ( subquery ) [ alias ]
  | ( subquery ) [ alias ]
  | VALUES ( { expression } [, ...] ) [, ...] [ alias ]
  } 

join_table 为:

table_reference [ join_type ] JOIN table_reference [ ON join_condition | USING ( column [, ...] ) ] 

join_type 为:

{ INNER | CROSS | LEFT [ OUTER ] | RIGHT [ OUTER ] | FULL [ OUTER ] | LEFT SEMI | LEFT ANTI }

参数说明

参数

说明

table_name

表名,指定要查询的表。可使用TABLE关键字引用表值。

alias

为表或子查询指定别名。子查询必须指定别名。

LATERAL (subquery)

LATERAL子查询,允许子查询引用同一FROM子句中先前出现的表的列。Spark 4.0增强支持。

(subquery)

嵌套子查询,子查询结果作为中间过渡表。子查询必须指定别名。

VALUES

行构造器,直接构造行数据作为数据源。

join_type

连接类型,包括INNER、CROSS、LEFT OUTER、RIGHT OUTER、FULL OUTER、LEFT SEMI、LEFT ANTI。

ON join_condition

JOIN连接条件。

USING (column)

使用同名字段进行JOIN的简写方式。

注意事项

  • 所要查询的表必须是已经存在的表,否则会出错。
  • FROM嵌套子查询中,子查询必须指定别名。
  • LATERAL子查询可以引用同一FROM子句中左侧表的列,普通子查询不能引用外部列。

示例

子查询作为数据源:

SELECT DISTINCT name FROM (SELECT name FROM student_info   JOIN course_info ON student_info.courseId = course_info.courseId) temp; 

LATERAL子查询引用外部列:

SELECT * FROM orders o,   LATERAL (SELECT * FROM order_items WHERE order_id = o.id) items; 

VALUES构造数据:

SELECT * FROM VALUES (1, 'a'), (2, 'b'), (3, 'c') AS t(id, name); 

LATERAL VIEW与explode配合:

SELECT name, course FROM student   LATERAL VIEW EXPLODE(courses) t AS course;

相关文档