/** * Gets the Fiji column qualifier name. * * @return The Fiji column qualifier name. */ protected String getQualifier() { return mFijiColumnName.getQualifier(); }
/** * @return the Fiji column qualifier name of this cell. * @deprecated getQualifier is deprecated. Please use {@link #getColumn()}. This method will be * removed in the future. */ @Deprecated public String getQualifier() { return mColumn.getQualifier(); }
/** {@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); }
/** {@inheritDoc} */ @Override public int compareTo(FijiColumnName otherObj) { final int comparison = this.mFamily.compareTo(otherObj.mFamily); if (0 == comparison) { return (this.isFullyQualified() ? mQualifier : "") .compareTo(otherObj.isFullyQualified() ? otherObj.getQualifier() : ""); } else { return comparison; } } }
/** * 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 NavigableSet<String> getQualifiers(final String family) { final FijiColumnName column = FijiColumnName.create(family, null); validateColumnRequest(column); final NavigableSet<String> qualifiers = Sets.newTreeSet(); for (final FijiCell<?> cell : mResult.narrowView(column)) { qualifiers.add(cell.getColumn().getQualifier()); } return qualifiers; }
/** {@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; }
/** {@inheritDoc} */ @Override public FijiDataRequest getDataRequest() { initializeInputColumn(); return FijiDataRequest.create(mInputColumn.getFamily(), mInputColumn.getQualifier()); }
/** {@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())); }
/** * Produces all data from a given column name into the output column. * * @param input The input row. * @param context The producer context used to write. * @param columnName The column to read from. * @throws IOException If there is an IO error. */ private void produceAllVersions( FijiRowData input, ProducerContext context, FijiColumnName columnName) throws IOException { for (long timestamp : input.getTimestamps(columnName.getFamily(), columnName.getQualifier())) { // Read the data from the input column. Object data = input.getValue( mInputColumn.getFamily(), columnName.getQualifier(), timestamp); // Write the data to the output column. if (!mOutputColumn.isFullyQualified()) { context.put(columnName.getQualifier(), timestamp, data); } else { context.put(timestamp, data); } } } }
/** {@inheritDoc} */ @Override public boolean hasNext() { while (mCells.hasNext() && mCells.peek().getColumn().getQualifier().equals(mLastQualifier)) { mCells.next(); } return mCells.hasNext(); } }
/** {@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()); } } }
/** * 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(Text value, FijiTableContext context) throws IOException { Map<Field, String> fieldMap; try { fieldMap = CommonLogParser.get().parseCommonLog(value.toString()); } catch (ParseException pe) { reject(value, context, "Unable to parse row: " + value.toString()); return; } Field entityIdSource = Field.valueOf(getEntityIdSource()); EntityId eid = context.getEntityId(fieldMap.get(entityIdSource)); for (FijiColumnName fijiColumnName : getDestinationColumns()) { Field source = Field.valueOf(getSource(fijiColumnName)); String fieldValue = fieldMap.get(source); if (fieldValue != null) { // TODO(FIJIMRLIB-12) Add some ability to use timestamps derived from the log file. context.put(eid, fijiColumnName.getFamily(), fijiColumnName.getQualifier(), fieldValue); } else { reject(value, context, "Log file missing field: " + source); } } } }
/** {@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()); } }