Description
Currently we filter out the parent table columns while creating a view. If we have to support rollback we still need to write the parent table column metadata.
Instead of this we should filter out the duplicate columns in MetaDataEndpointImpl.combineColumns
// Here we are passed the parent's columns to add to a view, PHOENIX-3534 allows for a splittable // System.Catalog thus we only store the columns that are new to the view, not the parents columns, // thus here we remove everything that is ORDINAL.POSITION <= baseColumnCount and update the // ORDINAL.POSITIONS to be shifted accordingly. // TODO PHOENIX-4767 remove the following code that removes the base table column metadata in the next release if (PTableType.VIEW.equals(tableType) && !ViewType.MAPPED.equals(viewType)) { boolean isSalted = MetaDataUtil.getSaltBuckets(tableMetadata, GenericKeyValueBuilder.INSTANCE, new ImmutableBytesWritable()) > 0; int baseColumnCount = MetaDataUtil.getBaseColumnCount(tableMetadata) - (isSalted ? 1 : 0); if (baseColumnCount > 0) { Iterator<Mutation> mutationIterator = tableMetadata.iterator(); while (mutationIterator.hasNext()) { Mutation mutation = mutationIterator.next(); // if not null and ordinal position < base column count remove this mutation ImmutableBytesWritable ptr = new ImmutableBytesWritable(); MetaDataUtil.getMutationValue(mutation, PhoenixDatabaseMetaData.ORDINAL_POSITION_BYTES, GenericKeyValueBuilder.INSTANCE, ptr); if (MetaDataUtil.getMutationValue(mutation, PhoenixDatabaseMetaData.ORDINAL_POSITION_BYTES, GenericKeyValueBuilder.INSTANCE, ptr)) { int ordinalValue = PInteger.INSTANCE.getCodec().decodeInt(ptr, SortOrder.ASC); if (ordinalValue <= baseColumnCount) { mutationIterator.remove(); } else { if (mutation instanceof Put) { byte[] ordinalPositionBytes = new byte[PInteger.INSTANCE.getByteSize()]; int newOrdinalValue = ordinalValue - baseColumnCount; PInteger.INSTANCE.getCodec() .encodeInt(newOrdinalValue, ordinalPositionBytes, 0); byte[] family = Iterables.getOnlyElement(mutation.getFamilyCellMap().keySet()); MetaDataUtil.mutatePutValue((Put) mutation, family, PhoenixDatabaseMetaData.ORDINAL_POSITION_BYTES, ordinalPositionBytes); } } } } } }
Attachments
Attachments
Issue Links
- duplicates
-
PHOENIX-4767 Remove code in MetadataEndpointImpl.createTable that removes parent table column metadata
- Resolved
- supercedes
-
PHOENIX-4879 Add tests for salted tables to AlterMultiTenantTableWithViewsIT
- Resolved
- links to