Skip to content

Commit f5d064f

Browse files
authored
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
2 parents ca0e1b8 + 6f60363 commit f5d064f

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

ci/workflows/pull_request.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
# "python3 ./ci/jobs/scripts/workflow_hooks/pr_description.py", # NOTE (strtgbb): relies on labels we don't use
8686
"python3 ./ci/jobs/scripts/workflow_hooks/version_log.py",
8787
# "python3 ./ci/jobs/scripts/workflow_hooks/quick_sync.py", # NOTE (strtgbb): we don't do this
88-
"python3 ./ci/jobs/scripts/workflow_hooks/new_tests_check.py",
88+
# "python3 ./ci/jobs/scripts/workflow_hooks/new_tests_check.py", # NOTE (strtgbb): we don't use this
8989
],
9090
workflow_filter_hooks=[should_skip_job],
9191
post_hooks=[

src/Databases/DataLake/GlueCatalog.cpp

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

Comments
 (0)