@@ -74,6 +74,7 @@ namespace ProfileEvents
7474namespace DB ::Setting
7575{
7676 extern const SettingsUInt64 output_format_compression_level;
77+ extern const SettingsTimezone iceberg_partition_timezone;
7778}
7879
7980namespace DB ::Iceberg
@@ -112,27 +113,32 @@ void writeMessageToFile(
112113 }
113114}
114115
115- std::optional<TransformAndArgument> parseTransformAndArgument (const String & transform_name_src)
116+
117+ std::optional<TransformAndArgument> parseTransformAndArgument (const String & transform_name_src, const String & time_zone)
116118{
117119 std::string transform_name = Poco::toLower (transform_name_src);
118120
121+ std::optional<String> time_zone_opt;
122+ if (!time_zone.empty ())
123+ time_zone_opt = time_zone;
124+
119125 if (transform_name == " year" || transform_name == " years" )
120- return TransformAndArgument{" toYearNumSinceEpoch" , std::nullopt };
126+ return TransformAndArgument{" toYearNumSinceEpoch" , std::nullopt , time_zone_opt };
121127
122128 if (transform_name == " month" || transform_name == " months" )
123- return TransformAndArgument{" toMonthNumSinceEpoch" , std::nullopt };
129+ return TransformAndArgument{" toMonthNumSinceEpoch" , std::nullopt , time_zone_opt };
124130
125131 if (transform_name == " day" || transform_name == " date" || transform_name == " days" || transform_name == " dates" )
126- return TransformAndArgument{" toRelativeDayNum" , std::nullopt };
132+ return TransformAndArgument{" toRelativeDayNum" , std::nullopt , time_zone_opt };
127133
128134 if (transform_name == " hour" || transform_name == " hours" )
129- return TransformAndArgument{" toRelativeHourNum" , std::nullopt };
135+ return TransformAndArgument{" toRelativeHourNum" , std::nullopt , time_zone_opt };
130136
131137 if (transform_name == " identity" )
132- return TransformAndArgument{" identity" , std::nullopt };
138+ return TransformAndArgument{" identity" , std::nullopt , std:: nullopt };
133139
134140 if (transform_name == " void" )
135- return TransformAndArgument{" tuple" , std::nullopt };
141+ return TransformAndArgument{" tuple" , std::nullopt , std:: nullopt };
136142
137143 if (transform_name.starts_with (" truncate" ) || transform_name.starts_with (" bucket" ))
138144 {
@@ -156,11 +162,11 @@ std::optional<TransformAndArgument> parseTransformAndArgument(const String & tra
156162
157163 if (transform_name.starts_with (" truncate" ))
158164 {
159- return TransformAndArgument{" icebergTruncate" , argument};
165+ return TransformAndArgument{" icebergTruncate" , argument, std:: nullopt };
160166 }
161167 else if (transform_name.starts_with (" bucket" ))
162168 {
163- return TransformAndArgument{" icebergBucket" , argument};
169+ return TransformAndArgument{" icebergBucket" , argument, std:: nullopt };
164170 }
165171 }
166172 return std::nullopt ;
0 commit comments