use of org.apache.drill.exec.physical.impl.scan.project.ScanLevelProjection in project drill by apache.
the class TestImplicitColumnParser method testRevisedWildcardAndPartition.
/**
* Include both a wildcard and a partition column. The wildcard, in
* legacy mode, will create partition columns for any partitions not
* mentioned in the project list.
* <p>
* Tests proposed functionality: included only requested partition
* columns.
*/
@Test
public void testRevisedWildcardAndPartition() {
Path filePath = new Path("hdfs:///w/x/y/z.csv");
ImplicitColumnManager implictColManager = new ImplicitColumnManager(fixture.getOptionManager(), standardOptions(filePath));
ScanLevelProjection scanProj = ScanLevelProjection.build(RowSetTestUtils.projectList(SchemaPath.DYNAMIC_STAR, ScanTestUtils.partitionColName(8)), Lists.newArrayList(implictColManager.projectionParser()));
List<ColumnProjection> cols = scanProj.columns();
assertEquals(2, cols.size());
assertTrue(scanProj.columns().get(0) instanceof UnresolvedWildcardColumn);
assertTrue(scanProj.columns().get(1) instanceof PartitionColumn);
}
use of org.apache.drill.exec.physical.impl.scan.project.ScanLevelProjection in project drill by apache.
the class TestImplicitColumnParser method testFileMetadataColumnSelection.
/**
* Test including file metadata (AKA "implicit columns") in the project
* list.
*/
@Test
public void testFileMetadataColumnSelection() {
Path filePath = new Path("hdfs:///w/x/y/z.csv");
ImplicitColumnManager implictColManager = new ImplicitColumnManager(fixture.getOptionManager(), standardOptions(filePath));
// Simulate SELECT a, fqn, filEPath, filename, suffix ...
ScanLevelProjection scanProj = ScanLevelProjection.build(RowSetTestUtils.projectList("a", ScanTestUtils.FULLY_QUALIFIED_NAME_COL, // Sic, to test case sensitivity
"filEPath", ScanTestUtils.FILE_NAME_COL, ScanTestUtils.SUFFIX_COL), Lists.newArrayList(implictColManager.projectionParser()));
assertFalse(scanProj.projectAll());
assertEquals(5, scanProj.requestedCols().size());
assertEquals(5, scanProj.columns().size());
assertEquals("a", scanProj.columns().get(0).name());
assertEquals(ScanTestUtils.FULLY_QUALIFIED_NAME_COL, scanProj.columns().get(1).name());
assertEquals("filEPath", scanProj.columns().get(2).name());
assertEquals(ScanTestUtils.FILE_NAME_COL, scanProj.columns().get(3).name());
assertEquals(ScanTestUtils.SUFFIX_COL, scanProj.columns().get(4).name());
// Verify column type
assertTrue(scanProj.columns().get(0) instanceof UnresolvedColumn);
assertTrue(scanProj.columns().get(1) instanceof FileMetadataColumn);
assertTrue(scanProj.columns().get(2) instanceof FileMetadataColumn);
assertTrue(scanProj.columns().get(3) instanceof FileMetadataColumn);
assertTrue(scanProj.columns().get(4) instanceof FileMetadataColumn);
assertTrue(implictColManager.hasImplicitCols());
}
use of org.apache.drill.exec.physical.impl.scan.project.ScanLevelProjection in project drill by apache.
the class TestImplicitColumnParser method testPartitionColumnSelection.
/**
* Verify that partition columns, in any case, work.
*/
@Test
public void testPartitionColumnSelection() {
Path filePath = new Path("hdfs:///w/x/y/z.csv");
ImplicitColumnManager implictColManager = new ImplicitColumnManager(fixture.getOptionManager(), standardOptions(filePath));
String dir0 = ScanTestUtils.partitionColName(0);
// Sic: case insensitivity, but name in project list
// is preferred over "natural" name.
String dir1 = "DIR1";
String dir2 = ScanTestUtils.partitionColName(2);
ScanLevelProjection scanProj = ScanLevelProjection.build(RowSetTestUtils.projectList(dir2, dir1, dir0, "a"), Lists.newArrayList(implictColManager.projectionParser()));
assertEquals(4, scanProj.columns().size());
assertEquals(dir2, scanProj.columns().get(0).name());
assertEquals(dir1, scanProj.columns().get(1).name());
assertEquals(dir0, scanProj.columns().get(2).name());
assertEquals("a", scanProj.columns().get(3).name());
// Verify column type
assertTrue(scanProj.columns().get(0) instanceof PartitionColumn);
}
use of org.apache.drill.exec.physical.impl.scan.project.ScanLevelProjection in project drill by apache.
the class TestImplicitColumnParser method testPreferedWildcardExpansionWithOverlap.
@Test
public void testPreferedWildcardExpansionWithOverlap() {
Path filePath = new Path("hdfs:///w/x/y/z.csv");
ImplicitColumnOptions options = standardOptions(filePath);
options.useLegacyWildcardExpansion(true);
ImplicitColumnManager implictColManager = new ImplicitColumnManager(fixture.getOptionManager(), options);
ScanLevelProjection scanProj = ScanLevelProjection.build(RowSetTestUtils.projectList(SchemaPath.DYNAMIC_STAR, ScanTestUtils.partitionColName(1)), Lists.newArrayList(implictColManager.projectionParser()));
List<ColumnProjection> cols = scanProj.columns();
assertEquals(3, cols.size());
assertTrue(scanProj.columns().get(0) instanceof UnresolvedWildcardColumn);
assertTrue(scanProj.columns().get(1) instanceof PartitionColumn);
assertEquals(1, ((PartitionColumn) cols.get(1)).partition());
assertTrue(scanProj.columns().get(2) instanceof PartitionColumn);
assertEquals(0, ((PartitionColumn) cols.get(2)).partition());
}
use of org.apache.drill.exec.physical.impl.scan.project.ScanLevelProjection in project drill by apache.
the class TestImplicitColumnParser method testPreferredPartitionExpansion.
@Test
public void testPreferredPartitionExpansion() {
Path filePath = new Path("hdfs:///w/x/y/z.csv");
ImplicitColumnOptions options = standardOptions(filePath);
options.useLegacyWildcardExpansion(true);
ImplicitColumnManager implictColManager = new ImplicitColumnManager(fixture.getOptionManager(), options);
ScanLevelProjection scanProj = ScanLevelProjection.build(RowSetTestUtils.projectList(SchemaPath.DYNAMIC_STAR, ScanTestUtils.partitionColName(8)), Lists.newArrayList(implictColManager.projectionParser()));
List<ColumnProjection> cols = scanProj.columns();
assertEquals(4, cols.size());
assertTrue(scanProj.columns().get(0) instanceof UnresolvedWildcardColumn);
assertTrue(scanProj.columns().get(1) instanceof PartitionColumn);
assertEquals(8, ((PartitionColumn) cols.get(1)).partition());
assertTrue(scanProj.columns().get(2) instanceof PartitionColumn);
assertEquals(0, ((PartitionColumn) cols.get(2)).partition());
assertTrue(scanProj.columns().get(3) instanceof PartitionColumn);
assertEquals(1, ((PartitionColumn) cols.get(3)).partition());
}
Aggregations