diff --git a/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.cpp b/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.cpp index cfa834687231..fde64ff9785f 100644 --- a/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.cpp +++ b/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.cpp @@ -94,8 +94,7 @@ IcebergMetadata::IcebergMetadata( Int32 format_version_, const Poco::JSON::Object::Ptr & metadata_object_, IcebergMetadataFilesCachePtr cache_ptr) - : WithContext(context_) - , object_storage(std::move(object_storage_)) + : object_storage(std::move(object_storage_)) , configuration(std::move(configuration_)) , schema_processor(IcebergSchemaProcessor()) , log(getLogger("IcebergMetadata")) @@ -105,6 +104,7 @@ IcebergMetadata::IcebergMetadata( , format_version(format_version_) , relevant_snapshot_schema_id(-1) , table_location(last_metadata_object->getValue(TABLE_LOCATION_FIELD)) + , context(context_) { updateState(context_, true); } @@ -537,8 +537,8 @@ ManifestListPtr IcebergMetadata::getManifestList(const String & filename) const { ManifestList manifest_list; StorageObjectStorage::ObjectInfo object_info(filename); - auto manifest_list_buf = StorageObjectStorageSource::createReadBuffer(object_info, object_storage, getContext(), log); - AvroForIcebergDeserializer manifest_list_deserializer(std::move(manifest_list_buf), filename, getFormatSettings(getContext())); + auto manifest_list_buf = StorageObjectStorageSource::createReadBuffer(object_info, object_storage, context, log); + AvroForIcebergDeserializer manifest_list_deserializer(std::move(manifest_list_buf), filename, getFormatSettings(context)); ManifestFileCacheKeys manifest_file_cache_keys; @@ -584,8 +584,8 @@ ManifestFilePtr IcebergMetadata::getManifestFile(const String & filename, Int64 auto create_fn = [&]() { ObjectInfo manifest_object_info(filename); - auto buffer = StorageObjectStorageSource::createReadBuffer(manifest_object_info, object_storage, getContext(), log); - AvroForIcebergDeserializer manifest_file_deserializer(std::move(buffer), filename, getFormatSettings(getContext())); + auto buffer = StorageObjectStorageSource::createReadBuffer(manifest_object_info, object_storage, context, log); + AvroForIcebergDeserializer manifest_file_deserializer(std::move(buffer), filename, getFormatSettings(context)); auto [schema_id, schema_object] = parseTableSchemaFromManifestFile(manifest_file_deserializer, filename); schema_processor.addIcebergTableSchema(schema_object); return std::make_shared( @@ -597,7 +597,7 @@ ManifestFilePtr IcebergMetadata::getManifestFile(const String & filename, Int64 schema_processor, inherited_sequence_number, table_location, - getContext()); + context); }; if (manifest_cache) @@ -614,7 +614,7 @@ Strings IcebergMetadata::getDataFiles(const ActionsDAG * filter_dag) const if (!relevant_snapshot) return {}; - bool use_partition_pruning = filter_dag && getContext()->getSettingsRef()[Setting::use_iceberg_partition_pruning]; + bool use_partition_pruning = filter_dag && context->getSettingsRef()[Setting::use_iceberg_partition_pruning]; if (!use_partition_pruning && cached_unprunned_files_for_last_processed_snapshot.has_value()) return cached_unprunned_files_for_last_processed_snapshot.value(); @@ -625,7 +625,7 @@ Strings IcebergMetadata::getDataFiles(const ActionsDAG * filter_dag) const ManifestFilesPruner pruner( schema_processor, relevant_snapshot_schema_id, use_partition_pruning ? filter_dag : nullptr, - *manifest_file_ptr, getContext()); + *manifest_file_ptr, context); const auto & data_files_in_manifest = manifest_file_ptr->getFiles(); for (const auto & manifest_file_entry : data_files_in_manifest) { diff --git a/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.h b/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.h index 3f4005d153c4..4f915920dd58 100644 --- a/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.h +++ b/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.h @@ -24,7 +24,7 @@ namespace DB { -class IcebergMetadata : public IDataLakeMetadata, private WithContext +class IcebergMetadata : public IDataLakeMetadata { public: using ConfigurationObserverPtr = StorageObjectStorage::ConfigurationObserverPtr; @@ -114,6 +114,8 @@ class IcebergMetadata : public IDataLakeMetadata, private WithContext Int64 relevant_snapshot_id{-1}; String table_location; + ContextPtr context; + mutable std::optional cached_unprunned_files_for_last_processed_snapshot; void updateState(const ContextPtr & local_context, bool metadata_file_changed);