天天看點

大資料ACP總結(一)

剛剛順利苟過了阿裡ACP, 主要複習政策是多次熟悉阿裡雲提供大資料官方教程,官方文檔,并對核心環境做總結。

社群關于複習提綱的内容以及比較詳細了,這裡梳理下存在關鍵細節的考點,也給大家一些參考。

關鍵數字:

  • 單表分區層級最多6級。單表分區數最多允許60000個分區。一次查詢最多查詢分區數為10000個分區。
  • MaxCompute支援上傳的單個資源大小上限為500MB,
  • 當使用Select語句屏顯時,目前最多隻能顯示10000行結果
  • 單個SQL中最多可以寫256路輸出,
  • MaxCompute在MapJoin中最多支援指定8張小表,否則報文法錯誤。如果使用MapJoin,則所有小表占用的記憶體總和不得超過512MB。
  • 名稱的長度不超過128位元組。一張表最多允許60000個分區,單表的分區層次不能超過6級。注釋内容是長度不超過1024位元組的有效字元串
  • 表的最大列數為1200列。

sql文法:

Q:在 MaxCompute SQL 執行過程中,報錯為Table xx has n columns, but query has m columns。

A:MaxCompute SQL 使用 INSERT INTO/OVERWRITE TABLE XXX SELECT 插入資料時,需要保證 SELECT查詢出來的字段和插入的表的字段,包括順序、字段類型都能比對,當然總的字段數量上也要能對的上。

目前 MaxCompute 不支援指定插入表中某幾個字段,其他字段為 NULL 或者其他預設值的情況,您可以在 SELECT 的時候設定成 NULL,例如:SELECT ‘a’,NULL FROM XX。

Q:用insert into…values...語句插入表記錄報錯,請問如何向 MaxCompute 表中插入記錄?

A:向 MaxCompute 表中插入記錄的操作步驟如下:

建立一個表, 例如 dual 表。語句如下:

createtabledual(cntbigint);
insertintotabledualselectcount(*) as cnt from dual;           

執行完上述語句便生成了一張有 1 條記錄的 dual 表。

執行下述語句,即可向 MaxCompute 表中插入記錄。

insert into table xxxx select 1,2,3 from dual;

Q:用insert into partition時,如果分區不存在,如何操作

A: 用insert into partition時,如果分區不存在,如何會自動建立分區

  • 分布式環境下,使用動态分區功能的SQL中,單個程序最多隻能輸出512個動态分區,否則會引發運作時異常。
  • 動态生成的分區值不允許為NULL,也不支援含特殊字元和中文,否則會引發運作時異常FAILED: ODPS-0123031:Partition exception - invalid dynamic partition value: province=xxx。
  • 如果目标表有多級分區,在運作INSERT語句時允許指定部分分區為靜态,但是靜态分區必須是進階分區
  • MaxCompute 1.0在進行動态分區時,如果分區列的類型與對應SELECT清單中列的類型不嚴格一緻,會發生報錯。MaxCompute 2.0則支援隐式類型轉換。