@@ -415,10 +415,12 @@ bool GlueCatalog::empty() const
415415bool GlueCatalog::classifyTimestampTZ (const String & column_name, const TableMetadata & table_metadata) const
416416{
417417 String metadata_path;
418+ String metadata_uri;
418419 if (auto table_specific_properties = table_metadata.getDataLakeSpecificProperties ();
419420 table_specific_properties.has_value ())
420421 {
421422 metadata_path = table_specific_properties->iceberg_metadata_file_location ;
423+ metadata_uri = metadata_path;
422424 if (metadata_path.starts_with (" s3:/" ))
423425 metadata_path = metadata_path.substr (5 );
424426
@@ -430,22 +432,24 @@ bool GlueCatalog::classifyTimestampTZ(const String & column_name, const TableMet
430432 else
431433 throw DB::Exception (DB::ErrorCodes::BAD_ARGUMENTS, " Failed to read table metadata, reason why table is unreadable: {}" , table_metadata.getReasonWhyTableIsUnreadable ());
432434
433- if (!metadata_objects.get (metadata_path ))
435+ if (!metadata_objects.get (metadata_uri ))
434436 {
435437 DB::ASTStorage * storage = table_engine_definition->as <DB::ASTStorage>();
436438 DB::ASTs args = storage->engine ->arguments ->children ;
437439
438- auto table_endpoint = settings.storage_endpoint ;
440+ String storage_endpoint = !settings.storage_endpoint .empty () ? settings.storage_endpoint : metadata_uri;
441+
439442 if (args.empty ())
440- args.emplace_back (std::make_shared<DB::ASTLiteral>(table_endpoint ));
443+ args.emplace_back (std::make_shared<DB::ASTLiteral>(storage_endpoint ));
441444 else
442- args[0 ] = std::make_shared<DB::ASTLiteral>(table_endpoint );
445+ args[0 ] = std::make_shared<DB::ASTLiteral>(storage_endpoint );
443446
444- if (args.size () == 1 && table_metadata. hasStorageCredentials () )
447+ if (args.size () == 1 )
445448 {
446- auto storage_credentials = table_metadata.getStorageCredentials ();
447- if (storage_credentials)
448- storage_credentials->addCredentialsToEngineArgs (args);
449+ if (table_metadata.hasStorageCredentials ())
450+ table_metadata.getStorageCredentials ()->addCredentialsToEngineArgs (args);
451+ else if (!credentials.IsExpiredOrEmpty ())
452+ DataLake::S3Credentials (credentials.GetAWSAccessKeyId (), credentials.GetAWSSecretKey (), credentials.GetSessionToken ()).addCredentialsToEngineArgs (args);
449453 }
450454
451455 auto storage_settings = std::make_shared<DB::DataLakeStorageSettings>();
@@ -464,9 +468,9 @@ bool GlueCatalog::classifyTimestampTZ(const String & column_name, const TableMet
464468 Poco::JSON::Parser parser;
465469 Poco::Dynamic::Var result = parser.parse (metadata_file);
466470 auto metadata_object = result.extract <Poco::JSON::Object::Ptr>();
467- metadata_objects.set (metadata_path , std::make_shared<Poco::JSON::Object::Ptr>(metadata_object));
471+ metadata_objects.set (metadata_uri , std::make_shared<Poco::JSON::Object::Ptr>(metadata_object));
468472 }
469- auto metadata_object = *metadata_objects.get (metadata_path );
473+ auto metadata_object = *metadata_objects.get (metadata_uri );
470474 auto current_schema_id = metadata_object->getValue <Int64>(" current-schema-id" );
471475 auto schemas = metadata_object->getArray (DB::Iceberg::f_schemas);
472476 for (size_t i = 0 ; i < schemas->size (); ++i)
0 commit comments