diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/util/HiveUtil.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/util/HiveUtil.java index d1f0984ce9dc..d8c86dfccdc5 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/util/HiveUtil.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/util/HiveUtil.java @@ -749,11 +749,11 @@ public static List getColumnTypes(Map schema) public static OrcWriterOptions getOrcWriterOptions(Map schema, OrcWriterOptions orcWriterOptions) { if (schema.containsKey(ORC_BLOOM_FILTER_COLUMNS_KEY)) { - if (!schema.containsKey(ORC_BLOOM_FILTER_FPP_KEY)) { - throw new TrinoException(HIVE_INVALID_METADATA, "FPP for bloom filter is missing"); - } try { - double fpp = parseDouble(schema.get(ORC_BLOOM_FILTER_FPP_KEY)); + // use default fpp DEFAULT_BLOOM_FILTER_FPP if fpp key does not exist in table metadata + double fpp = schema.containsKey(ORC_BLOOM_FILTER_FPP_KEY) + ? parseDouble(schema.get(ORC_BLOOM_FILTER_FPP_KEY)) + : orcWriterOptions.getBloomFilterFpp(); return orcWriterOptions .withBloomFilterColumns(ImmutableSet.copyOf(COLUMN_NAMES_SPLITTER.splitToList(schema.get(ORC_BLOOM_FILTER_COLUMNS_KEY)))) .withBloomFilterFpp(fpp); diff --git a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/orc/TestOrcWriterOptions.java b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/orc/TestOrcWriterOptions.java index 3164d0d68c99..b9c48cdf3fee 100644 --- a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/orc/TestOrcWriterOptions.java +++ b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/orc/TestOrcWriterOptions.java @@ -116,4 +116,14 @@ private static Map createTablePropertiesWithFpp(String fpp) .put(ORC_BLOOM_FILTER_FPP_KEY, fpp) .buildOrThrow(); } + + @Test + public void testOrcWriterOptionsWithMissingFPPValue() + { + Map tableProperties = ImmutableMap.builder() + .put(ORC_BLOOM_FILTER_COLUMNS_KEY, "column_with_bloom_filter") + .buildOrThrow(); + OrcWriterOptions orcWriterOptions = getOrcWriterOptions(tableProperties, new OrcWriterOptions()); + assertThat(orcWriterOptions.getBloomFilterFpp()).isEqualTo(0.05); + } } diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergFileWriterFactory.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergFileWriterFactory.java index bc6cf15c7d2c..afaa84863826 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergFileWriterFactory.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergFileWriterFactory.java @@ -266,11 +266,10 @@ private IcebergFileWriter createOrcWriter( public static OrcWriterOptions withBloomFilterOptions(OrcWriterOptions orcWriterOptions, Map storageProperties) { if (storageProperties.containsKey(ORC_BLOOM_FILTER_COLUMNS_KEY)) { - if (!storageProperties.containsKey(ORC_BLOOM_FILTER_FPP_KEY)) { - throw new TrinoException(ICEBERG_INVALID_METADATA, "FPP for Bloom filter is missing"); - } try { - double fpp = parseDouble(storageProperties.get(ORC_BLOOM_FILTER_FPP_KEY)); + double fpp = storageProperties.containsKey(ORC_BLOOM_FILTER_FPP_KEY) + ? parseDouble(storageProperties.get(ORC_BLOOM_FILTER_FPP_KEY)) + : orcWriterOptions.getBloomFilterFpp(); return OrcWriterOptions.builderFrom(orcWriterOptions) .setBloomFilterColumns(ImmutableSet.copyOf(COLUMN_NAMES_SPLITTER.splitToList(storageProperties.get(ORC_BLOOM_FILTER_COLUMNS_KEY)))) .setBloomFilterFpp(fpp)