@@ -405,10 +405,12 @@ bool GlueCatalog::empty() const
405
405
bool GlueCatalog::classifyTimestampTZ (const String & column_name, const TableMetadata & table_metadata) const
406
406
{
407
407
String metadata_path;
408
+ String metadata_uri;
408
409
if (auto table_specific_properties = table_metadata.getDataLakeSpecificProperties ();
409
410
table_specific_properties.has_value ())
410
411
{
411
412
metadata_path = table_specific_properties->iceberg_metadata_file_location ;
413
+ metadata_uri = metadata_path;
412
414
if (metadata_path.starts_with (" s3:/" ))
413
415
metadata_path = metadata_path.substr (5 );
414
416
@@ -420,22 +422,24 @@ bool GlueCatalog::classifyTimestampTZ(const String & column_name, const TableMet
420
422
else
421
423
throw DB::Exception (DB::ErrorCodes::BAD_ARGUMENTS, " Metadata specific properties should be defined" );
422
424
423
- if (!metadata_objects.get (metadata_path ))
425
+ if (!metadata_objects.get (metadata_uri ))
424
426
{
425
427
DB::ASTStorage * storage = table_engine_definition->as <DB::ASTStorage>();
426
428
DB::ASTs args = storage->engine ->arguments ->children ;
427
429
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
+
429
432
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 ));
431
434
else
432
- args[0 ] = std::make_shared<DB::ASTLiteral>(table_endpoint );
435
+ args[0 ] = std::make_shared<DB::ASTLiteral>(storage_endpoint );
433
436
434
- if (args.size () == 1 && table_metadata. hasStorageCredentials () )
437
+ if (args.size () == 1 )
435
438
{
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);
439
443
}
440
444
441
445
auto storage_settings = std::make_shared<DB::DataLakeStorageSettings>();
@@ -454,9 +458,9 @@ bool GlueCatalog::classifyTimestampTZ(const String & column_name, const TableMet
454
458
Poco::JSON::Parser parser;
455
459
Poco::Dynamic::Var result = parser.parse (metadata_file);
456
460
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));
458
462
}
459
- auto metadata_object = *metadata_objects.get (metadata_path );
463
+ auto metadata_object = *metadata_objects.get (metadata_uri );
460
464
auto current_schema_id = metadata_object->getValue <Int64>(" current-schema-id" );
461
465
auto schemas = metadata_object->getArray (Iceberg::f_schemas);
462
466
for (size_t i = 0 ; i < schemas->size (); ++i)
0 commit comments