Flink SQL 查询解析

肖钟城
  • 大数据技术栈
  • Flink
大约 2 分钟

Flink SQL 查询解析

With语法

WITH提供了一种方法来编写辅助语句,以便在较大的查询中使用。这些语句通常被称为公共表表达式(Common Table Expression, CTE),可以认为它们定义了仅为一个查询而存在的临时视图。

WITH语句的语法是:

WITH <with_item_definition> [ , ... ]
SELECT ... FROM ...;

<with_item_defintion>:
    with_item_name (column_name[, ...n]) AS ( <select_query> )

下面的示例定义了一个公共表表达式orders_with_total,并在一个GROUP BY查询中使用它。

WITH orders_with_total AS (
    SELECT order_id, price + tax AS total
    FROM Orders
)
SELECT order_id, SUM(total)
FROM orders_with_total
GROUP BY order_id;

SELECT & WHERE表达式

SELECT语句的一般语法是:

SELECT select_list FROM table_expression [ WHERE boolean_expression ]

table_expression指向任何数据源。它可以是一个现有的表、视图或VALUES子句、多个现有表的连接结果或一个子查询。假设这个表在目录中可用,下面将从Orders中读取所有行。

SELECT * FROM Orders

select_list规范意味着查询将解析所有列。但是,在生产环境中不鼓励使用,因为它使查询在编目更改时不够健壮。相反,select_list可以指定可用列的子集,或者使用所述列进行计算。例如,如果Orders有名为order_id、price和tax的列,你可以写以下查询:

SELECT order_id, price + tax FROM Orders

查询还可以使用VALUES子句使用内联数据。每个元组对应一行,可以提供别名来为每个列分配名称。

SELECT order_id, price FROM (VALUES (1, 2.0), (2, 3.1))  AS t (order_id, price)

可以基于WHERE子句对行进行过滤。

SELECT price + tax FROM Orders WHERE id = 10

此外,可以对单行的列调用内置和用户定义的标量函数。用户定义函数在使用前必须在目录中注册。

SELECT PRETTY_PRINT(order_id) FROM Orders
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.14.1