List of usage examples for org.apache.commons.compress.utils ByteUtils fromLittleEndian
public static long fromLittleEndian(byte[] bytes, final int off, final int length)
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()); }