133
133
import org .apache .iceberg .DataFiles ;
134
134
import org .apache .iceberg .DeleteFile ;
135
135
import org .apache .iceberg .DeleteFiles ;
136
+ import org .apache .iceberg .FileFormat ;
136
137
import org .apache .iceberg .FileMetadata ;
137
138
import org .apache .iceberg .FileScanTask ;
138
139
import org .apache .iceberg .IsolationLevel ;
281
282
import static io .trino .plugin .iceberg .IcebergTableProperties .FILE_FORMAT_PROPERTY ;
282
283
import static io .trino .plugin .iceberg .IcebergTableProperties .FORMAT_VERSION_PROPERTY ;
283
284
import static io .trino .plugin .iceberg .IcebergTableProperties .OBJECT_STORE_LAYOUT_ENABLED_PROPERTY ;
285
+ import static io .trino .plugin .iceberg .IcebergTableProperties .PARQUET_BLOOM_FILTER_COLUMNS_PROPERTY ;
284
286
import static io .trino .plugin .iceberg .IcebergTableProperties .PARTITIONING_PROPERTY ;
285
287
import static io .trino .plugin .iceberg .IcebergTableProperties .SORTED_BY_PROPERTY ;
286
288
import static io .trino .plugin .iceberg .IcebergTableProperties .getPartitioning ;
287
289
import static io .trino .plugin .iceberg .IcebergTableProperties .getTableLocation ;
288
290
import static io .trino .plugin .iceberg .IcebergUtil .buildPath ;
289
291
import static io .trino .plugin .iceberg .IcebergUtil .canEnforceColumnConstraintInSpecs ;
292
+ import static io .trino .plugin .iceberg .IcebergUtil .checkFormatForProperty ;
290
293
import static io .trino .plugin .iceberg .IcebergUtil .commit ;
291
294
import static io .trino .plugin .iceberg .IcebergUtil .createColumnHandle ;
292
295
import static io .trino .plugin .iceberg .IcebergUtil .deserializePartitionValue ;
370
373
import static org .apache .iceberg .TableProperties .DELETE_ISOLATION_LEVEL_DEFAULT ;
371
374
import static org .apache .iceberg .TableProperties .FORMAT_VERSION ;
372
375
import static org .apache .iceberg .TableProperties .OBJECT_STORE_ENABLED ;
376
+ import static org .apache .iceberg .TableProperties .PARQUET_BLOOM_FILTER_COLUMN_ENABLED_PREFIX ;
373
377
import static org .apache .iceberg .TableProperties .WRITE_DATA_LOCATION ;
374
378
import static org .apache .iceberg .TableProperties .WRITE_LOCATION_PROVIDER_IMPL ;
375
379
import static org .apache .iceberg .expressions .Expressions .alwaysTrue ;
@@ -392,6 +396,7 @@ public class IcebergMetadata
392
396
.add (FORMAT_VERSION_PROPERTY )
393
397
.add (OBJECT_STORE_LAYOUT_ENABLED_PROPERTY )
394
398
.add (DATA_LOCATION_PROPERTY )
399
+ .add (PARQUET_BLOOM_FILTER_COLUMNS_PROPERTY )
395
400
.add (PARTITIONING_PROPERTY )
396
401
.add (SORTED_BY_PROPERTY )
397
402
.build ();
@@ -2273,6 +2278,21 @@ public void setTableProperties(ConnectorSession session, ConnectorTableHandle ta
2273
2278
extraProperties .forEach (updateProperties ::set );
2274
2279
}
2275
2280
2281
+ if (properties .containsKey (PARQUET_BLOOM_FILTER_COLUMNS_PROPERTY )) {
2282
+ checkFormatForProperty (getFileFormat (icebergTable ).toIceberg (), FileFormat .PARQUET , PARQUET_BLOOM_FILTER_COLUMNS_PROPERTY );
2283
+ //noinspection unchecked
2284
+ List <String > parquetBloomFilterColumns = (List <String >) properties .get (PARQUET_BLOOM_FILTER_COLUMNS_PROPERTY )
2285
+ .orElseThrow (() -> new IllegalArgumentException ("The parquet_bloom_filter_columns property cannot be empty" ));
2286
+ if (parquetBloomFilterColumns .isEmpty ()) {
2287
+ icebergTable .properties ().keySet ().stream ()
2288
+ .filter (key -> key .startsWith (PARQUET_BLOOM_FILTER_COLUMN_ENABLED_PREFIX ))
2289
+ .forEach (updateProperties ::remove );
2290
+ }
2291
+ else {
2292
+ parquetBloomFilterColumns .forEach (column -> updateProperties .set (PARQUET_BLOOM_FILTER_COLUMN_ENABLED_PREFIX + column , "true" ));
2293
+ }
2294
+ }
2295
+
2276
2296
if (properties .containsKey (FILE_FORMAT_PROPERTY )) {
2277
2297
IcebergFileFormat fileFormat = (IcebergFileFormat ) properties .get (FILE_FORMAT_PROPERTY )
2278
2298
.orElseThrow (() -> new IllegalArgumentException ("The format property cannot be empty" ));
0 commit comments