/** {@inheritDoc} */ @Override public <T> Iterator<FijiCell<T>> iterator(final String family) { final FamilyLayout familyLayout = mLayout.getFamilyMap().get(family); Preconditions.checkArgument(familyLayout != null, "Column %s has no data request.", family); Preconditions.checkState(familyLayout.isMapType(), "iterator(String family) is only enabled on map type column families." + " The column family [%s], is a group type column family." + " Please use the iterator(String family, String qualifier) method.", family); return iterator(family, null); }
/** {@inheritDoc} */ @Override public <T> NavigableMap<String, T> getMostRecentValues(String family) throws IOException { Preconditions.checkState(mTableLayout.getFamilyMap().get(family).isMapType(), "getMostRecentValues(String family) is only enabled" + " on map type column families. The column family [%s], is a group type column family." + " Please use the getMostRecentValues(String family, String qualifier) method.", family); final NavigableMap<String, T> result = Maps.newTreeMap(); for (String qualifier : getQualifiers(family)) { final T value = getMostRecentValue(family, qualifier); result.put(qualifier, value); } return result; }
/** {@inheritDoc} */ @Override public <T> NavigableMap<String, NavigableMap<Long, FijiCell<T>>> getCells(String family) throws IOException { Preconditions.checkState(mTableLayout.getFamilyMap().get(family).isMapType(), "getCells(String family) is only enabled" + " on map type column families. The column family [%s], is a group type column family." + " Please use the getCells(String family, String qualifier) method.", family); final NavigableMap<String, NavigableMap<Long, FijiCell<T>>> result = Maps.newTreeMap(); for (String qualifier : getQualifiers(family)) { final NavigableMap<Long, FijiCell<T>> cells = getCells(family, qualifier); result.put(qualifier, cells); } return result; }
/** {@inheritDoc} */ @Override public <T> NavigableMap<String, FijiCell<T>> getMostRecentCells(String family) throws IOException { Preconditions.checkState(mTableLayout.getFamilyMap().get(family).isMapType(), "getMostRecentCells(String family) is only enabled" + " on map type column families. The column family [%s], is a group type column family." + " Please use the getMostRecentCells(String family, String qualifier) method.", family); final NavigableMap<String, FijiCell<T>> result = Maps.newTreeMap(); for (String qualifier : getQualifiers(family)) { final FijiCell<T> cell = getMostRecentCell(family, qualifier); result.put(qualifier, cell); } return result; }
/** {@inheritDoc} */ @Override public <T> NavigableMap<String, NavigableMap<Long, T>> getValues(String family) throws IOException { Preconditions.checkState(mTableLayout.getFamilyMap().get(family).isMapType(), "getValues(String family) is only enabled on map " + "type column families. The column family [%s], is a group type column family. Please use " + "the getValues(String family, String qualifier) method.", family); final NavigableMap<String, NavigableMap<Long, T>> result = Maps.newTreeMap(); for (String qualifier : getQualifiers(family)) { final NavigableMap<Long, T> timeseries = getValues(family, qualifier); result.put(qualifier, timeseries); } return result; }
/** {@inheritDoc} */ @Override public FijiPager getPager(String family) throws FijiColumnPagingNotEnabledException { final FijiColumnName fijiFamily = FijiColumnName.create(family, null); Preconditions.checkState(mTableLayout.getFamilyMap().get(family).isMapType(), "getPager(String family) is only enabled on map type column families. " + "The column family '%s' is a group type column family. " + "Please use the getPager(String family, String qualifier) method.", family); return new HBaseMapFamilyPager(mEntityId, mDataRequest, mTable, fijiFamily); }
/** {@inheritDoc} */ @Override public <T> Iterable<FijiCell<T>> asIterable(String family) { final FijiColumnName column = FijiColumnName.create(family, null); Preconditions.checkArgument( mDataRequest.getRequestForColumn(column) != null, "Column %s has no data request.", column); Preconditions.checkState(mTableLayout.getFamilyMap().get(family).isMapType(), "asIterable(String family) is only enabled" + " on map type column families. The column family [%s], is a group type column family." + " Please use the asIterable(String family, String qualifier) method.", family); return new CellIterable<T>(column, this, mTable.getColumnNameTranslator()); }
/** {@inheritDoc} */ @Override public <T> Iterator<FijiCell<T>> iterator(String family) throws IOException { final FijiColumnName column = FijiColumnName.create(family, null); Preconditions.checkArgument( mDataRequest.getRequestForColumn(column) != null, "Column %s has no data request.", column); Preconditions.checkState(mTableLayout.getFamilyMap().get(family).isMapType(), "iterator(String family) is only enabled" + " on map type column families. The column family [%s], is a group type column family." + " Please use the iterator(String family, String qualifier) method.", family); return new FijiCellIterator<T>(this, column, mTable.getColumnNameTranslator()); }
/** {@inheritDoc} */ @Override public FijiColumnName toFijiColumnName(HBaseColumnName hbaseColumnName) throws NoSuchColumnException { LOG.debug("Translating HBase column name '{}' to Fiji column name.", hbaseColumnName); final String familyName = Bytes.toString(hbaseColumnName.getFamily()); final String qualifierName = Bytes.toString(hbaseColumnName.getQualifier()); final FamilyLayout family = mLayout.getFamilyMap().get(familyName); // Validate that the family exists if (family == null) { throw new NoSuchColumnException(String.format("No family %s in layout for table %s.", familyName, mLayout.getName())); } // Validate that the qualifier exists final ColumnLayout qualifier = family.getColumnMap().get(qualifierName); if (qualifier == null) { throw new NoSuchColumnException(String.format("No qualifier %s in family %s of table %s.", qualifierName, familyName, mLayout.getName())); } final FijiColumnName fijiColumnName = new FijiColumnName(familyName, qualifierName); LOG.debug("Translated to Fiji column '{}'.", fijiColumnName); return fijiColumnName; }
/** {@inheritDoc} */ @Override public <T> NavigableMap<String, NavigableMap<Long, FijiCell<T>>> getCells(final String family) { final FijiColumnName column = FijiColumnName.create(family, null); validateColumnRequest(column); Preconditions.checkState(mLayout.getFamilyMap().get(family).isMapType(), "getCells(String family) is only enabled on map type column families." + " The column family [%s], is a group type column family." + " Please use the getCells(String family, String qualifier) method.", family); final NavigableMap<String, NavigableMap<Long, FijiCell<T>>> qualifiers = Maps.newTreeMap(); for (final FijiCell<T> cell : mResult.<T>narrowView(column)) { NavigableMap<Long, FijiCell<T>> columnValues = qualifiers.get(cell.getColumn().getQualifier()); if (columnValues == null) { columnValues = Maps.newTreeMap(TimestampComparator.INSTANCE); qualifiers.put(cell.getColumn().getQualifier(), columnValues); } columnValues.put(cell.getTimestamp(), cell); } return qualifiers; }
final FamilyLayout family = layout.getFamilyMap().get(rawColumn.getFamily()); if (null == family) { throw new RuntimeException(String.format(
/** {@inheritDoc} */ @Override public <T> NavigableMap<String, NavigableMap<Long, T>> getValues(final String family) { final FijiColumnName column = FijiColumnName.create(family, null); validateColumnRequest(column); Preconditions.checkState(mLayout.getFamilyMap().get(family).isMapType(), "getValues(String family) is only enabled on map type column families." + " The column family [%s], is a group type column family." + " Please use the getValues(String family, String qualifier) method.", family); final NavigableMap<String, NavigableMap<Long, T>> qualifiers = Maps.newTreeMap(); for (final FijiCell<T> cell : mResult.<T>narrowView(column)) { NavigableMap<Long, T> columnValues = qualifiers.get(cell.getColumn().getQualifier()); if (columnValues == null) { columnValues = Maps.newTreeMap(TimestampComparator.INSTANCE); qualifiers.put(cell.getColumn().getQualifier(), columnValues); } columnValues.put(cell.getTimestamp(), cell.getData()); } return qualifiers; }
/** {@inheritDoc} */ @Override public HBaseColumnName toHBaseColumnName(FijiColumnName fijiColumnName) throws NoSuchColumnException { final String familyName = fijiColumnName.getFamily(); final String qualifierName = fijiColumnName.getQualifier(); // Validate that the family exists final FamilyLayout family = mLayout.getFamilyMap().get(familyName); if (family == null) { throw new NoSuchColumnException(String.format("No family %s in table %s.", familyName, mLayout.getName())); } // Validate that the qualifier exists within the layout if (!family.getColumnMap().containsKey(qualifierName)) { throw new NoSuchColumnException(String.format( "No qualifier %s in family %s of table %s.", qualifierName, familyName, mLayout.getName())); } return new HBaseColumnName( Bytes.toBytes(fijiColumnName.getFamily()), Bytes.toBytes(fijiColumnName.getQualifier())); }
/** {@inheritDoc} */ @Override public FijiPager getPager(final String family) throws FijiColumnPagingNotEnabledException { final FijiColumnName column = FijiColumnName.create(family, null); Preconditions.checkState(mLayout.getFamilyMap().get(family).isMapType(), "getPager(String family) is only enabled on map type column families. " + "The column family '%s' is a group type column family. " + "Please use the getPager(String family, String qualifier) method.", family); final Column columnRequest = mResult.getDataRequest().getColumn(column); Preconditions.checkNotNull(columnRequest, "Requested column %s is not included in the data request %s.", column, mResult.getDataRequest()); if (!columnRequest.isPagingEnabled()) { throw new FijiColumnPagingNotEnabledException( String.format("Requested column %s does not have paging enabled in data request %s.", column, mResult.getDataRequest())); } return new FijiResultQualifierPager(mResult.narrowView(column), mLayout); }
/** {@inheritDoc}*/ @Override public HBaseColumnName toHBaseColumnName(FijiColumnName fijiColumnName) throws NoSuchColumnException { final String familyName = fijiColumnName.getFamily(); final String qualifierName = fijiColumnName.getQualifier(); // Validate the Fiji family final FamilyLayout family = mLayout.getFamilyMap().get(familyName); if (family == null) { throw new NoSuchColumnException(fijiColumnName.toString()); } // Validate the Fiji qualifier if (family.isGroupType() && !family.getColumnMap().containsKey(qualifierName)) { throw new NoSuchColumnException(fijiColumnName.toString()); } final byte[] localityGroupBytes = Bytes.toBytes(family.getLocalityGroup().getName()); final byte[] familyBytes = Bytes.toBytes(familyName); final byte[] qualifierBytes = Bytes.toBytes(qualifierName); final byte[] hbaseQualifierBytes = ShortColumnNameTranslator.concatWithSeparator(SEPARATOR, familyBytes, qualifierBytes); return new HBaseColumnName(localityGroupBytes, hbaseQualifierBytes); }
final FamilyLayout familyLayout = capsule.getLayout().getFamilyMap().get(family); if (null == familyLayout) { throw new NoSuchColumnException(String.format("Family '%s' not found.", family));
/** * Validates a data request against this validator's table layout. * * @param dataRequest The FijiDataRequest to validate. * @throws FijiDataRequestException If the data request is invalid. */ public void validate(FijiDataRequest dataRequest) { for (FijiDataRequest.Column column : dataRequest.getColumns()) { final String qualifier = column.getQualifier(); final FijiTableLayout.LocalityGroupLayout.FamilyLayout fLayout = mTableLayout.getFamilyMap().get(column.getFamily()); if (null == fLayout) { throw new FijiDataRequestException(String.format("Table '%s' has no family named '%s'.", mTableLayout.getName(), column.getFamily())); } if (fLayout.isGroupType() && (null != column.getQualifier())) { if (!fLayout.getColumnMap().containsKey(qualifier)) { throw new FijiDataRequestException(String.format("Table '%s' has no column '%s'.", mTableLayout.getName(), column.getName())); } } } } }
/** {@inheritDoc} */ @Override public void deleteFamily(EntityId entityId, String family, long upToTimestamp) throws IOException { final HBaseFijiTableWriter.WriterLayoutCapsule capsule = mWriterLayoutCapsule; final FamilyLayout familyLayout = capsule.getLayout().getFamilyMap().get(family); if (null == familyLayout) { throw new NoSuchColumnException(String.format("Family '%s' not found.", family)); } if (familyLayout.getLocalityGroup().getFamilyMap().size() > 1) { // There are multiple families within the locality group, so we need to be clever. if (familyLayout.isGroupType()) { deleteGroupFamily(entityId, familyLayout, upToTimestamp); } else if (familyLayout.isMapType()) { deleteMapFamily(entityId, familyLayout, upToTimestamp); } else { throw new RuntimeException("Internal error: family is neither map-type nor group-type."); } return; } // The only data in this HBase family is the one Fiji family, so we can delete everything. final HBaseColumnName hbaseColumnName = capsule.getColumnNameTranslator() .toHBaseColumnName(FijiColumnName.create(family)); final Delete delete = new Delete(entityId.getHBaseRowKey()); delete.deleteFamily(hbaseColumnName.getFamily(), upToTimestamp); // Buffer the delete. updateBuffer(delete); }
final String qualifierName = fijiColumnName.getQualifier(); final FamilyLayout family = mLayout.getFamilyMap().get(familyName); if (family == null) { throw new NoSuchColumnException(fijiColumnName.toString());
/** * Get a decoder function for a column. * * @param column to decode. * @param layout of table. * @param translator for table. * @param decoderProvider for table. * @param <T> type of values in the column. * @return a decode for the column. */ public static <T> Function<KeyValue, FijiCell<T>> getDecoderFunction( final FijiColumnName column, final FijiTableLayout layout, final HBaseColumnNameTranslator translator, final CellDecoderProvider decoderProvider ) { if (column.isFullyQualified()) { final FijiCellDecoder<T> decoder = decoderProvider.getDecoder(column); return new QualifiedColumnDecoder<T>(column, decoder); } final FamilyLayout family = layout.getFamilyMap().get(column.getFamily()); if (family.isMapType()) { return new MapFamilyDecoder<T>(translator, decoderProvider.<T>getDecoder(column)); } else { return new GroupFamilyDecoder<T>(translator, decoderProvider); } }