in adb2client/src/main/java/com/alibaba/cloud/analyticdb/adbclient/AdbClient.java [1024:1045]
private int getHashPartition(String tableName, Row row) {
String value = null;
if (partitionColumnIndex.get(tableName) != null && partitionColumnIndex.get(tableName) != -1 && row.getColumnValues().get(partitionColumnIndex.get(tableName)) != null) {
value = row.getColumnValues().get(partitionColumnIndex.get(tableName)).toString();
}
if (value == null) {
for (String pk : tableInfo.get(tableName).getPrimaryKeyColumns()) {
if (tableInfo.get(tableName).getSubPartitionColumn() == null || !pk.equalsIgnoreCase(tableInfo.get(tableName).getSubPartitionColumn())) {
int subPartitionIndex = databaseConfig.getColumns(tableName).indexOf(pk);
if (row.getColumnValues().get(subPartitionIndex) != null) {
value = row.getColumnValues().get(subPartitionIndex).toString();
break;
}
}
}
if (value == null) {
return new Random().nextInt(tableInfo.get(tableName).getPartitionCount());
}
}
long crc32 = getCRC32(value);
return (int) (crc32 % tableInfo.get(tableName).getPartitionCount());
}