DDL操作常見問題
本文為您介紹對(duì)表、分區(qū)、列執(zhí)行DDL操作過程中的常見問題。
問題類別 | 常見問題 |
表操作 | |
分區(qū)操作 | |
列操作 | |
生命周期操作 | 設(shè)置表的生命周期為3天,每個(gè)表的分區(qū)存儲(chǔ)量很大,如何清理分區(qū)表舊數(shù)據(jù)? |
MaxCompute支持虛擬表嗎?例如MySQL中的DUAL表?
不支持虛擬表,您可以手動(dòng)創(chuàng)建DUAL表。
MaxCompute的表有無索引?
沒有索引,Hash Clustering可以提供類似數(shù)據(jù)庫(kù)中Cluster index的效果,詳情請(qǐng)參見表操作。
如何修改表的Hash Clustering屬性?
增加表的Hash Clustering屬性:
alter table table_name [clustered by (col_name [, col_name, ...]) [sorted by (col_name [asc | desc] [, col_name [asc | desc] ...])] into number_of_buckets buckets];
。去除表的Hash Clustering屬性:
alter table table_name not clustered;
。
如何將非分區(qū)表修改為分區(qū)表?
不支持更改非分區(qū)表為分區(qū)表,也不支持增加分區(qū)列。您可以重新創(chuàng)建一張分區(qū)表,詳情請(qǐng)參見表操作。
因誤操作刪除的表可以恢復(fù)嗎?
MaxCompute提供備份與恢復(fù)功能。但免費(fèi)周期只有24小時(shí),您可以自定義設(shè)置備份數(shù)據(jù)保留周期。如果誤刪除24小時(shí)內(nèi),可以通過備份與恢復(fù)命令恢復(fù)表數(shù)據(jù)。更多備份恢復(fù)信息,請(qǐng)參見備份與恢復(fù)。
如何查詢某個(gè)用戶創(chuàng)建的表?
只查詢某個(gè)用戶創(chuàng)建的表可以使用元數(shù)據(jù)視圖TABLES,通過owner_name字段過濾。更多TABLES信息,請(qǐng)參見TABLES。
如何查看指定的表是否存在?
可以使用函數(shù)TABLE_EXISTS查看指定的表是否存在,更多函數(shù)信息,請(qǐng)參見TABLE_EXISTS。
如何獲取項(xiàng)目下的所有表名稱?
您可以通過MaxCompute客戶端執(zhí)行show tables;
命令或使用MaxCompute的元數(shù)據(jù)服務(wù)。更多信息請(qǐng)參見表操作或Information Schema。
如何快速查看項(xiàng)目下哪些表是分區(qū)表?
您可以通過MaxCompute客戶端執(zhí)行如下命令查看項(xiàng)目下的分區(qū)表信息。
select table_name from information_schema.columns where is_partition_key = true group by table_name;
如何查看MaxCompute表的最近訪問時(shí)間?
您可以在DataWorks數(shù)據(jù)地圖中查詢表,進(jìn)入表詳情頁(yè)面獲取表的最近訪問時(shí)間。
如何查看表的數(shù)據(jù)量?
查看表的數(shù)據(jù)量包含查看數(shù)據(jù)條數(shù)和占用的物理空間大小:
您可以執(zhí)行
desc
命令查看全量表的物理空間。執(zhí)行SQL語句select count() as cnt from table_name;
查看表的數(shù)據(jù)條數(shù)。您可以執(zhí)行
desc
命令和WHERE條件組合方式,查看分區(qū)表單個(gè)分區(qū)占用的物理空間大小。執(zhí)行SQL語句select count() as cnt from table_name where ...;
查看分區(qū)數(shù)據(jù)條數(shù)。
如何查看表的行數(shù)?
您可以通過MaxCompute客戶端執(zhí)行select count(*) from table_name;
命令查看分區(qū)表或非分區(qū)表的行數(shù)。
創(chuàng)建的表為什么在DataWorks上看不到?
如果表不是通過DataWorks可視化創(chuàng)建方式創(chuàng)建的,而是通過SQL語句創(chuàng)建,DataWorks界面不會(huì)立即顯示創(chuàng)建的表,會(huì)存在2~3個(gè)小時(shí)的延時(shí)。
分區(qū)和分區(qū)列的區(qū)別是什么?
MaxCompute中的表可以分區(qū),分區(qū)表有分區(qū)列。您可以通過分區(qū)列創(chuàng)建分區(qū)。
例如分區(qū)ds=20150101
,此處ds
是一個(gè)分區(qū)列,而ds=20150101
是一個(gè)分區(qū)。
一張表的分區(qū)的數(shù)量是否越多越好?
在MaxCompute中,一張表最多允許有60000個(gè)分區(qū),同時(shí)每個(gè)分區(qū)的容量沒有上限。但是分區(qū)數(shù)量過多,不便于統(tǒng)計(jì)和分析。
MaxCompute限制單個(gè)作業(yè)中最多不能超過一定數(shù)量的Instance,而作業(yè)中的Instance數(shù)量和輸入的數(shù)據(jù)量以及分區(qū)數(shù)量是密切相關(guān)的,所以您需要根據(jù)業(yè)務(wù)情況,選擇合適的分區(qū)策略。
如果源表沒有分區(qū)字段,是否可以增加或更改分區(qū)?
MaxCompute不支持在源表上直接增加或修改分區(qū)字段,分區(qū)字段一旦創(chuàng)建就無法修改。您可以重新創(chuàng)建一張分區(qū)表,使用動(dòng)態(tài)分區(qū)SQL將源表數(shù)據(jù)導(dǎo)入至新分區(qū)表,詳情請(qǐng)參見插入或覆寫動(dòng)態(tài)分區(qū)數(shù)據(jù)(DYNAMIC PARTITION)。
如何查看指定的分區(qū)是否存在?
可以使用函數(shù)PARTITION_EXISTS查看指定的分區(qū)是否存在,更多函數(shù)信息,請(qǐng)參見PARTITION_EXISTS。
如何查看分區(qū)數(shù)量?
您可以通過Information Schema的PARTITIONS視圖,獲取到分區(qū)名,進(jìn)而獲取到分區(qū)數(shù)量。
是否可以添加或刪除列?
在MaxCompute中,可以添加列,也可以刪除列,目前添加復(fù)雜數(shù)據(jù)類型列和刪除列正在邀測(cè)中,試用操作詳情請(qǐng)參見新功能測(cè)試申請(qǐng)。
如何添加列?
添加列的命令示例如下。如果表中已經(jīng)存在一部分?jǐn)?shù)據(jù),則新添加列的值為NULL。
alter table table_name add columns (col_name1 type1, col_name2 type2…);
更多添加列語法信息,請(qǐng)參見添加列。
如何設(shè)置自增長(zhǎng)列?
MaxCompute不支持自增長(zhǎng)列功能,如果您有此需求,且數(shù)據(jù)量比較小,建議使用ROW_NUMBER實(shí)現(xiàn)。
MaxCompute單表可以存放的最大列數(shù)是多少?
MaxCompute單表可以存放的最大列數(shù)為1200列。如果您的列數(shù)超過限制,可以參考如下方式處理:
對(duì)數(shù)據(jù)進(jìn)行降維,縮減到1200列以內(nèi)。
修改數(shù)據(jù)的保存方式,例如設(shè)備證書、稀疏或稠密矩陣。
待創(chuàng)建表的列名與關(guān)鍵字相同,如何解決?
在對(duì)表、列或分區(qū)命名時(shí)如果使用關(guān)鍵字,需要給關(guān)鍵字加``
符號(hào)進(jìn)行轉(zhuǎn)義,否則會(huì)報(bào)錯(cuò)。
如何修改列的數(shù)據(jù)類型?
不支持修改列的數(shù)據(jù)類型,只能添加列。生產(chǎn)環(huán)境中的表不允許刪除表字段、修改表字段和分區(qū)字段。如果必須修改,請(qǐng)刪除表之后重新建表。您也可以創(chuàng)建外部表,刪除并重建表后,可以重新加載數(shù)據(jù)。數(shù)據(jù)類型詳情請(qǐng)參見數(shù)據(jù)類型版本說明。
設(shè)置表的生命周期為3天,每個(gè)表的分區(qū)存儲(chǔ)量很大,如何清理分區(qū)表舊數(shù)據(jù)?
設(shè)置了生命周期的表超過設(shè)定時(shí)間沒有修改,MaxCompute會(huì)自動(dòng)回收。
您可以執(zhí)行desc table_name partition(pt_spec);
命令查看舊的分區(qū)修改時(shí)間是否在生命周期內(nèi)修改過。通過desc tablename;
命令查看生命周期時(shí)間,MaxComptue每天17:00點(diǎn)進(jìn)行回收,DataWorks上的數(shù)據(jù)顯示有延遲,一般會(huì)延遲一天。