Flink SQL Client 是 Flink 自帶的一個命令行工具,允許用户以交互的方式編寫和提交 SQL 任務。

以下是進入該界面的步驟以及在面試中需要注意的細節:


1. 進入 Flink SQL Client 的步驟

要啓動 SQL Client,你首先需要有一個正在運行的 Flink 集羣(本地或遠程)。

  1. 啓動集羣(以本地為例): 在 Flink 安裝目錄下執行:
./bin/start-cluster.sh
  1. 啓動 SQL 客户端: 執行以下命令進入交互界面:
./bin/sql-client.sh

成功進入後,你會看到一個非常經典的 ASCII 藝術風格的松鼠(Flink Logo)


2. 兩種執行模式

“SQL Client 提交的任務是怎麼運行的?”

兩種模式:

  • 嵌入式模式 (Embedded Mode): 默認模式。SQL Client 進程本身就是一個簡易的驅動程序,直接與集羣通信。
  • 網關模式 (Gateway Mode): 通過 flink-sql-gateway

3. 進入界面後的常用指令

進入界面後,你可以執行以下命令來檢查環境:

指令

用途

HELP;

查看所有支持的 SQL 語法和命令

SHOW CATALOGS;

查看當前配置的元數據目錄

SET 'sql-client.execution.result-mode' = 'tableau';

將查詢結果以表格形式直接打印在控制枱

SET 'execution.runtime-mode' = 'streaming';

設置為流處理模式(默認)或 batch


4. 另一種“界面”:Flink Web UI

如果你的意思是可視化查看 SQL 任務的運行狀態,那麼應該進入 Flink Web UI

  1. 默認地址通常是:http://localhost:8081
  2. 在 Web UI 中,你不能直接編寫 SQL,但可以查看 SQL 任務轉換後的 拓撲圖 (Plan)、反壓 (Backpressure) 情況和 Checkpoint 狀態。

5. 進階:如何集成 Hive 或 Kafka?

如何通過配置文件進入 SQL 界面並加載持久化元數據?

  • SQL Client 配置文件: 在新版本中,可以通過 sql-gateway-defaults.yaml 或直接在啓動時指定 -i
  • Catalog 配置: 只有配置了 Hive Catalog,你進入 SQL 界面後才能看到以前創建過的表,否則 SQL Client 重啓後表信息會丟失。

我在 SQL Client 裏執行了一個 SELECT 查詢,為什麼控制枱一直轉圈不出結果?

  1. 檢查數據源: 是否有數據實時流入?
  2. 檢查結果模式: 默認模式可能是

changelog

  1. ,建議切換為

tableau

  1. 檢查資源: 檢查 Web UI,看 TaskManager 是否有足夠的 Slot 來運行這個 Query 任務。

你想了解如何通過 Flink SQL Gateway 在 Web 端(如 Zeppelin)通過圖形化界面寫 SQL 嗎?這在企業級開發中更常用。

 

想。

 

在企業級開發中,直接用命令行(SQL Client)的情況其實不多,更多是使用 Apache ZeppelinFlink SQL Gateway 這種圖形化或服務化的方式。


1. 為什麼企業更傾向於可視化 SQL 界面?

  • 多用户協作: 命令行不支持多人同時在線開發。
  • 結果持久化: 命令行關掉,查詢出的結果就沒了;Zeppelin 可以保存查詢歷史。
  • 可視化圖表: Flink SQL 查出的流數據,在 Zeppelin 裏可以直接轉成實時的折線圖或柱狀圖。

2. 通過 Zeppelin 連接 Flink SQL

Zeppelin 是目前 Flink 官方最推薦的可視化筆記本工具。

如何配置進入:

  1. 安裝配置:

zeppelin-site.xml

  1. 中配置

flink.interpreter

  1. ,指向你的 Flink 安裝目錄。
  2. 創建 Note: 進入 Zeppelin 網頁(默認

8080

  1. 編寫 SQL: 使用

%flink.ssql

  1. (Streaming SQL) 或

%flink.bsql


3. 通過 Flink SQL Gateway (中台化方案)

如果你的公司在做“實時計算平台”,那麼 SQL Gateway 就是核心。

  • 它的角色: 它像是一個“翻譯官”。它暴露 REST API,接收來自 Web 端的 SQL 代碼,然後把它提交給遠端的 Flink 集羣。
  • 優勢: 它可以管理 Session(會話)。這意味着你在這個界面定義的視圖(View)或臨時表,在另一個界面也能訪問到。

4. Flink SQL 執行流程

當你點擊界面上的“運行”按鈕時,底層發生了什麼?面試時按這個順序説:

  1. SQL 解析 (Parser): 將 SQL 文本解析為 SqlNode(抽象語法樹 AST)。
  2. 校驗 (Validator): 結合 Catalog(元數據)檢查表名、列名、數據類型是否存在。
  3. 優化 (Optimizer): Flink 使用 Apache Calcite 將 SqlNode 轉換成 RelNode,進行邏輯優化(如謂詞下推、剪枝)。
  4. 物理計劃生成: 將邏輯計劃轉換為 ExecNode
  5. 轉換 (Translate): 將 ExecNode 轉換成 Flink 底層的 Transformation(即 Java 代碼層次的算子)。
  6. 提交: 封裝成 JobGraph 發送到 JobManager。

5. Flink SQL相關問題

  • Flink SQL 如何做維表關聯(Lookup Join)?
  • 通常使用

FOR SYSTEM_TIME AS OF

  • 語法,這需要維表實現

LookupTableSource

  • Flink SQL 如何保證 Exactly-once?
  • 主要是通過開啓 Checkpoint。在 SQL 界面中,你可以通過

SET 'execution.checkpointing.interval' = '10s';

 

(airflow-venv) frank@ZZHPC:~$ sql-client.sh

                                   ▒▓██▓██▒
                               ▓████▒▒█▓▒▓███▓▒
                            ▓███▓░░        ▒▒▒▓██▒  ▒
                          ░██▒   ▒▒▓▓█▓▓▒░      ▒████
                          ██▒         ░▒▓███▒    ▒█▒█▒
                            ░▓█            ███   ▓░▒██
                              ▓█       ▒▒▒▒▒▓██▓░▒░▓▓█
                            █░ █   ▒▒░       ███▓▓█ ▒█▒▒▒
                            ████░   ▒▓█▓      ██▒▒▒ ▓███▒
                         ░▒█▓▓██       ▓█▒    ▓█▒▓██▓ ░█░
                   ▓░▒▓████▒ ██         ▒█    █▓░▒█▒░▒█▒
                  ███▓░██▓  ▓█           █   █▓ ▒▓█▓▓█▒
                ░██▓  ░█░            █  █▒ ▒█████▓▒ ██▓░▒
               ███░ ░ █░          ▓ ░█ █████▒░░    ░█░▓  ▓░
              ██▓█ ▒▒▓▒          ▓███████▓░       ▒█▒ ▒▓ ▓██▓
           ▒██▓ ▓█ █▓█       ░▒█████▓▓▒░         ██▒▒  █ ▒  ▓█▒
           ▓█▓  ▓█ ██▓ ░▓▓▓▓▓▓▓▒              ▒██▓           ░█▒
           ▓█    █ ▓███▓▒░              ░▓▓▓███▓          ░▒░ ▓█
           ██▓    ██▒    ░▒▓▓███▓▓▓▓▓██████▓▒            ▓███  █
          ▓███▒ ███   ░▓▓▒░░   ░▓████▓░                  ░▒▓▒  █▓
          █▓▒▒▓▓██  ░▒▒░░░▒▒▒▒▓██▓░                            █▓
          ██ ▓░▒█   ▓▓▓▓▒░░  ▒█▓       ▒▓▓██▓    ▓▒          ▒▒▓
          ▓█▓ ▓▒█  █▓░  ░▒▓▓██▒            ░▓█▒   ▒▒▒░▒▒▓█████▒
           ██░ ▓█▒█▒  ▒▓▓▒  ▓█                █░      ░░░░   ░█▒
           ▓█   ▒█▓   ░     █░                ▒█              █▓
            █▓   ██         █░                 ▓▓        ▒█▓▓▓▒█░
             █▓ ░▓██░       ▓▒                  ▓█▓▒░░░▒▓█░    ▒█
              ██   ▓█▓░      ▒                    ░▒█▒██▒      ▓▓
               ▓█▒   ▒█▓▒░                         ▒▒ █▒█▓▒▒░░▒██
                ░██▒    ▒▓▓▒                     ▓██▓▒█▒ ░▓▓▓▓▒█▓
                  ░▓██▒                          ▓░  ▒█▓█  ░░▒▒▒
                      ▒▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▓▓  ▓░▒█░

    ______ _ _       _       _____  ____  _         _____ _ _            _  BETA
   |  ____| (_)     | |     / ____|/ __ \| |       / ____| (_)          | |
   | |__  | |_ _ __ | | __ | (___ | |  | | |      | |    | |_  ___ _ __ | |_
   |  __| | | | '_ \| |/ /  \___ \| |  | | |      | |    | | |/ _ \ '_ \| __|
   | |    | | | | | |   <   ____) | |__| | |____  | |____| | |  __/ | | | |_
   |_|    |_|_|_| |_|_|\_\ |_____/ \___\_\______|  \_____|_|_|\___|_| |_|\__|

        Welcome! Enter 'HELP;' to list all available commands. 'QUIT;' to exit.

Command history file path: /home/frank/.flink-sql-history

Flink SQL> SHOW CATALOGS;
+-----------------+
|    catalog name |
+-----------------+
| default_catalog |
+-----------------+
1 row in set

Flink SQL>

 

(airflow-venv) frank@ZZHPC:~$ sql-gateway.sh
Starting sql-gateway daemon on host ZZHPC.