阿里分析型資料庫AnalyticDB與MySQL對比
AnalyticDB全面相容MySQL協議和SQL 2003,基本上可以像MySQL一樣使用它。現在重點看看它們有什麼區別。
一、與MySQL資料型別對比
AnalyticDB資料型別 | MySQL資料型別 | 差異 |
---|---|---|
boolean | bool、boolean | 一致 |
tinyint | tinyint | 一致 |
smallint | smallint | 一致 |
int | int、integer | 一致 |
bigint | bigint | 一致 |
float | float[(m,d)] | AnalyticDB不支援自定義m和d,MySQL支援 |
double | double[(m,d)] | AnalyticDB不支援自定義m和d,MySQL支援 |
varchar | varchar | 一致 |
date | date | 一致 |
timestamp | timestamp | AnalyticDB支援到精確到秒,MySQL支援自定義精度 |
注意事項
varchar長度不得超過8K,否則可能會出現欄位為null。如果此列超過8k又不能過濾掉,可以設定該列去掉索引disableIndex =true。去掉索引後建議該列不要在查詢中進行篩選和計算。
二、與MySQL概念對比
-
由於AnalyticDB是線上的分散式資料庫,所以多了彈性計算單元(Elastic compute units
簡寫ECU)、表組和分割槽的概念。 -
其中MySQL的資料庫是由表組成的,而AnalyticDB的資料庫是由ECU組成。
-
AnalyticDB的表又分為維度表和普通表,維度表指帶有緯度概念的表,可以和任何普通表進行關聯;普通表指分割槽表,針對分散式系統查詢而設計的表。
-
在AnalyticDB中,資料儲存支援按一列或多列進行排序(先按第一列排序,第一列相同情況下使用第二列排序),以保證該列中值相同或相近的資料儲存在磁碟同一位置,這樣的列我們稱之為聚集列。
三、與MySQL的sql語句對比
由於概念不同,所以sql也會有些差別了,現在列出AnalyticDB中主要的不同於MySQL的sql要點。
建立普通表組
AnalyticDB中獨有的。
create tablegroup tablegroup_name;
- tablegroup_name為表組名稱,資料庫級別全域性唯一。
- 維度表組由系統建立,表組命名為dbname_dimension_group。
建立維度表
與MySQL類似,但新增了options (updateType=‘realtime’)引數,且CREATE 後面加了個引數DIMENSION 表示緯度表。
CREATE DIMENSION TABLE table_name (
column_name data_type [NOT NULL][DEFAULT 'default'][COMMENT 'comment'][, …],
primary key (column_name[, …])
)
options (updateType='realtime')
建立普通表
AnalyticDB中多了分割槽,表組以及聚合列的概念。
CREATE TABLE table_name (
column_name data_type [NOT NULL] [disableIndex true] [DEFAULT 'default'][COMMENT 'comment'][, …],
primary key (column_name[, … ])
)
PARTITION BY HASH KEY(column_name) PARTITION NUM 128
CLUSTERED BY (column_name)
TABLEGROUP tablegroup_name
options (updateType='realtime')
-
data_type:AnalyticDB支援的列型別參考資料型別。
-
disableIndex :是否設定索引,預設為false,即設定索引,若不需要設定索引,則設為true。
-
NOT NULL:可選項,列屬性,預設為NULL。
-
DEFAULT ‘default’:可選項,列屬性。
-
COMMENT ‘comment’:可選項,列屬性。
-
primary key:指定主鍵,可以為聯合主鍵,普通表的主鍵中必須含有分割槽列。
-
HASH KEY:分割槽列的選取參考一級分割槽的規劃和設計。
-
PARTITION NUM:分割槽的數量。
-
CLUSTERED BY:要聚合的列,當以聚集列為查詢條件時,由於查詢結果儲存在磁碟同一位置,可以減少輸入/輸出I/O(Input/Output)次數。
-
TABLEGROUP:歸屬的表組。
-
updateType=’realtime’:實時更新。
刪除普通表組
drop tablegroup tablegroup_name;
-
tablegroup_name:為表組名稱。
-
維度表組不能刪除,刪除普通表組之前需要先清空其中的表。
INTERSECT和EXCEPT/MINUS
MySQL中沒有這兩個聚合函式。
-
INTERSECT:返回派生自兩個查詢表示式的行的集合運算。返回結果中將丟棄未同時由兩個表示式返回的行,即並集運算
-
EXCEPT|MINUS:返回派生自兩個查詢表示式之一的行的集合運算。返回的結果行必須存在於第一個結果表而不存在於第二個結果表中。MINUS和EXCEPT完全同義,即差集運算。
查詢資料量
AnalyticDB一次性最多隻能查詢一萬條資料,不過這個已經能滿足大部分場景了。