in odps-console-public/src/main/java/com/aliyun/openservices/odps/console/pub/DescribeTableCommand.java [342:522]
private String getExtendedScreenDisplay(Table t, Partition pt) throws ODPSConsoleException {
if (!isExtended || t.isVirtualView()) {
return "";
}
StringWriter out = new StringWriter();
PrintWriter w = new PrintWriter(out);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
if (pt != null) {
if (pt.getLifeCycle() != -1) {
w.printf("| LifeCycle: %-56s |\n", pt.getLifeCycle());
}
w.printf("| IsExstore: %-56s |\n", pt.isExstore());
w.printf("| IsArchived: %-56s |\n", pt.isArchived());
w.printf("| PhysicalSize: %-56s |\n", pt.getPhysicalSize());
w.printf("| FileNum: %-56s |\n", pt.getFileNum());
if (!CollectionUtils.isEmpty(reservedPrintFields) && !StringUtils
.isNullOrEmpty(pt.getReserved())) {
JsonObject object = new JsonParser().parse(pt.getReserved()).getAsJsonObject();
for (String key : reservedPrintFields) {
if (object.has(key)) {
int spaceLength = Math.max((25 - key.length()), 1);
w.printf(String.format("| %s:%-" + spaceLength + "s%-56s |\n", key, " ",
object.get(key).getAsString()));
}
}
}
boolean isAcid2Table = t.isTransactional() && t.getPrimaryKey() != null && !t.getPrimaryKey().isEmpty();
if (pt.getClusterInfo() != null && !isAcid2Table) {
appendClusterInfo(pt.getClusterInfo(), w);
}
if (isAcid2Table) {
appendAcidInfo(t, pt.getClusterInfo(), w);
}
// 具体分区 显示分层存储信息
if (pt.getStorageTierInfo() != null) {
if (pt.getStorageTierInfo().getStorageTier() != null) {
w.printf("| StorageTier: %-56s |\n",
pt.getStorageTierInfo().getStorageTier().getName());
}
Date lastModifiedTime = pt.getStorageTierInfo().getStorageLastModifiedTime();
if (lastModifiedTime != null) {
w.printf("| StorageTierLastModifiedTime: %-52s |\n", df.format(lastModifiedTime));
}
}
w.println(
"+------------------------------------------------------------------------------------+");
} else {
w.println(
"| Extended Info: |");
w.println(
"+------------------------------------------------------------------------------------+");
if (t.isExternalTable()) {
if (!StringUtils.isNullOrEmpty(t.getTableID())) {
w.printf("| %-20s: %-60s |\n", "TableID", t.getTableID());
}
if (!StringUtils.isNullOrEmpty(t.getStorageHandler())) {
w.printf("| %-20s: %-60s |\n", "StorageHandler", t.getStorageHandler());
}
if (!StringUtils.isNullOrEmpty(t.getLocation())) {
w.printf("| %-20s: %-60s |\n", "Location", t.getLocation());
}
if (!StringUtils.isNullOrEmpty(t.getResources())) {
w.printf("| %-20s: %-60s |\n", "Resources", t.getResources());
}
if (t.getSerDeProperties() != null) {
for (Map.Entry<String, String> entry : t.getSerDeProperties().entrySet()) {
w.printf(
"| %-20s: %-60s |\n",
entry.getKey(),
StringEscapeUtils.escapeJava(entry.getValue()));
}
}
} else if (!t.isVirtualView()) {
if (t.isMaterializedView()) {
w.printf("| IsOutdated: %-56s |\n", t.isMaterializedViewOutdated());
}
if (!StringUtils.isNullOrEmpty(t.getTableID())) {
w.printf("| TableID: %-56s |\n", t.getTableID());
}
w.printf("| IsArchived: %-56s |\n", t.isArchived());
w.printf("| PhysicalSize: %-56s |\n", t.getPhysicalSize());
w.printf("| FileNum: %-56s |\n", t.getFileNum());
}
if (!CollectionUtils.isEmpty(reservedPrintFields) && !StringUtils
.isNullOrEmpty(t.getReserved())) {
JsonObject object = new JsonParser().parse(t.getReserved()).getAsJsonObject();
for (String key : reservedPrintFields) {
if (object.has(key)) {
int spaceLength = Math.max((25 - key.length()), 1);
w.printf(String.format("| %s:%-" + spaceLength + "s%-56s |\n", key, " ",
object.get(key).getAsString()));
}
}
}
if (!StringUtils.isNullOrEmpty(t.getCryptoAlgoName())) {
w.printf("| CryptoAlgoName: %-56s |\n", t.getCryptoAlgoName());
}
boolean isAcid2Table = t.isTransactional() && t.getPrimaryKey() != null && !t.getPrimaryKey().isEmpty();
if (t.getClusterInfo() != null && !isAcid2Table) {
appendClusterInfo(t.getClusterInfo(), w);
}
if (isAcid2Table) {
appendAcidInfo(t, t.getClusterInfo(), w);
}
// storageTier 需要区分是分区表还是非分区表
if (t.isPartitioned()) { //分区表显示汇总
StorageTierInfo storageTierInfo = t.getStorageTierInfo();
if (storageTierInfo != null) {
for (StorageTier tier : StorageTier.values()) {
if (storageTierInfo.getStorageSize(tier) != null) {
w.printf("| %s:%s %-56d |\n", tier.getSizeName(),
getSpace(24 - tier.getSizeName().length()),
storageTierInfo.getStorageSize(tier));
}
}
}
} else { //非分区表只显示类型和修改时间
if (t.getStorageTierInfo() != null) {
if (t.getStorageTierInfo().getStorageTier() != null) {
w.printf("| StorageTier: %-56s |\n",
t.getStorageTierInfo().getStorageTier().getName());
}
Date lastModifiedTime = t.getStorageTierInfo().getStorageLastModifiedTime();
if (lastModifiedTime != null) {
w.printf("| StorageTierLastModifiedTime: %-52s |\n", df.format(lastModifiedTime));
}
}
}
w.println(
"+------------------------------------------------------------------------------------+");
}
if (t.isMaterializedView()) {
List<Map<String, String>> history = t.getRefreshHistory();
if (history != null && history.size() != 0) {
w.println(
"| AutoRefresh History: |");
w.println(
"+------------------------------------------------------------------------------------+");
String columnFormat = "| %-25s | %-10s | %-19s | %-19s |";
String
columnHeader =
String.format(columnFormat, "InstanceId", "Status", "StartTime", "EndTime");
w.println(columnHeader);
w.println(
"+------------------------------------------------------------------------------------+");
for (Map<String, String> map : history) {
String id = map.get("InstanceId");
String status = map.get("Status");
String startTime = CommandUtils.longToDateTime(map.get("StartTime"));
String endTime = CommandUtils.longToDateTime(map.get("EndTime"));
String res = String.format(columnFormat, id, status, startTime, endTime);
w.println(res);
}
w.println(
"+------------------------------------------------------------------------------------+");
}
}
} catch (Exception e) {
throw new ODPSConsoleException(ErrorCode.INVALID_RESPONSE + ": Invalid table schema.", e);
}
w.flush();
w.close();
return out.toString();
}