/** * Gets the Fiji column family name. * * @return The Fiji column family name. */ protected String getFamily() { return mFijiColumnName.getFamily(); }
/** * @return the Fiji column family name of this cell. * @deprecated getFamily is deprecated. Please use {@link #getColumn()}. This method will be * removed in the future. */ @Deprecated public String getFamily() { return mColumn.getFamily(); }
/** * Determines whether a particular column family has data in this row. * * @param family Column family to check for. * @return Whether the specified column family has data in this row. */ public boolean containsColumn(String family) { for (FijiColumnName column : mWritableData.keySet()) { if (family.equals(column.getFamily())) { return true; } } return false; }
/** {@inheritDoc} */ @Override public boolean equals(Object otherObj) { if (otherObj == this) { return true; } else if (null == otherObj) { return false; } else if (!otherObj.getClass().equals(getClass())) { return false; } final FijiColumnName other = (FijiColumnName) otherObj; return other.getFamily().equals(mFamily) && Objects.equal(other.getQualifier(), mQualifier); }
/** * Gets the set of column qualifiers that exist in a column family in this row. * * @param family Column family to get column qualifiers from. * @return Set of column qualifiers that exist in the <code>family</code> column family. */ public NavigableSet<String> getQualifiers(String family) { NavigableSet<String> qualifiers = Sets.newTreeSet(); for (FijiColumnName column : getDecodedData().keySet()) { if (family.equals(column.getFamily())) { qualifiers.add(column.getQualifier()); } } return qualifiers; }
/** * Given a FijiColumnName, return a sensible Hive column name. For a fully qualified column, * return the qualifier. Otherwise if it's a map type family, return the family name. * * @param fijiColumnName to generate the Hive column name for. * @return default Hive column name corresponding to the Fiji column. */ protected static String getDefaultHiveColumnName(FijiColumnName fijiColumnName) { if (fijiColumnName.isFullyQualified()) { return fijiColumnName.getQualifier(); } return fijiColumnName.getFamily(); }
/** * Initializes a producer context. * * @param taskContext Underlying Hadoop context. * @param outputColumn Column to write. * @throws IOException on I/O error. */ private InternalProducerContext( TaskInputOutputContext<EntityId, FijiRowData, ?, ?> taskContext, FijiColumnName outputColumn) throws IOException { super(taskContext); mTableContext = FijiTableContextFactory.create(taskContext); mFamily = Preconditions.checkNotNull(outputColumn.getFamily()); mQualifier = outputColumn.getQualifier(); }
/** * Constructs a row filter that excludes rows that have no data in <code>columnName</code>. * * @param columnName The column family:qualifier of interest. */ public HasColumnDataRowFilter(String columnName) { if (null == columnName) { throw new IllegalArgumentException("columnName is required"); } FijiColumnName fijiColName = FijiColumnName.create(columnName); if (!fijiColName.isFullyQualified()) { throw new IllegalArgumentException("Cannot use an unqualified column family."); } mFamily = fijiColName.getFamily(); mQualifier = fijiColName.getQualifier(); }
/** {@inheritDoc} */ @Override public Filter toHBaseFilter(FijiColumnName fijiColumnName, Context context) throws IOException { final String family = fijiColumnName.getFamily(); return new ColumnRangeFilter( toHBaseQualifierBytesOrNull(context, family, mMinQualifier), mIncludeMin, toHBaseQualifierBytesOrNull(context, family, mMaxQualifier), mIncludeMax); }
/** {@inheritDoc} */ @Override public void produce(FijiRowData input, ProducerContext context) throws IOException { if (!mInputColumn.isFullyQualified()) { // Copy the entire family. for (String qualifier : input.getQualifiers(mInputColumn.getFamily())) { FijiColumnName sourceColumn = new FijiColumnName(mInputColumn.getFamily(), qualifier); produceAllVersions(input, context, sourceColumn); } } else { // Copy just a specific column. produceAllVersions(input, context, mInputColumn); } }
/** {@inheritDoc} */ @Override public FijiDataRequest getDataRequest() { initializeInputColumn(); return FijiDataRequest.create(mInputColumn.getFamily(), mInputColumn.getQualifier()); }
/** {@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 Map<FijiColumnName, String> getColumnAnnotationsInFamily( final String family, final String exactKey ) throws IOException { requireState(State.OPEN, "get annotation"); final Map<FijiColumnName, String> collectedAnnotations = Maps.newHashMap(); for (String metaTableKey : keySet()) { if (isKCAColumnMetaTableKey(metaTableKey)) { final FijiColumnName column = columnFromMetaTableKey(metaTableKey); if (null != column && Objects.equal(family, column.getFamily()) && Objects.equal(exactKey, keyFromMetaTableKey(metaTableKey))) { collectedAnnotations.put(column, getKV(metaTableKey)); } } } return collectedAnnotations; }
/** {@inheritDoc} */ @Override public Set<FijiColumnName> removeColumnAnnotationsInFamily( final String family, final String exactKey ) throws IOException { requireState(State.OPEN, "remove annotation"); final Set<FijiColumnName> removedColumns = Sets.newHashSet(); for (String metaTableKey : keySet()) { if (isKCAColumnMetaTableKey(metaTableKey) && Objects.equal(exactKey, keyFromMetaTableKey(metaTableKey))) { final FijiColumnName column = columnFromMetaTableKey(metaTableKey); if (null != column && Objects.equal(family, column.getFamily())) { removedColumns.add(column); removeKV(metaTableKey); } } } return removedColumns; }
/** {@inheritDoc} */ @Override public Map<FijiColumnName, String> getColumnAnnotationsInFamily( final String family, final String exactKey ) throws IOException { requireState(State.OPEN, "get annotation"); final Map<FijiColumnName, String> collectedAnnotations = Maps.newHashMap(); for (String metaTableKey : keySet()) { if (isKCAColumnMetaTableKey(metaTableKey)) { final FijiColumnName column = columnFromMetaTableKey(metaTableKey); if (null != column && Objects.equal(family, column.getFamily()) && Objects.equal(exactKey, keyFromMetaTableKey(metaTableKey))) { collectedAnnotations.put(column, getKV(metaTableKey)); } } } return collectedAnnotations; }
/** {@inheritDoc} */ @Override public void produce(FijiRowData input, ProducerContext context) throws IOException { if (!input.containsColumn(getInputColumnName().getFamily(), getInputColumnName().getQualifier())) { LOG.debug("No " + getInputColumnName().getName() + " for entity: " + input.getEntityId()); } String string = input.getMostRecentValue(getInputColumnName().getFamily(), getInputColumnName().getQualifier()).toString(); // Run the regex on the input string. Matcher matcher = mPattern.matcher(string); if (matcher.matches()) { if (matcher.groupCount() == 1) { context.put(matcher.group(1)); } } else { LOG.debug(input.getEntityId().toString() + "'s data '" + string + "' does not match " + mPattern.pattern()); } } }
/** * Reports the request the applies for the specified column, or null if no such request exists. * * <p> * If the column belongs to a map-type family and there is a request for the entire family, * the request for the entire family is reported. * </p> * * @param columnName Requested column or family. * @return the request that applies for the specified column or family, * or null if no such request exists. */ public Column getRequestForColumn(final FijiColumnName columnName) { final Column column = getColumn(columnName); if (column != null) { return column; } if (columnName.isFullyQualified()) { return getColumn(columnName.getFamily(), null); } return null; }
/** * Prints the contents of a single fiji cell to the printstream. * * @param entityId The entity id. * @param cell The FijiCell. * @param printStream The stream to print to. */ private static void printCell(EntityId entityId, FijiCell<?> cell, PrintStream printStream) { printStream.printf("entity-id=%s [%d] %s:%s%n %s%n", formatEntityId(entityId), cell.getTimestamp(), cell.getColumn().getFamily(), cell.getColumn().getQualifier(), cell.getData()); }
/** {@inheritDoc} */ @Override public FijiDataRequest getDataRequest() { FijiDataRequestBuilder builder = FijiDataRequest.builder(); builder.newColumnsDef().withMaxVersions(Integer.MAX_VALUE) .add(mInputColumn.getFamily(), mInputColumn.getQualifier()); return builder.build(); }
/** {@inheritDoc} */ @Override public void produce(ImmutableBytesWritable hbaseRowKey, Result hbaseRow, FijiTableContext context) throws IOException { EntityId entity = context.getEntityId(Bytes.toString(hbaseRowKey.get())); for (ColumnDescriptor columnDescriptor : mColumnDescriptors) { KeyValue keyValue = hbaseRow.getColumnLatest(columnDescriptor.getHBaseFamilyBytes(), columnDescriptor.getHBaseQualifierBytes()); if (null == keyValue) { // No data in this HTable column, skip it. continue; } // Convert the HBase cell to a Fiji cell. DecodedCell<?> fijiCell = decodeHBaseCell(columnDescriptor, keyValue.getValue()); // Write it at the same timestamp as the HBase cell. final String family = columnDescriptor.getFijiColumnName().getFamily(); final String qualifier = columnDescriptor.getFijiColumnName().getQualifier(); context.put(entity, family, qualifier, keyValue.getTimestamp(), fijiCell.getData()); } }