天天看點

如何跑通第一個 SQL 作業

作者 | 周凱波(寶牛),阿裡巴巴技術專家

本文由阿裡巴巴技術專家周凱波(寶牛)分享,主要介紹如何跑通第一個SQL。内容将從以下3個部分介紹:

1、SQL的基本概念

2、SQL的文法說明

3、SQL 實戰

一、SQL的基本概念

1.SQL 分類

SQL分為四類,分别是資料查詢語言(DQL)、資料操縱語言(DML)、資料定義(DDL)語言和資料控制語言(DCL)。今天将介紹前三種語言的使用。

如何跑通第一個 SQL 作業

接下來介紹幾個基本概念。

2.SQL 開發

如何跑通第一個 SQL 作業

● Scripts,即SQL文本。在SQL文本裡面可以寫上文介紹的前三種語言;

● Schema,即中繼資料。SQL裡面需要使用的表和函數,是通過Schema進行定義的;

● Artifacts,即UDF Jar包;

3.Catalog

在 Flink SQL裡,Catalog是管理中繼資料的。Catalog通過Catalog.DB.Table來定位一張表。除了DB和Table,Catalog還能注冊函數,如UDF、UDTF和UDAF。

如何跑通第一個 SQL 作業

在Flink Catalog裡,有三種Catalog實作:

● 第一個是GenericInMemoryCatalog,是記憶體版的Catalog。平常在使用 Flink SQL的時候,預設是記憶體版的Catalog。當程式運作結束,第二次重新運作的時候,會重新生成一個Catalog執行個體。

● 第二個是HiveCatalog,Flink裡比較好的支援了HiveCatalog,可以從Hive HMS裡讀取中繼資料,同時也可以往Hive裡系統資料庫,寫資料到Hive裡面去。

● 第三個Catalog是 VVP平台裡面開發的Catalog,即VvpCatalog,它實作了Flink Catalog的接口,底層是使用的資料庫。

4.Deployment

Deployment是一個作業的描述,目前有兩種任務類型,JAR和SQL。

如何跑通第一個 SQL 作業

Deployment上有更新政策(Upgrade strategy)和恢複政策(Restore strategy)。Upgrade strategy是指Deployment運作後,使用者可以對Deployment的參數進行修改,這個修改如何影響Deployment的運作就是由不同的更新政策決定的;Restore strategy 指啟動 Flink任務時,是否從 Savepoint/Checkpoint進行恢複就是不同的恢複政策。

Flink的版本和配置,常用的Flink的參數都可以在這裡進行配置。例如:Task Managers 數量,Jobmanager和Taskmanager 的 CPU 和記憶體等。

Deployment上除了作業描述外,還有期望狀态和實際狀态。期望狀态是指使用者所期望的目标狀态,例如當要将運作中的作業停止時,期望狀态就是Canceled;操作完成的實際運作狀态就是實際狀态。

總的來說,Deployment是一個任務的描述模闆。VVP平台内部的狀态機會根據Deployment的期望狀态和實際狀态來控制作業的實際運作。

5.Job

Deployment啟動時會生成一個Job,這個Job對應一個具體的 Flink Job。同一時間,一個Deployment上隻會有一個正在運作的Job。

二、SQL的文法說明

1.文法說明

首先看下圖的語句,分别是建立源表和建立結果表。

如何跑通第一個 SQL 作業
如何跑通第一個 SQL 作業

下圖是注冊函數。函數的注冊分為兩步,第一步上傳JAR包,然後在系統上可以勾選自動注冊;第二種是使用 Flink 文法進行手工注冊。

如何跑通第一個 SQL 作業

使用函數有兩種方式,第一是内置函數的使用,如下圖UPPER是 Flink 自帶的函數;第二種是自定義函數,像MyScalarFunc。

如何跑通第一個 SQL 作業

在VVP平台裡,也支援 Flink 裡的Temporary Table,可以将它了解為臨時表,隻在目前會話周期内有效。在下圖例子中,我們建立了兩個Temporary Table,讀取datagen_source表中的資料,輸出到blackhole_sink表。

如何跑通第一個 SQL 作業

下圖是Temporary View的文法示例。前面兩段是一樣的臨時表;第三條語句是建立了一個tmp_view,它代表從Datagen_source的查詢。在Flink裡面Temporary View可以了解為讓SQL的書寫變得更簡單,它不會對資料進行一個持久化,和資料庫裡面View概念是不一樣的。第四條語句是從 view裡面讀取資料并寫入到sink表裡。

如何跑通第一個 SQL 作業

下圖是Statement set的文法示例,這個文法目前在 Flink 1.11版本裡還沒有,但是在VVP平台做了一些支援。

如何跑通第一個 SQL 作業

如上圖,BEGIN STATEMENT SET和END這兩個語句之間可以寫多條 insert into語句。上圖的例子是讀取datagen_source 表往兩張sink表同時寫。這個語句送出後會啟動一個完整的Flink Job,裡面會有1個source和兩個sink。

2.SQL的應用範圍

如何跑通第一個 SQL 作業

Create Table,它注冊的表會寫入系統Catalog裡,在VVP平台上面會寫到VvpCatalog中,并進行持久化。好處是适合多個query共享中繼資料。

Create Temporary Table,臨時表。它會寫到記憶體版的Catalog裡,不會持久化。是以它适合不需要共享中繼資料的場景,隻給目前query使用。

Create Temporary View,主要目的是簡化SQL語句。如果不通過Create Temporary View,對于邏輯複雜的SQL寫起來會相當複雜,可讀性也很差。

Statement Set,适合需要輸出到多個下遊的場景。

三、SQL 實戰

接下來向大家展示銷量統計的執行個體。如下圖所示,需求是統計每小時成交量。

如何跑通第一個 SQL 作業

我們首先建立兩張表,一個是源表,一個是結果表。下圖是建立源表的語句,資料源來自kafka,然後定義watermark是5秒鐘。

如何跑通第一個 SQL 作業

下圖是結果表,也是一個kafka表。

下圖是查詢語句,從源表讀取資料後,會通過tumble window視窗聚合對資料做一個統計,這樣就求出了每小時的成交量。

如何跑通第一個 SQL 作業

1.實戰示範

打開VVP的界面,左側有SQL編輯器,在這個編輯器左邊有三欄,第一欄是Scripts,寫SQL文本的地方;第二欄是Schemas,用來定義中繼資料;第三欄是Artifacts, 用來注冊UDF。

如何跑通第一個 SQL 作業

首先定義一張datagen_source的表。點選右上角的驗證按鈕,驗證通過後點選旁邊的運作。點選運作之後,可以在下面看到運作的結果,運作成功後點選左側的Schemas,可以找到剛剛建立的datagen_source表。

如何跑通第一個 SQL 作業

然後再建立一張sink表,connector類型是blackhole。然後驗證并運作。

如何跑通第一個 SQL 作業

這樣兩張表都已經注冊到Catalog裡面去了,預設的Catalog名字是VVP,Database名字是Default。

如何跑通第一個 SQL 作業

接下來就可以寫SQL語句。比如說寫一條INSERT INTO語句,寫完之後點驗證并運作。在運作這條INSERT INTO語句時,系統會提示是否要建立一個SQL作業,點選确認,補充名稱等資訊,SQL作業就建立好了。

如何跑通第一個 SQL 作業

點選啟動這個作業,啟動過程中可以在頁面上看到關于這個作業的很多資訊和配置。

如何跑通第一個 SQL 作業

2.UDF實戰展示

UDF開發完成後會打一個JAR包,然後點SQL編輯器左側的Artifacts,然後點“+”号,将JAR 包上傳上來。

如何跑通第一個 SQL 作業

上傳完畢,完善JAR 包名稱等資訊後,點确認完成。JAR包上傳過程中,VVP系統會對JAR 包進行解析。解析之後系統會提示是否注冊,勾選需要注冊的内容,點選建立Function。

如何跑通第一個 SQL 作業

然後如下圖,上面就是已注冊的Function,下面是可用Function,可以選擇繼續注冊或關掉視窗。

如何跑通第一個 SQL 作業

如果不需要這個函數了,可以在頁面左側找到已經注冊的Function,點選右側尾部圖示,選擇Drop Function。若想重新注冊,有兩種方法,第一可以點選管理Function;第二通過 Flink的注冊函數手動注冊。

用注冊好的Function建立SQL作業。

在建立頁面下拉可以看到很多進階配置,隻修改自己需要的配置即可。

如何跑通第一個 SQL 作業

3.Temporary table的使用

上面的例子是注冊在Catalog裡的,如果不想每次都在Catalog裡面進行注冊,那就可以直接使用 Temporary table。

如下圖将table的建立和INSERT INTO全部寫在一起,這樣就可以直接建立一個新的SQL作業,而不用提前在Catalog裡注冊了。

如何跑通第一個 SQL 作業

4.Temporary View

将前面Temporary View例子頁面中的語句複制到VVP平台的SQL編輯器中,直接點選運作就可以建立一個作業。

如何跑通第一個 SQL 作業

5.Statement Set

将前面Statement Set例子頁面中的語句複制到編輯器中,直接點選運作就可以建立一個作業。啟動後,可以通過下圖看到運作情況,這個任務從一個源表中讀取資料輸出到了兩個不同的sink表中。

6.查詢實戰

将前面SQL 實戰中建立源表、結果表和查詢頁面的語句分别複制粘貼到VVP平台的SQL編輯器并啟動運作。從下圖可以看到這個讀寫kafka的任務運作起來了。

如何跑通第一個 SQL 作業