Package org.kiji.schema

Examples of org.kiji.schema.KijiColumnName


  @Test
  public void testConstructedUriIsEscaped() {
    // SCHEMA-6. Column qualifier must be URL-encoded in CassandraKijiURI.
    final CassandraKijiURI uri =
        CassandraKijiURI.newBuilder("kiji-cassandra://zkhost/chost:5678/instance/table/")
        .addColumnName(new KijiColumnName("map:one two")).build();
    assertEquals(
        "kiji-cassandra://zkhost:2181/chost:5678/instance/table/map:one%20two/", uri.toString());
  }
View Full Code Here


    final KijiTableLayout layout = mTable.getLayout();
    final Set<KijiColumnName> layoutColumns = layout.getColumnNames();
    final Map<KijiColumnName, BoundColumnReaderSpec> boundOverrides = Maps.newHashMap();
    for (Map.Entry<KijiColumnName, ColumnReaderSpec> override
        : overrides.entrySet()) {
      final KijiColumnName column = override.getKey();
      if (!layoutColumns.contains(column)
          && !layoutColumns.contains(KijiColumnName.create(column.getFamily()))) {
        throw new NoSuchColumnException(String.format(
            "KijiTableLayout: %s does not contain column: %s", layout, column));
      } else {
        boundOverrides.put(column,
            BoundColumnReaderSpec.create(override.getValue(), column));
      }
    }
    mOverrides = boundOverrides;
    final Collection<BoundColumnReaderSpec> boundAlternatives = Sets.newHashSet();
    for (Map.Entry<KijiColumnName, ColumnReaderSpec> altsEntry
        : alternatives.entries()) {
      final KijiColumnName column = altsEntry.getKey();
      if (!layoutColumns.contains(column)
          && !layoutColumns.contains(KijiColumnName.create(column.getFamily()))) {
        throw new NoSuchColumnException(String.format(
            "KijiTableLayout: %s does not contain column: %s", layout, column));
      } else {
        boundAlternatives.add(
            BoundColumnReaderSpec.create(altsEntry.getValue(), altsEntry.getKey()));
View Full Code Here

      if (qualifier == null) {
        throw new NoSuchColumnException(String.format(
            "No column with ID %s in family %s of table %s.",
            qualifierID.getId(), family.getName(), mLayout.getName()));
      }
      final KijiColumnName kijiColumnName =
          new KijiColumnName(family.getName(), qualifier.getName());
      LOG.debug("Translated to Kiji group column {}.", kijiColumnName);
      return kijiColumnName;
    } else {
      // Map type family.
      assert family.isMapType();
      final KijiColumnName kijiColumnName = new KijiColumnName(family.getName(), rawQualifier);
      LOG.debug("Translated to Kiji map column '{}'.", kijiColumnName);
      return kijiColumnName;
    }
  }
View Full Code Here

      if (!family.getColumnMap().containsKey(qualifierName)) {
        throw new NoSuchColumnException(String.format(
            "No qualifier %s in family %s of table %s.",
            qualifierName, familyName, mLayout.getName()));
      }
      final KijiColumnName kijiColumnName = new KijiColumnName(familyName, qualifierName);
      LOG.debug("Translated to Kiji group type column {}.", kijiColumnName);
      return kijiColumnName;
    } else {
      // Map type family.
      assert family.isMapType();
      final KijiColumnName kijiColumnName = new KijiColumnName(familyName, qualifierName);
      LOG.debug("Translated to Kiji map type column '{}'.", kijiColumnName);
      return kijiColumnName;
    }
  }
View Full Code Here

    // If every column is paged, we should add a keyonly filter to a single column, so we can have
    // access to entityIds in our KijiRowData that is constructed.
    boolean completelyPaged = mKijiDataRequest.isPagingEnabled() ? true : false;

    for (KijiDataRequest.Column columnRequest : mKijiDataRequest.getColumns()) {
      final KijiColumnName kijiColumnName = columnRequest.getColumnName();
      final HBaseColumnName hbaseColumnName =
          mColumnNameTranslator.toHBaseColumnName(kijiColumnName);

      if (!columnRequest.isPagingEnabled()) {
        completelyPaged = false;

        // Do not include max-versions from columns with paging enabled:
        largestMaxVersions = Math.max(largestMaxVersions, columnRequest.getMaxVersions());
      }

      if (kijiColumnName.isFullyQualified()) {
        // Requests a fully-qualified column.
        // Adds this column to the Get request, and also as a filter.
        //
        // Filters are required here because we might end up requesting all cells from the
        // HBase family (ie. from the Kiji locality group), if a map-type family from that
        // locality group is also requested.
        addColumn(get, hbaseColumnName);
        columnFilters.addFilter(toFilter(columnRequest, hbaseColumnName, filterContext));

      } else {
        final FamilyLayout fLayout = tableLayout.getFamilyMap().get(kijiColumnName.getFamily());
        if (fLayout.isGroupType()) {
          // Requests all columns in a Kiji group-type family.
          // Expand the family request into individual column requests:
          for (String qualifier : fLayout.getColumnMap().keySet()) {
            final KijiColumnName fqKijiColumnName =
                KijiColumnName.create(kijiColumnName.getFamily(), qualifier);
            final HBaseColumnName fqHBaseColumnName =
                mColumnNameTranslator.toHBaseColumnName(fqKijiColumnName);
            addColumn(get, fqHBaseColumnName);
            columnFilters.addFilter(toFilter(columnRequest, fqHBaseColumnName, filterContext));
View Full Code Here

      final KijiDataRequest.Column columnRequest,
      final HBaseColumnName hbaseColumnName,
      final KijiColumnFilter.Context filterContext
  ) throws IOException {

    final KijiColumnName kijiColumnName = columnRequest.getColumnName();

    // Builds an HBase filter for the specified column:
    //     (HBase-family = Kiji-locality-group)
    // AND (HBase-qualifier = Kiji-family:qualifier / prefixed by Kiji-family:)
    // AND (ColumnPaginationFilter(limit=1))  // when paging or if max-versions is 1
    // AND (custom user filter)
    // AND (FirstKeyOnlyFilter)  // only when paging
    //
    // Note:
    //     We cannot use KeyOnlyFilter as this filter uses Filter.transform() which applies
    //     unconditionally on all the KeyValue in the HBase Result.
    final FilterList filter = new FilterList(FilterList.Operator.MUST_PASS_ALL);

    // Only let cells from the locality-group (ie. HBase family) the column belongs to, ie:
    //     HBase-family = Kiji-locality-group
    filter.addFilter(SchemaPlatformBridge.get().createFamilyFilter(
        CompareFilter.CompareOp.EQUAL,
        hbaseColumnName.getFamily()));

    if (kijiColumnName.isFullyQualified()) {
      // Only let cells from the fully-qualified column ie.:
      //     HBase-qualifier = Kiji-family:qualifier
      filter.addFilter(SchemaPlatformBridge.get().createQualifierFilter(
          CompareFilter.CompareOp.EQUAL,
          hbaseColumnName.getQualifier()));
    } else {
      // Only let cells from the map-type family ie.:
      //     HBase-qualifier starts with "Kiji-family:"
      filter.addFilter(new ColumnPrefixFilter(hbaseColumnName.getQualifier()));
    }

    if (columnRequest.isPagingEnabled()
        || (kijiColumnName.isFullyQualified() && (columnRequest.getMaxVersions() == 1))) {
      // For fully qualified columns where maxVersions = 1, we can use the
      // ColumnPaginationFilter to restrict the number of versions returned to at most 1.
      //
      // Other columns' maxVersions will be filtered client-side in HBaseKijiRowData.
      //
View Full Code Here

    if (qualifier == null) {
      throw new NoSuchColumnException(String.format("No qualifier %s in family %s of table %s.",
          qualifierName, familyName, mLayout.getName()));
    }

    final KijiColumnName kijiColumnName = new KijiColumnName(familyName, qualifierName);

    LOG.debug("Translated to Kiji column '{}'.", kijiColumnName);
    return kijiColumnName;
  }
View Full Code Here

  ) throws IOException {
    final List<BoundColumnReaderSpec> readerSpecs = Lists.newArrayList();
    for (Column columnRequest : request.getColumns()) {
      final ColumnReaderSpec readerSpec = columnRequest.getReaderSpec();
      if (readerSpec != null) {
        final KijiColumnName column = columnRequest.getColumnName();
        readerSpecs.add(BoundColumnReaderSpec.create(readerSpec, column));
      }
    }

    if (readerSpecs.isEmpty()) {
View Full Code Here

    final ImmutableSortedMap.Builder<KijiColumnName, List<KeyValue>> narrowedResults =
        ImmutableSortedMap.naturalOrder();

    for (Column columnRequest : narrowRequest.getColumns()) {
      final KijiColumnName requestColumnName = columnRequest.getColumnName();

      // We get here IF

      // `column` is a family, and `mDataRequest` contains a column request for the entire family.

      // OR

      // `column` is a family, and `mDataRequest` contains a column request for a qualified column
      // in the family.

      // OR

      // `column` is a qualified-column, and `mDataRequest` contains a request for the qualified
      // column.

      final List<KeyValue> exactColumn = mColumnResults.get(requestColumnName);
      if (exactColumn != null) {
        narrowedResults.put(requestColumnName, exactColumn);
      } else {

        // `column` is a qualified-column, and `mDataRequest` contains a column request for the
        // column's family.

        final List<KeyValue> familyResults =
            mColumnResults.get(KijiColumnName.create(requestColumnName.getFamily(), null));
        final List<KeyValue> qualifiedColumnResults =
            getQualifiedColumnKeyValues(columnRequest, mColumnTranslator, familyResults);

        narrowedResults.put(requestColumnName, qualifiedColumnResults);
      }
View Full Code Here

  private static List<KeyValue> getColumnKeyValues(
      final Column columnRequest,
      final HBaseColumnNameTranslator translator,
      final Result result
  ) {
    final KijiColumnName column = columnRequest.getColumnName();
    final List<KeyValue> keyValues = Arrays.asList(result.raw());

    if (column.isFullyQualified()) {
      return getQualifiedColumnKeyValues(columnRequest, translator, keyValues);
    } else {
      return getFamilyKeyValues(columnRequest, translator, keyValues);
    }
  }
View Full Code Here

TOP

Related Classes of org.kiji.schema.KijiColumnName

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.