public <T> T valueForDirname(FieldPartitioner<?, T> field, String name) { return valueForDirname(field, schema, name); }
@SuppressWarnings("unchecked") private PartitionKey keyFromDirectory(String name) { final FieldPartitioner fp = Accessor.getDefault().getFieldPartitioners(partitionStrategy).get(0); final List<Object> values = Lists.newArrayList(); if (partitionKey != null) { values.addAll(partitionKey.getValues()); } values.add(convert.valueForDirname(fp, name)); return new PartitionKey(values.toArray()); }
public StorageKey toKey(Path fromPath, StorageKey storage) { final List<FieldPartitioner> partitioners = Accessor.getDefault().getFieldPartitioners(storage.getPartitionStrategy()); final List<Object> values = Lists.newArrayList( new Object[partitioners.size()]); Path currentPath = fromPath; int index = partitioners.size() - 1; while (currentPath != null && index >= 0) { values.set(index, valueForDirname( (FieldPartitioner<?, ?>) partitioners.get(index), currentPath.getName())); // update currentPath = currentPath.getParent(); index -= 1; } storage.replaceValues(values); return storage; }
@SuppressWarnings("unchecked") public PartitionKey keyFromDirectory(Path dir) { Path relDir = null; URI relUri = directory.toUri().relativize(dir.toUri()); if (!relUri.toString().isEmpty()) { relDir = new Path(relUri); Preconditions.checkState(!relDir.equals(dir), "Partition directory %s is not " + "relative to dataset directory %s", dir, directory); } List<String> pathComponents = Lists.newArrayList(); while (relDir != null && !relDir.getName().equals("")) { pathComponents.add(0, relDir.getName()); relDir = relDir.getParent(); } List<FieldPartitioner> fps = Accessor.getDefault().getFieldPartitioners(partitionStrategy); Preconditions.checkState(pathComponents.size() <= fps.size(), "Number of components in partition directory %s (%s) exceeds number of field " + "partitioners %s", dir, pathComponents, partitionStrategy); List<Object> values = Lists.newArrayList(); for (int i = 0; i < pathComponents.size(); i++) { values.add(convert.valueForDirname(fps.get(i), pathComponents.get(i))); } if (partitionKey != null) { values.addAll(0, partitionKey.getValues()); } return new PartitionKey(values.toArray()); }
@Test public void testNoValidation() { Assert.assertEquals(13, (int) convert.valueForDirname( new MonthFieldPartitioner("timestamp", "month"), "month=13")); }
@Test public void testIgnoresPartitionName() { Assert.assertEquals("10", PathConversion.dirnameToValueString("10")); Assert.assertEquals("10", PathConversion.dirnameToValueString("=10")); Assert.assertEquals("10", PathConversion.dirnameToValueString("anything=10")); Assert.assertEquals(10, (int) convert.valueForDirname( new MonthFieldPartitioner("timestamp", "month"), "10")); Assert.assertEquals(10, (int) convert.valueForDirname( new MonthFieldPartitioner("timestamp", "month"), "=10")); Assert.assertEquals(10, (int) convert.valueForDirname( new MonthFieldPartitioner("timestamp", "month"), "anything=10")); Assert.assertEquals(10, (int) convert.valueForDirname( new MonthFieldPartitioner("timestamp", "month"), "even=strange=10")); }
values.add(PathConversion.valueForDirname(fp, schema, stringValue));
fp.getName(), conversion.valueForDirname(fp, parts.next()));