@@ -405,10 +405,12 @@ bool GlueCatalog::empty() const
405405bool GlueCatalog::classifyTimestampTZ (const String & column_name, const TableMetadata & table_metadata) const
406406{
407407 String metadata_path;
408+ String metadata_uri;
408409 if (auto table_specific_properties = table_metadata.getDataLakeSpecificProperties ();
409410 table_specific_properties.has_value ())
410411 {
411412 metadata_path = table_specific_properties->iceberg_metadata_file_location ;
413+ metadata_uri = metadata_path;
412414 if (metadata_path.starts_with (" s3:/" ))
413415 metadata_path = metadata_path.substr (5 );
414416
@@ -420,22 +422,24 @@ bool GlueCatalog::classifyTimestampTZ(const String & column_name, const TableMet
420422 else
421423 throw DB::Exception (DB::ErrorCodes::BAD_ARGUMENTS, " Metadata specific properties should be defined" );
422424
423- if (!metadata_objects.get (metadata_path ))
425+ if (!metadata_objects.get (metadata_uri ))
424426 {
425427 DB::ASTStorage * storage = table_engine_definition->as <DB::ASTStorage>();
426428 DB::ASTs args = storage->engine ->arguments ->children ;
427429
428- auto table_endpoint = settings[DB::DatabaseDataLakeSetting::storage_endpoint].value ;
430+ String storage_endpoint = !settings[DB::DatabaseDataLakeSetting::storage_endpoint].value .empty () ? settings[DB::DatabaseDataLakeSetting::storage_endpoint].value : metadata_uri;
431+
429432 if (args.empty ())
430- args.emplace_back (std::make_shared<DB::ASTLiteral>(table_endpoint ));
433+ args.emplace_back (std::make_shared<DB::ASTLiteral>(storage_endpoint ));
431434 else
432- args[0 ] = std::make_shared<DB::ASTLiteral>(table_endpoint );
435+ args[0 ] = std::make_shared<DB::ASTLiteral>(storage_endpoint );
433436
434- if (args.size () == 1 && table_metadata. hasStorageCredentials () )
437+ if (args.size () == 1 )
435438 {
436- auto storage_credentials = table_metadata.getStorageCredentials ();
437- if (storage_credentials)
438- storage_credentials->addCredentialsToEngineArgs (args);
439+ if (table_metadata.hasStorageCredentials ())
440+ table_metadata.getStorageCredentials ()->addCredentialsToEngineArgs (args);
441+ else if (!credentials.IsExpiredOrEmpty ())
442+ DataLake::S3Credentials (credentials.GetAWSAccessKeyId (), credentials.GetAWSSecretKey (), credentials.GetSessionToken ()).addCredentialsToEngineArgs (args);
439443 }
440444
441445 auto storage_settings = std::make_shared<DB::DataLakeStorageSettings>();
@@ -454,9 +458,9 @@ bool GlueCatalog::classifyTimestampTZ(const String & column_name, const TableMet
454458 Poco::JSON::Parser parser;
455459 Poco::Dynamic::Var result = parser.parse (metadata_file);
456460 auto metadata_object = result.extract <Poco::JSON::Object::Ptr>();
457- metadata_objects.set (metadata_path , std::make_shared<Poco::JSON::Object::Ptr>(metadata_object));
461+ metadata_objects.set (metadata_uri , std::make_shared<Poco::JSON::Object::Ptr>(metadata_object));
458462 }
459- auto metadata_object = *metadata_objects.get (metadata_path );
463+ auto metadata_object = *metadata_objects.get (metadata_uri );
460464 auto current_schema_id = metadata_object->getValue <Int64>(" current-schema-id" );
461465 auto schemas = metadata_object->getArray (Iceberg::f_schemas);
462466 for (size_t i = 0 ; i < schemas->size (); ++i)
0 commit comments