日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

與標準SQL的主要區別及解決方法

本文為您列舉MaxCompute SQL與標準SQL的區別及常見問題解決方法。

MaxCompute SQL與標準SQL的基本區別

主要區別

問題現象

解決方法

應用場景

不支持事務(不支持Commit和Rollback,不推薦使用INSERT INTO)。

建議代碼具備冪等性,支持重新執行。推薦您使用INSERT OVERWRITE寫數據。

不支持索引和主鍵約束。

無。

部分字段不支持默認值或默認函數。

如果字段有默認值,您可以在數據寫入時自行賦值。MaxCompute支持在創建表時,對BIGINT、DOUBLE、BOOLEAN和STRING類型的字段添加默認值。

不支持自增字段。

無。

表分區

單表最多支持6萬個分區。超過6萬個分區會報錯。

選擇合適的分區列,減少分區數。

一次查詢輸入的分區不能超過1萬個,否則會報錯。如果是2級分區且查詢時只根據2級分區進行過濾,總的分區數大于1萬也可能導致報錯。

解決方法請參見執行INSERT INTO或INSERT OVERWRITE操作時,報錯a single instance cannot output data to more than 10000 partitions,如何解決?

精度

DOUBLE類型存在精度問題。

不建議直接使用等于號(=)關聯兩個DOUBLE字段。建議將兩個數相減,如果差距小于一個預設的值,則認為兩個數是相同的。例如ABS(a1-a2)<0.000000001

雖然MaxCompute支持高精度類型DECIMAL,但是有更高精度的要求。

如果有更高的精度要求,您可以先把數據存儲為STRING類型,然后使用UDF實現對應的計算。

數據類型轉換

出現各種預期外的錯誤,代碼維護問題。

如果有2個不同的字段類型需要執行JOIN操作,建議您先轉換字段類型再執行JOIN操作。

日期類型和字符串的隱式轉換。

如果在需要傳入日期類型的函數中傳入一個字符串,字符串和日期類型根據yyyy-mm-dd hh:mi:ss格式進行轉換。

DDL與DML的區別及解決方法

主要區別

問題現象

解決辦法

表結構

不能修改分區列列名,只能修改分區列對應的值。

解決方案請參見分區和分區列的區別是什么?

支持增加列,但是不支持刪除列及修改列的數據類型。

解決方案請參見如何修改列的數據類型?如何刪除列?

INSERT

MaxCompute SQL需要在INSERT INTO或INSERT OVERWRITE后加關鍵字TABLE。

無。

數據插入表的字段映射不是根據SELECT的別名執行,而是根據SELECT字段的順序和表中字段的順序執行映射。

無。

UPDATE和DELETE

僅支持對Transactional表執行UPDATE和DELETE語句。

解決方案請參見如何刪除MaxCompute表或分區中的數據?如何更新MaxCompute表或分區中的數據?

SELECT

MaxCompute SQL最多支持6張小表的MAPJOIN,并且連續JOIN的表不能超過16張。

解決方案請參見在執行JOIN操作時,報錯Maximum 16 join inputs allowed,如何解決?

IN和NOT IN

IN、NOT IN、EXISTS和NOT EXISTS,后面的子查詢返回的分區數據量不能超過1000條。

解決方案請參見在執行MaxCompute SQL過程中,使用NOT IN后面接子查詢,子查詢返回的結果是上萬級別的數據量,但當IN和NOT IN后面的子查詢返回的是分區時,返回的數量上限為1000。在必須使用NOT IN的情況下,該如何實現此查詢?。如果業務上已經保證子查詢返回結果的唯一性,可以考慮去掉DISTINCT,從而提升查詢性能。

SQL返回10000條

MaxCompute限制了單獨執行SELECT語句時返回的數據條數。

解決方案請參見LIMIT限制輸出行數(number)

需要查詢的結果數據條數很多。

解決方案請參見使用SQLTask執行SQL查詢時,如果查詢結果條數大于限制的10000條,該如何獲取所有數據?

MAPJOIN

JOIN不支持笛卡爾積。

JOIN必須要用ON關鍵字設置關聯條件。

如果有一些小表要作為廣播表,需要使用MAPJOIN HINT。

ORDER BY

ORDER BY需要配合LIMIT N使用。

如果希望執行大數據量的排序任務,甚至是全表排序任務,可以增大N值。解決方案請參見MaxCompute查詢得到的數據是根據什么排序的?

UNION ALL

參與UNION ALL運算的所有表必須列數一致,否則會報錯。

參與UNION ALL運算的所有列的數據類型、列個數和列名稱必須完全一致。

UNION ALL需要再嵌套一層子查詢。

無。