You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@iceberg.apache.org by "slfan1989 (via GitHub)" <gi...@apache.org> on 2023/03/10 00:04:27 UTC

[GitHub] [iceberg] slfan1989 commented on pull request #7008: Flink: Replace Flink Tableschema To Resolvedschema

slfan1989 commented on PR #7008:
URL: https://github.com/apache/iceberg/pull/7008#issuecomment-1463014914

   > in the past we haven't added these changes because it is unclear whether Iceberg should produce a resolved schema or an unresolved schema. Can you explain the purpose of both classes, what you plan to use in this PR, and why you've made that choice?
   
   Thank you very much for your question.
   
   We can refer to this document:
   https://cwiki.apache.org/confluence/display/FLINK/FLIP-164%3A+Improve+Schema+Handling+in+Catalogs
   
   `FLIP-164` explains that `Schema` should distinguish between `unresolved` and `resolved` variant, while `TableSchema` is a hybrid between `resolved` and `unresolved` schema.
   
   `TableSchema` is split into 2 parts, `Schema` and `ResolvedSchema`.
   
   1. Schema
   ```
   Contains Unresolved fields, These fields may not be validated, for example, 
   there may be duplicate primary keys.
    Offers convenient methods to adopt columns etc. 
   
   Schema {
       static Schema.Builder newBuilder();
       List<UnresolvedColumn> getColumns();
       List<UnresolvedWatermarkSpec> getWatermarkSpecs();
       Optional<UnresolvedPrimaryKey> getPrimaryKey();
       ResolvedSchema resolve(SchemaResolver);
   }
   ```
   
   2. ResolvedSchema
   ```
   Class that is exposed by the framework at different locations for validated and complete schema.
   It replaces TableSchema
   
   ResolvedSchema {
       int getColumnCount();
       List<Column> getColumns();
       Optional<Column> getColumn(int);
       Optional<Column> getColumn(String);
       List<WatermarkSpec> getWatermarkSpecs();
       Optional<UniqueConstraint> getPrimaryKey();
       DataType toRowDataType();
       DataType toPhysicalRowDataType();
       DataType toPersistedRowDataType();
   .....
   }
   ```
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org