[cherry-pick](branch-2.1)[fix](sys_table) fix potential NPE when query table_properties and partitions sys table (#41081)
## Proposed changes Issue Number: close #xxx bp #40972
This commit is contained in:
@ -1212,29 +1212,34 @@ public class MetadataGenerator {
|
||||
continue;
|
||||
}
|
||||
OlapTable olapTable = (OlapTable) table;
|
||||
TableProperty property = olapTable.getTableProperty();
|
||||
if (property == null) {
|
||||
// if there is no properties, then write empty properties and check next table.
|
||||
TRow trow = new TRow();
|
||||
trow.addToColumnValue(new TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
|
||||
trow.addToColumnValue(new TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
|
||||
trow.addToColumnValue(new TCell().setStringVal(table.getName())); // TABLE_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal("")); // PROPERTIES_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal("")); // PROPERTIES_VALUE
|
||||
dataBatch.add(trow);
|
||||
continue;
|
||||
}
|
||||
olapTable.readLock();
|
||||
try {
|
||||
TableProperty property = olapTable.getTableProperty();
|
||||
if (property == null) {
|
||||
// if there is no properties, then write empty properties and check next table.
|
||||
TRow trow = new TRow();
|
||||
trow.addToColumnValue(new TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
|
||||
trow.addToColumnValue(new TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
|
||||
trow.addToColumnValue(new TCell().setStringVal(table.getName())); // TABLE_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal("")); // PROPERTIES_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal("")); // PROPERTIES_VALUE
|
||||
dataBatch.add(trow);
|
||||
continue;
|
||||
}
|
||||
|
||||
Map<String, String> propertiesMap = property.getProperties();
|
||||
propertiesMap.forEach((key, value) -> {
|
||||
TRow trow = new TRow();
|
||||
trow.addToColumnValue(new TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
|
||||
trow.addToColumnValue(new TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
|
||||
trow.addToColumnValue(new TCell().setStringVal(table.getName())); // TABLE_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal(key)); // PROPERTIES_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal(value)); // PROPERTIES_VALUE
|
||||
dataBatch.add(trow);
|
||||
});
|
||||
Map<String, String> propertiesMap = property.getProperties();
|
||||
propertiesMap.forEach((key, value) -> {
|
||||
TRow trow = new TRow();
|
||||
trow.addToColumnValue(new TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
|
||||
trow.addToColumnValue(new TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
|
||||
trow.addToColumnValue(new TCell().setStringVal(table.getName())); // TABLE_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal(key)); // PROPERTIES_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal(value)); // PROPERTIES_VALUE
|
||||
dataBatch.add(trow);
|
||||
});
|
||||
} finally {
|
||||
olapTable.readUnlock();
|
||||
}
|
||||
} // for table
|
||||
}
|
||||
|
||||
@ -1342,49 +1347,56 @@ public class MetadataGenerator {
|
||||
}
|
||||
|
||||
OlapTable olapTable = (OlapTable) table;
|
||||
Collection<Partition> allPartitions = olapTable.getAllPartitions();
|
||||
olapTable.readLock();
|
||||
try {
|
||||
Collection<Partition> allPartitions = olapTable.getAllPartitions();
|
||||
|
||||
for (Partition partition : allPartitions) {
|
||||
TRow trow = new TRow();
|
||||
trow.addToColumnValue(new TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
|
||||
trow.addToColumnValue(new TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
|
||||
trow.addToColumnValue(new TCell().setStringVal(table.getName())); // TABLE_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal(partition.getName())); // PARTITION_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // SUBPARTITION_NAME (always null)
|
||||
for (Partition partition : allPartitions) {
|
||||
TRow trow = new TRow();
|
||||
trow.addToColumnValue(new TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
|
||||
trow.addToColumnValue(new TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
|
||||
trow.addToColumnValue(new TCell().setStringVal(table.getName())); // TABLE_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal(partition.getName())); // PARTITION_NAME
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // SUBPARTITION_NAME (always null)
|
||||
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //PARTITION_ORDINAL_POSITION (not available)
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //SUBPARTITION_ORDINAL_POSITION (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal(
|
||||
olapTable.getPartitionInfo().getType().toString())); // PARTITION_METHOD
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // SUBPARTITION_METHOD(always null)
|
||||
PartitionItem item = olapTable.getPartitionInfo().getItem(partition.getId());
|
||||
if ((olapTable.getPartitionInfo().getType() == PartitionType.UNPARTITIONED) || (item == null)) {
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // if unpartitioned, its null
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // SUBPARTITION_EXPRESSION (always null)
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // PARITION DESC, its null
|
||||
} else {
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //PARTITION_ORDINAL_POSITION (not available)
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //SUBPARTITION_ORDINAL_POSITION (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal(
|
||||
olapTable.getPartitionInfo()
|
||||
.getDisplayPartitionColumns().toString())); // PARTITION_EXPRESSION
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // SUBPARTITION_EXPRESSION (always null)
|
||||
olapTable.getPartitionInfo().getType().toString())); // PARTITION_METHOD
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // SUBPARTITION_METHOD(always null)
|
||||
PartitionItem item = olapTable.getPartitionInfo().getItem(partition.getId());
|
||||
if ((olapTable.getPartitionInfo().getType() == PartitionType.UNPARTITIONED) || (item == null)) {
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // if unpartitioned, its null
|
||||
trow.addToColumnValue(
|
||||
new TCell().setStringVal("NULL")); // SUBPARTITION_EXPRESSION (always null)
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // PARITION DESC, its null
|
||||
} else {
|
||||
trow.addToColumnValue(new TCell().setStringVal(
|
||||
olapTable.getPartitionInfo()
|
||||
.getDisplayPartitionColumns().toString())); // PARTITION_EXPRESSION
|
||||
trow.addToColumnValue(
|
||||
new TCell().setStringVal("NULL")); // SUBPARTITION_EXPRESSION (always null)
|
||||
trow.addToColumnValue(new TCell().setStringVal(
|
||||
item.getItemsSql())); // PARITION DESC
|
||||
}
|
||||
trow.addToColumnValue(new TCell().setLongVal(partition.getRowCount())); //TABLE_ROWS (PARTITION row)
|
||||
trow.addToColumnValue(new TCell().setLongVal(partition.getAvgRowLength())); //AVG_ROW_LENGTH
|
||||
trow.addToColumnValue(new TCell().setLongVal(partition.getDataLength())); //DATA_LENGTH
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //MAX_DATA_LENGTH (not available)
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //INDEX_LENGTH (not available)
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //DATA_FREE (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); //CREATE_TIME (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal(
|
||||
item.getItemsSql())); // PARITION DESC
|
||||
TimeUtils.longToTimeString(partition.getVisibleVersionTime()))); //UPDATE_TIME
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // CHECK_TIME (not available)
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //CHECKSUM (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal("")); // PARTITION_COMMENT (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal("")); // NODEGROUP (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal("")); // TABLESPACE_NAME (not available)
|
||||
dataBatch.add(trow);
|
||||
}
|
||||
trow.addToColumnValue(new TCell().setLongVal(partition.getRowCount())); //TABLE_ROWS (PARTITION row)
|
||||
trow.addToColumnValue(new TCell().setLongVal(partition.getAvgRowLength())); //AVG_ROW_LENGTH
|
||||
trow.addToColumnValue(new TCell().setLongVal(partition.getDataLength())); //DATA_LENGTH
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //MAX_DATA_LENGTH (not available)
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //INDEX_LENGTH (not available)
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //DATA_FREE (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); //CREATE_TIME (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal(
|
||||
TimeUtils.longToTimeString(partition.getVisibleVersionTime()))); //UPDATE_TIME
|
||||
trow.addToColumnValue(new TCell().setStringVal("NULL")); // CHECK_TIME (not available)
|
||||
trow.addToColumnValue(new TCell().setIntVal(0)); //CHECKSUM (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal("")); // PARTITION_COMMENT (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal("")); // NODEGROUP (not available)
|
||||
trow.addToColumnValue(new TCell().setStringVal("")); // TABLESPACE_NAME (not available)
|
||||
dataBatch.add(trow);
|
||||
} finally {
|
||||
olapTable.readUnlock();
|
||||
}
|
||||
} // for table
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user