Hi Community,

I am working on loading iceberg data from S3 using Flink. I am using
GlueCatalog for storing the iceberg table metadata. I found that the
GlueCatalog’s loadTable call (implemented
<https://github.com/apache/iceberg/blob/apache-iceberg-1.4.0/core/src/main/java/org/apache/iceberg/BaseMetastoreCatalog.java#L46>
in the abstract class BaseMetastoreCatalog) creates a new instance of
GlueTableOperations every time for a Glue table identifier. This instance
is initialized with shouldRefresh = true and hence it refreshes the
tableMetadata for a given table identifier every time the loadTable is
called for that tableIdentifier even though it was called in the recent
past. I am wondering why these tableOperation instances are not cached in
the catalog. I suggest the following changes in the newTableOps method
<https://github.com/apache/iceberg/blob/apache-iceberg-1.4.0/aws/src/main/java/org/apache/iceberg/aws/glue/GlueCatalog.java#L205>
in the GlueCatalog (and other catalog impls) and would really appreciate
the community's feedback on this.

protected TableOperations newTableOps(TableIdentifier tableIdentifier) {

    // tableCache is a Cache with key=tableIdentifier and
value=GlueTableOperations object

    if (tableCache.containsKey(tableIdentifier)) {

       return tableCache.get(tableIdentifier)

    } else {

       return new GlueTableOperations(....)

    }
}

If you like the approach, I am happy to contribute to open source. Let me
know.

Thank you
Chetas

Reply via email to