@Override
  public URI getURIForAuth(org.apache.hadoop.hive.metastore.api.Table hmsTable) throws URISyntaxException {
    String dbName = hmsTable.getDbName();
    String tableName = hmsTable.getTableName();
    StringBuilder authURI =
        new StringBuilder(ICEBERG_URI_PREFIX).append(encodeString(dbName)).append("/").append(encodeString(tableName))
            .append("?snapshot=");
    // If metadata location is provided we should use that location for auth, since during create if the
    // metadata_location is explicitly provided we register a table using that path.
    Optional<String> metadataLocation =
        SessionStateUtil.getProperty(conf, BaseMetastoreTableOperations.METADATA_LOCATION_PROP);
    if (metadataLocation.isPresent()) {
      authURI.append(getPathForAuth(metadataLocation.get()));
    } else {
      Optional<String> locationProperty =
          SessionStateUtil.getProperty(conf, hive_metastoreConstants.META_TABLE_LOCATION);
      if (locationProperty.isPresent()) {
        // this property is set during the create operation before the hive table was created
        // we are returning a dummy iceberg metadata file
        authURI.append(getPathForAuth(locationProperty.get()))
            .append(encodeString("/metadata/dummy.metadata.json"));
      } else {
        Table table = IcebergTableUtil.getTable(conf, hmsTable);
        authURI.append(getPathForAuth(((BaseTable) table).operations().current().metadataFileLocation(),
            hmsTable.getSd().getLocation()));
      }
    }
    LOG.debug("Iceberg storage handler authorization URI {}", authURI);
    return new URI(authURI.toString());
  }
Iceberg's optimistic concurrency control fails to provide means for IOW and Insert operations isolation.
Use `hive.txn.ext.locking.enabled` config to create Hive locks in order to guarantee data consistency.
iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java