- 
                Notifications
    You must be signed in to change notification settings 
- Fork 338
feat(catalog): Implement register_table for glue catalog #1568
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the work Yiyang ! Left some comments
        
          
                crates/catalog/glue/src/catalog.rs
              
                Outdated
          
        
      | &self, | ||
| _table_ident: &TableIdent, | ||
| _metadata_location: String, | ||
| table: &TableIdent, | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| table: &TableIdent, | |
| table_ident: &TableIdent, | 
        
          
                crates/catalog/glue/src/catalog.rs
              
                Outdated
          
        
      | "Table {}.{} created but failed to load: {e}", | ||
| db_name, table_name | ||
| ), | ||
| ) | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should use .with_source(e) to expose the cause
        
          
                crates/catalog/glue/src/catalog.rs
              
                Outdated
          
        
      | } else { | ||
| Err(from_aws_sdk_error(err)) | ||
| } | ||
| } | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm it seems that iceberg-rs doesn't handle aws error very explicitly, the existing way of exposing error is just attaching AWS SDK error as a source and return ErrorKind::Unexpected: https://github.com/apache/iceberg-rust/blob/2bc03c28268f15472353b828602bb5efd3bf9513/crates/catalog/glue/src/error.rs#L24-L23
ideally we want to handle every error listed here for CreateTable: https://docs.rs/aws-sdk-glue/latest/aws_sdk_glue/operation/create_table/enum.CreateTableError.html
the error handling in this PR looks good to me, and we should update the existing error handling in create_table. this should be completed with a follow-up
        
          
                crates/catalog/glue/src/catalog.rs
              
                Outdated
          
        
      |  | ||
| match result { | ||
| Ok(_) => { | ||
| self.load_table(table).await.map_err(|e| { | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not just use Table::builder()....build() so we don't need to load the table here?
ref:
| Table::builder() | 
        
          
                crates/catalog/glue/src/catalog.rs
              
                Outdated
          
        
      | } | ||
| } | ||
|  | ||
| /// Asynchronously registers an existing table into the Glue Catalog. | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why adding Asynchronously? Do you mean the async function? If so, we typically don't add this word.
d606bc8    to
    993c707      
    Compare
  
    - removed unnecessary wording in function documentation comments - renamed `table_ident` parameter - replaced `load_table()` with `Table::builder()` - attached source error using `.with_source(e)` - restructured error handling to follow `update_table()` pattern
993c707    to
    6470f34      
    Compare
  
    There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
        
          
                crates/catalog/glue/src/catalog.rs
              
                Outdated
          
        
      | ), | ||
| CreateTableError::AlreadyExistsException(_) => Error::new( | ||
| ErrorKind::TableAlreadyExists, | ||
| format!("Table {}.{} already exists", db_name, table_name), | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: you can use table_ident directly, it already contains both
        
          
                crates/catalog/glue/src/catalog.rs
              
                Outdated
          
        
      | _ => Error::new( | ||
| ErrorKind::Unexpected, | ||
| format!( | ||
| "Failed to register table {}.{} due to AWS SDK error", | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here
- updated error message
421b3fa    to
    1bc8fc4      
    Compare
  
    There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Which issue does this PR close?
What changes are included in this PR?
implemented the register_table method in the Glue catalog.
added an integration test to cover table registration via metadata location.
Are these changes tested?
Yes
I'm new to Rust and to Iceberg, any feedback or suggestions for improvement are very welcome! 😊