Example usage for org.apache.commons.compress.utils ByteUtils fromLittleEndian

List of usage examples for org.apache.commons.compress.utils ByteUtils fromLittleEndian

Introduction

In this page you can find the example usage for org.apache.commons.compress.utils ByteUtils fromLittleEndian.

Prototype

public static long fromLittleEndian(byte[] bytes, final int off, final int length) 

Source Link

Document

Reads the given byte array as a little endian long.

Usage

From source file:org.apache.hawq.pxf.plugins.ignite.IgnitePartitionFragmenter.java

/**
 * Insert partition constraints into the prepared SQL query.
 *
 * @param inputData pre-validated PXF InputData
 * @param sb the SQL query that is prepared for appending extra WHERE constraints.
 *//*from   w  ww.j  a  va  2  s. com*/
public static void buildFragmenterSql(InputData inputData, StringBuilder sb) {
    if (LOG.isDebugEnabled()) {
        LOG.debug("buildFragmenterSql() called");
    }

    if (inputData.getUserProperty("PARTITION_BY") == null) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("buildFragmenterSql(): Partition is not used");
        }
        return;
    }

    byte[] meta = inputData.getFragmentMetadata();
    if (meta == null) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("buildFragmenterSql(): Fragment metadata is null, no partition constraints added");
        }
        return;
    }

    // Note that these parameters have already been validated when constructing fragment.
    String[] partitionBy = inputData.getUserProperty("PARTITION_BY").split(":");
    String partitionColumn = partitionBy[0];
    PartitionType partitionType = PartitionType.typeOf(partitionBy[1]);

    if (!sb.toString().contains("WHERE")) {
        sb.append(" WHERE ");
    } else {
        sb.append(" AND ");
    }

    switch (partitionType) {
    case DATE: {
        if (LOG.isDebugEnabled()) {
            LOG.debug("buildFragmenterSql(): DATE partition found");
        }

        // Get fragment metadata
        Date fragStart = new Date(ByteUtils.fromLittleEndian(meta, 0, 8));
        Date fragEnd = new Date(ByteUtils.fromLittleEndian(meta, 8, 8));

        // Add constraints
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        sb.append(partitionColumn).append(">=").append("'" + df.format(fragStart) + "'");
        sb.append(" AND ");
        sb.append(partitionColumn).append("<").append("'" + df.format(fragEnd) + "'");

        if (LOG.isDebugEnabled()) {
            LOG.debug("buildFragmenterSql(): DATE partition constraints added");
        }
        break;
    }
    case INT: {
        if (LOG.isDebugEnabled()) {
            LOG.debug("buildFragmenterSql(): INT partition found");
        }

        // Get fragment metadata
        int fragStart = (int) ByteUtils.fromLittleEndian(meta, 0, 4);
        int fragEnd = (int) ByteUtils.fromLittleEndian(meta, 4, 4);

        // Add constraints
        sb.append(partitionColumn).append(">=").append(fragStart);
        sb.append(" AND ");
        sb.append(partitionColumn).append("<").append(fragEnd);

        if (LOG.isDebugEnabled()) {
            LOG.debug("buildFragmenterSql(): INT partition constraints added");
        }
        break;
    }
    case ENUM: {
        if (LOG.isDebugEnabled()) {
            LOG.debug("buildFragmenterSql(): ENUM partition found");
        }

        // Add constraints. Fragment metadata should not be parsed.
        sb.append(partitionColumn).append("='").append(new String(meta)).append("'");

        if (LOG.isDebugEnabled()) {
            LOG.debug("buildFragmenterSql(): ENUM partition constraints added");
        }
        break;
    }
    }
}

From source file:org.apache.hawq.pxf.plugins.ignite.IgnitePartitionFragmenterTest.java

@Test
public void testPartitionByDateOfMonth() throws Exception {
    when(inputData.getUserProperty("PARTITION_BY")).thenReturn("cdate:date");
    when(inputData.getUserProperty("RANGE")).thenReturn("2008-01-01:2009-01-01");
    when(inputData.getUserProperty("INTERVAL")).thenReturn("1:month");

    IgnitePartitionFragmenter fragment = new IgnitePartitionFragmenter(inputData);
    List<Fragment> fragments = fragment.getFragments();
    assertEquals(12, fragments.size());//  ww w .  ja  v a2  s  .  com

    // Fragment 1
    byte[] fragMeta = fragments.get(0).getMetadata();
    long fragStart = ByteUtils.fromLittleEndian(fragMeta, 0, 8);
    long fragEnd = ByteUtils.fromLittleEndian(fragMeta, 8, 8);
    assertDateEquals(fragStart, 2008, 1, 1);
    assertDateEquals(fragEnd, 2008, 2, 1);

    // Fragment 12
    fragMeta = fragments.get(11).getMetadata();
    fragStart = ByteUtils.fromLittleEndian(fragMeta, 0, 8);
    fragEnd = ByteUtils.fromLittleEndian(fragMeta, 8, 8);
    assertDateEquals(fragStart, 2008, 12, 1);
    assertDateEquals(fragEnd, 2009, 1, 1);

    // End date > Start date
    when(inputData.getUserProperty("RANGE")).thenReturn("2008-01-01:2001-01-01");
    fragment = new IgnitePartitionFragmenter(inputData);
    fragments = fragment.getFragments();
    assertEquals(0, fragments.size());
}

From source file:org.apache.hawq.pxf.plugins.ignite.IgnitePartitionFragmenterTest.java

@Test
public void testPartitionByInt() throws Exception {
    when(inputData.getUserProperty("PARTITION_BY")).thenReturn("year:int");
    when(inputData.getUserProperty("RANGE")).thenReturn("2001:2012");
    when(inputData.getUserProperty("INTERVAL")).thenReturn("2");

    IgnitePartitionFragmenter fragment = new IgnitePartitionFragmenter(inputData);
    List<Fragment> fragments = fragment.getFragments();
    assertEquals(6, fragments.size());//from  ww w  .  j  av  a2 s. c om

    // Fragment 1
    byte[] fragMeta = fragments.get(0).getMetadata();
    int fragStart = (int) ByteUtils.fromLittleEndian(fragMeta, 0, 4);
    int fragEnd = (int) ByteUtils.fromLittleEndian(fragMeta, 4, 4);
    assertEquals(2001, fragStart);
    assertEquals(2003, fragEnd);

    // Fragment 6
    fragMeta = fragments.get(5).getMetadata();
    fragStart = (int) ByteUtils.fromLittleEndian(fragMeta, 0, 4);
    fragEnd = (int) ByteUtils.fromLittleEndian(fragMeta, 4, 4);
    assertEquals(2011, fragStart);
    assertEquals(2012, fragEnd);

    // End > Start
    when(inputData.getUserProperty("RANGE")).thenReturn("2013:2012");
    fragment = new IgnitePartitionFragmenter(inputData);
    assertEquals(0, fragment.getFragments().size());
}