private int getHashPartition()

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());
    }