ETL 指令碼書寫規範

2021-06-27 05:14:45 字數 3321 閱讀 8561

2014/11/24

1.  前言

為了統一軟體開發過程中關於sql(structured query language)編碼的格式,使編碼人員編寫sql**遵從特定的風格,並養成良好的開發習慣,從而增強**的可讀性,便於交流和維護,特此收集。

1.1邊界定義

規範主要應用於teradata sql 

的dml

以下幾個語句編寫約定

select  語句;

insert  語句;

delete 語句;

邏輯判斷語句;

型別轉換語句;

以及相關的teradata 

函式、

teradata 資料倉儲專案實施過程中資料表現形態約定等內容

1.2 原則定義

1、 要求**行清晰、整齊,具有一定的可觀賞性;

2、 **編寫要充分考慮執行速度最優的原則;

3、 **行整體層次分明、結構化強;

4、 **中應有必要的注釋以增強**的可讀性;

5、 規範要求非強制性約束**開發人員的**編寫行為,在實際應用中在不違反常規要求的前提下允許存在可理解的偏差。

2. 格式編排規範

2.1 注釋約定

對於較為複雜的資料操作例程應有充分的注釋,註明實現的功能,業務邏輯關係輸入輸出關係等內容,對於修改指令碼,需在注釋中標明修改人、修改時間。

注釋中應包含以下內容:

指令碼頭注釋:

指令碼頭的注釋中需要註明修改人、修改時間、修改目的。

指令碼行注釋:

對於指令碼中的硬編碼需要註明含義。

單行或多行注釋都用 』 /*   */』 來標識。

注釋中不可出現「@

」符號。

指令碼塊注釋:

對於指令碼塊的注釋,修改人需要注釋掉原指令碼,對新增的指令碼需要在第一行的注釋中註明「start

」,在最後一行註明「

對於較為複雜的過程必須註明**實現的功能以及相關的建立、修改記錄

在主體上有分割的**行建議加一空白行以示區分;

2.2 

(1). **段中應用到的所有teradata 

關鍵字、保留字都應大寫

可以使用 pl/sql developer:

tools  ==>

edits ==> 

keyword case ==>

uppercase

(2).  表名、檢視名、巨集和儲存過程名、欄位名、字段別名以首字大寫加下劃線連線符來命名。

(3). 四個空格乙個縮排

(4).  對應的括號通常要求在同一列的位置

(5). 行寬不超過120字元

(6). 同一級別的子句要求對齊

(7). 逗號放在每行的開頭

(8). 分號放在sql語句的最後,獨佔一行

3. 語法及資料操作約定

case語句:

用好子查詢是提高**執行速度的乙個好方法,採用子查詢來縮小結果集之間的操作將使系統運算的開銷更小,當然teradata

的優化器也會優化**的處理過程以最優的路徑來完成使用者的需求,但我們在編寫**時也要考慮效能的優化。子查詢巢狀在

teradata

資料倉儲系統開發中是經常要用到的,因此**的分層編排就非常重要。

表別名定義:

臨時表的命名按照如下形式:

vt_ + 普通表名 [+功能]

「vt」表示該錶為臨時表,「普通表名」就是普通形式的表名,「功能」為可選項

,一般可用

pre、

cur、

ins、

del、

upd等來表示.

在sql

語句中引用變數時,要在變數名兩端加花括號

對日期變數的引用要在單引號內,如'$'

對pdata

區中的表操作庫名要用變數,不可以寫死。對

stage

區中的表一般直接寫庫名

null 的處理

zeroifnull (數字型字段)或者

coalesce (數字型字段,0)或

coalesce (字元字段,』『)

cast       (日期型字段        as   date format 'yyyymmdd')

說明:通過以上函式處理後,如果字段值為null

將返回 0值。

case 

when ( substr (id,strat_point, len) ( casespecific)) ='gt' then '1'

cast(trade_date as date format 'yyyymmdd')

=cast(str as date format 'yyyymmdd')

chars 取字元長度函式,需要對字段先trim,否則返回對應欄位的最大長度。

對於全表刪除,最後都要有all

,且不需要和後面的

insert

組成多語句提交。

4. etl載入策略規範

5. 常用td sql 知識介紹

q:除刪除表的sql

語句外,每個

sql結束應該有

.if errorcode <> 0 then .quit 12;

判斷語句。

在資料倉儲系統專案開發中不建議使用update

語句來進行資料的更新操作,可以採用替代的中間過度表完成表中資料的重新組織,從而實現原表資料值的更新。

一. 字段連線

需檢查連線(||

)出來的結果中間有沒有存在空格,如有空格需要特殊處理。

一. union使用

a、union

的時候所有字段定義均以第乙個集合定義的為準,導致後面的集合如果定義的字元長度比第乙個集合長,就會按照第乙個集合定義的字元長度截斷。                      

b、除非是特殊需要,建議採用多個

insert

代替union。

shell指令碼書寫規範

n年後的第一更,這裡主要記錄一些平時自己不太注意的點 usr bin env bash 2.一行 太長,需要用 進行分行,看起來更美觀 configure prefix usr sbin path usr sbin nginx conf path etc nginx nginx.conf 3.在指令...

Shell指令碼書寫總結

指令碼開頭必須有 bin sh 指令碼結束後用 chmod x filename 修改指令碼使用許可權 變數定義 變數名 值 在變數名之前加乙個 就可以取出變數值 bin sh 對變數賦值 a hello world 列印變數a的值 echo a is a num 2 echo this is th...

hive transform指令碼書寫問題

問題描述 集群環境發生變化,原來python版本2 7,在其上寫的udf.py 用python寫的udf 如下執行正常 add file home users readlines.py select transform shw using python readlines.py as shw big...