Skip to content

Commit 184963d

Browse files
Enmkzvonand
authored andcommitted
Merge pull request #1053 from Altinity/backport/antalya-25.6.5/87733
Antalya 25.6.5 Backport of 87733: Fix handling of timestamp(tz) columns in Glue Catalog
1 parent 4819149 commit 184963d

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/Databases/DataLake/GlueCatalog.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -415,10 +415,12 @@ bool GlueCatalog::empty() const
415415
bool 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

Comments
 (0)