135135import static com .facebook .presto .iceberg .IcebergPartitionType .ALL ;
136136import static com .facebook .presto .iceberg .IcebergSessionProperties .getCompressionCodec ;
137137import static com .facebook .presto .iceberg .IcebergSessionProperties .isPushdownFilterEnabled ;
138- import static com .facebook .presto .iceberg .IcebergTableProperties .COMMIT_RETRIES ;
139- import static com .facebook .presto .iceberg .IcebergTableProperties .DELETE_MODE ;
140- import static com .facebook .presto .iceberg .IcebergTableProperties .FILE_FORMAT_PROPERTY ;
141- import static com .facebook .presto .iceberg .IcebergTableProperties .FORMAT_VERSION ;
142138import static com .facebook .presto .iceberg .IcebergTableProperties .LOCATION_PROPERTY ;
143- import static com .facebook .presto .iceberg .IcebergTableProperties .METADATA_DELETE_AFTER_COMMIT ;
144- import static com .facebook .presto .iceberg .IcebergTableProperties .METADATA_PREVIOUS_VERSIONS_MAX ;
145- import static com .facebook .presto .iceberg .IcebergTableProperties .METRICS_MAX_INFERRED_COLUMN ;
146139import static com .facebook .presto .iceberg .IcebergTableProperties .PARTITIONING_PROPERTY ;
147140import static com .facebook .presto .iceberg .IcebergTableProperties .SORTED_BY_PROPERTY ;
148141import static com .facebook .presto .iceberg .IcebergTableType .CHANGELOG ;
166159import static com .facebook .presto .iceberg .IcebergUtil .tryGetProperties ;
167160import static com .facebook .presto .iceberg .IcebergUtil .tryGetSchema ;
168161import static com .facebook .presto .iceberg .IcebergUtil .validateTableMode ;
162+ import static com .facebook .presto .iceberg .IcebergWarningCode .SORT_COLUMN_TRANSFORM_NOT_SUPPORTED_WARNING ;
163+ import static com .facebook .presto .iceberg .IcebergWarningCode .USE_OF_DEPRECATED_TABLE_PROPERTY ;
169164import static com .facebook .presto .iceberg .PartitionFields .getPartitionColumnName ;
170165import static com .facebook .presto .iceberg .PartitionFields .getTransformTerm ;
171166import static com .facebook .presto .iceberg .PartitionFields .toPartitionFields ;
185180import static com .facebook .presto .iceberg .util .StatisticsUtil .calculateBaseTableStatistics ;
186181import static com .facebook .presto .iceberg .util .StatisticsUtil .calculateStatisticsConsideringLayout ;
187182import static com .facebook .presto .spi .StandardErrorCode .NOT_SUPPORTED ;
188- import static com .facebook .presto .spi .StandardWarningCode .SORT_COLUMN_TRANSFORM_NOT_SUPPORTED_WARNING ;
189183import static com .facebook .presto .spi .statistics .TableStatisticType .ROW_COUNT ;
190184import static com .google .common .base .Verify .verify ;
191185import static com .google .common .collect .ImmutableList .toImmutableList ;
201195import static org .apache .iceberg .SnapshotSummary .REMOVED_POS_DELETES_PROP ;
202196import static org .apache .iceberg .TableProperties .DELETE_ISOLATION_LEVEL ;
203197import static org .apache .iceberg .TableProperties .DELETE_ISOLATION_LEVEL_DEFAULT ;
204- import static org .apache .iceberg .TableProperties .SPLIT_SIZE ;
205- import static org .apache .iceberg .TableProperties .UPDATE_MODE ;
206198
207199public abstract class IcebergAbstractMetadata
208200 implements ConnectorMetadata
@@ -217,6 +209,7 @@ public abstract class IcebergAbstractMetadata
217209 protected final FilterStatsCalculatorService filterStatsCalculatorService ;
218210 protected Transaction transaction ;
219211 protected final StatisticsFileCache statisticsFileCache ;
212+ protected final IcebergTableProperties tableProperties ;
220213
221214 private final StandardFunctionResolution functionResolution ;
222215 private final ConcurrentMap <SchemaTableName , Table > icebergTables = new ConcurrentHashMap <>();
@@ -228,7 +221,8 @@ public IcebergAbstractMetadata(
228221 JsonCodec <CommitTaskData > commitTaskCodec ,
229222 NodeVersion nodeVersion ,
230223 FilterStatsCalculatorService filterStatsCalculatorService ,
231- StatisticsFileCache statisticsFileCache )
224+ StatisticsFileCache statisticsFileCache ,
225+ IcebergTableProperties tableProperties )
232226 {
233227 this .typeManager = requireNonNull (typeManager , "typeManager is null" );
234228 this .commitTaskCodec = requireNonNull (commitTaskCodec , "commitTaskCodec is null" );
@@ -237,6 +231,7 @@ public IcebergAbstractMetadata(
237231 this .nodeVersion = requireNonNull (nodeVersion , "nodeVersion is null" );
238232 this .filterStatsCalculatorService = requireNonNull (filterStatsCalculatorService , "filterStatsCalculatorService is null" );
239233 this .statisticsFileCache = requireNonNull (statisticsFileCache , "statisticsFileCache is null" );
234+ this .tableProperties = requireNonNull (tableProperties , "tableProperties is null" );
240235 }
241236
242237 protected final Table getIcebergTable (ConnectorSession session , SchemaTableName schemaTableName )
@@ -702,10 +697,10 @@ private static String columnExtraInfo(List<String> partitionTransforms)
702697 protected ImmutableMap <String , Object > createMetadataProperties (Table icebergTable , ConnectorSession session )
703698 {
704699 ImmutableMap .Builder <String , Object > properties = ImmutableMap .builder ();
705- properties .put (FILE_FORMAT_PROPERTY , getFileFormat (icebergTable ));
700+ properties .put (TableProperties . DEFAULT_FILE_FORMAT , getFileFormat (icebergTable ));
706701
707702 int formatVersion = ((BaseTable ) icebergTable ).operations ().current ().formatVersion ();
708- properties .put (FORMAT_VERSION , String .valueOf (formatVersion ));
703+ properties .put (TableProperties . FORMAT_VERSION , String .valueOf (formatVersion ));
709704
710705 if (!icebergTable .spec ().fields ().isEmpty ()) {
711706 properties .put (PARTITIONING_PROPERTY , toPartitionFields (icebergTable .spec ()));
@@ -715,12 +710,12 @@ protected ImmutableMap<String, Object> createMetadataProperties(Table icebergTab
715710 properties .put (LOCATION_PROPERTY , icebergTable .location ());
716711 }
717712
718- properties .put (DELETE_MODE , IcebergUtil .getDeleteMode (icebergTable ));
719- properties .put (UPDATE_MODE , IcebergUtil .getUpdateMode (icebergTable ));
720- properties .put (METADATA_PREVIOUS_VERSIONS_MAX , IcebergUtil .getMetadataPreviousVersionsMax (icebergTable ));
721- properties .put (METADATA_DELETE_AFTER_COMMIT , IcebergUtil .isMetadataDeleteAfterCommit (icebergTable ));
722- properties .put (METRICS_MAX_INFERRED_COLUMN , IcebergUtil .getMetricsMaxInferredColumn (icebergTable ));
723- properties .put (SPLIT_SIZE , IcebergUtil .getSplitSize (icebergTable ));
713+ properties .put (TableProperties . DELETE_MODE , IcebergUtil .getDeleteMode (icebergTable ));
714+ properties .put (TableProperties . UPDATE_MODE , IcebergUtil .getUpdateMode (icebergTable ));
715+ properties .put (TableProperties . METADATA_PREVIOUS_VERSIONS_MAX , IcebergUtil .getMetadataPreviousVersionsMax (icebergTable ));
716+ properties .put (TableProperties . METADATA_DELETE_AFTER_COMMIT_ENABLED , IcebergUtil .isMetadataDeleteAfterCommit (icebergTable ));
717+ properties .put (TableProperties . METRICS_MAX_INFERRED_COLUMN_DEFAULTS , IcebergUtil .getMetricsMaxInferredColumn (icebergTable ));
718+ properties .put (TableProperties . SPLIT_SIZE , IcebergUtil .getSplitSize (icebergTable ));
724719
725720 SortOrder sortOrder = icebergTable .sortOrder ();
726721 // TODO: Support sort column transforms (https://github.com/prestodb/presto/issues/24250)
@@ -1125,22 +1120,36 @@ public void setTableProperties(ConnectorSession session, ConnectorTableHandle ta
11251120
11261121 UpdateProperties updateProperties = transaction .updateProperties ();
11271122 for (Map .Entry <String , Object > entry : properties .entrySet ()) {
1128- switch (entry .getKey ()) {
1129- case COMMIT_RETRIES :
1130- updateProperties .set (TableProperties .COMMIT_NUM_RETRIES , String .valueOf (entry .getValue ()));
1131- break ;
1132- case SPLIT_SIZE :
1133- updateProperties .set (TableProperties .SPLIT_SIZE , entry .getValue ().toString ());
1134- break ;
1135- default :
1136- throw new PrestoException (NOT_SUPPORTED , "Updating property " + entry .getKey () + " is not supported currently" );
1123+ if (!tableProperties .getUpdatableProperties ()
1124+ .contains (entry .getKey ())) {
1125+ throw new PrestoException (NOT_SUPPORTED , "Updating property " + entry .getKey () + " is not supported currently" );
11371126 }
1127+ String propertyName = entry .getKey ();
1128+ if (tableProperties .getDeprecatedProperties ().containsKey (entry .getKey ())) {
1129+ String newPropertyKey = tableProperties .getDeprecatedProperties ().get (entry .getKey ());
1130+ PrestoWarning warning = getPrestoWarning (newPropertyKey , propertyName );
1131+ session .getWarningCollector ().add (warning );
1132+ propertyName = newPropertyKey ;
1133+ }
1134+ updateProperties .set (propertyName , String .valueOf (entry .getValue ()));
11381135 }
11391136
11401137 updateProperties .commit ();
11411138 transaction .commitTransaction ();
11421139 }
11431140
1141+ private static PrestoWarning getPrestoWarning (String newPropertyKey , String propertyName )
1142+ {
1143+ PrestoWarning warning ;
1144+ if (newPropertyKey == null ) {
1145+ warning = new PrestoWarning (USE_OF_DEPRECATED_TABLE_PROPERTY , format ("Property \" %s\" is deprecated and will be completely removed in a future version. Avoid using immediately." , propertyName ));
1146+ }
1147+ else {
1148+ warning = new PrestoWarning (USE_OF_DEPRECATED_TABLE_PROPERTY , format ("Property \" %s\" has been renamed to \" %s\" . This will become an error in future versions." , propertyName , newPropertyKey ));
1149+ }
1150+ return warning ;
1151+ }
1152+
11441153 /**
11451154 * Deletes all the files for a specific predicate
11461155 *
0 commit comments