private static void syncPartitionTable(
      SupportHive table, StructLikeMap<Map<String, String>> partitionProperty) throws Exception {
    Map<String, StructLike> icebergPartitionMap = new HashMap<>();
    for (StructLike structLike : partitionProperty.keySet()) {
      icebergPartitionMap.put(table.spec().partitionToPath(structLike), structLike);
    }
    List<String> icebergPartitions = new ArrayList<>(icebergPartitionMap.keySet());
    List<Partition> hivePartitions =
        table
            .getHMSClient()
            .run(
                client ->
                    client.listPartitions(
                        table.id().getDatabase(), table.id().getTableName(), Short.MAX_VALUE));
    List<String> hivePartitionNames =
        table
            .getHMSClient()
            .run(
                client ->
                    client.listPartitionNames(
                        table.id().getDatabase(), table.id().getTableName(), Short.MAX_VALUE));
    List<FieldSchema> partitionKeys =
        table
            .getHMSClient()
            .run(
                client -> {
                  Table hiveTable =
                      client.getTable(table.id().getDatabase(), table.id().getTableName());
                  return hiveTable.getPartitionKeys();
                });
    Map<String, Partition> hivePartitionMap = new HashMap<>();
    for (Partition hivePartition : hivePartitions) {
      hivePartitionMap.put(
          Warehouse.makePartName(partitionKeys, hivePartition.getValues()), hivePartition);
    }

    Set<String> inIcebergNotInHive =
        icebergPartitions.stream()
            .filter(partition -> !hivePartitionNames.contains(partition))
            .collect(Collectors.toSet());
    Set<String> inHiveNotInIceberg =
        hivePartitionNames.stream()
            .filter(partition -> !icebergPartitions.contains(partition))
            .collect(Collectors.toSet());
    Set<String> inBoth =
        icebergPartitions.stream().filter(hivePartitionNames::contains).collect(Collectors.toSet());

    if (CollectionUtils.isNotEmpty(inIcebergNotInHive)) {
      handleInIcebergPartitions(table, inIcebergNotInHive, icebergPartitionMap, partitionProperty);
    }

    if (CollectionUtils.isNotEmpty(inHiveNotInIceberg)) {
      handleInHivePartitions(table, inHiveNotInIceberg, hivePartitionMap);
    }

    if (CollectionUtils.isNotEmpty(inBoth)) {
      handleInBothPartitions(
          table, inBoth, hivePartitionMap, icebergPartitionMap, partitionProperty);
    }
  }
once get location from iceberg property, should update hive table location, because only
mixed-hive table update hive table location for unPartitioned table.
amoro-format-mixed/amoro-mixed-hive/src/main/java/org/apache/amoro/hive/utils/HiveMetaSynchronizer.java