天天看點

MaxCompute SQL與标準SQL的主要差別及解決方法

不支援事物(沒有commit和rollback,建議代碼具有等幂性支援重跑,不推薦使用insert into,推薦insert overwrite寫入資料)。

不支援索引和主外鍵限制。

不支援自增字段和預設值。如果有預設值,請在資料寫入時自行指派。

單表支援6萬個分區。

double類型因為存在精度問題,不建議在關聯時候進行直接等号關聯兩個double字段。一個比較推薦的做法是把兩個數做下減法,如果差距小于一個預設的值就認為是相同,比如abs(a1- a2) < 0.000000001。

目前産品上已經支援高精度的類型decimal。但如果有更高精度要求的,可以先把資料存成string類型,然後使用udf來實作對應的計算。

為了防止出現各種預期外的錯誤,建議如果有2個不同的字段類型需要做join,還是自己先把類型轉好了後再join,同時還能讓代碼更容易維護。

關于日期型和字元串的隐式轉換。在需要傳入日期型的函數裡如果傳入一個字元串,字元串和日期類型的轉換根據yyyy-mm-dd hh:mi:ss格式進行轉換。如果是其他格式請參考内建函數to_date部分。

最直覺的差別就是insert into/overwrite後面有個關鍵字table。

資料插入表的字段映射不是根據select的别名做的,而是根據select的字段的順序和表裡的字段的順序。

group by查詢裡的select字段,要麼是group by的分組字段,要麼需要使用聚合函數。這裡可以從邏輯角度了解,假如發現一個非分組列同一個group by key裡的資料有多條,那麼不使用聚合函數的話就沒辦法展示了。

子查詢必須要有别名。查詢帶個别名是個好習慣。

MaxCompute SQL與标準SQL的主要差別及解決方法