use of org.apache.drill.exec.physical.impl.scan.project.AbstractUnresolvedColumn.UnresolvedColumn in project drill by apache.
the class ScanLevelProjection method expandOutputSchema.
private boolean expandOutputSchema() {
if (readerSchema == null) {
return false;
}
for (int i = 0; i < readerSchema.size(); i++) {
ColumnMetadata col = readerSchema.metadata(i);
// automatically.
if (col.booleanProperty(ColumnMetadata.EXCLUDE_FROM_WILDCARD)) {
continue;
}
outputCols.add(new UnresolvedColumn(null, col));
}
return true;
}
use of org.apache.drill.exec.physical.impl.scan.project.AbstractUnresolvedColumn.UnresolvedColumn in project drill by apache.
the class ScanLevelProjection method addTableColumn.
private void addTableColumn(RequestedColumn inCol) {
ColumnMetadata outputCol = null;
if (readerSchema != null) {
outputCol = readerSchema.metadata(inCol.name());
}
addTableColumn(new UnresolvedColumn(inCol, outputCol));
}
use of org.apache.drill.exec.physical.impl.scan.project.AbstractUnresolvedColumn.UnresolvedColumn in project drill by apache.
the class TestImplicitColumnProjection method testProjectList.
/**
* Test the file projection planner with metadata.
*/
@Test
public void testProjectList() {
Path filePath = new Path("hdfs:///w/x/y/z.csv");
ImplicitColumnManager metadataManager = new ImplicitColumnManager(fixture.getOptionManager(), standardOptions(filePath));
ScanLevelProjection scanProj = ScanLevelProjection.build(RowSetTestUtils.projectList(ScanTestUtils.FILE_NAME_COL, "a", ScanTestUtils.partitionColName(0)), ScanTestUtils.parsers(metadataManager.projectionParser()));
assertEquals(3, scanProj.columns().size());
// Scan-level projection: defines the columns
{
assertTrue(scanProj.columns().get(0) instanceof FileMetadataColumn);
FileMetadataColumn col0 = (FileMetadataColumn) scanProj.columns().get(0);
assertTrue(col0 instanceof FileMetadataColumn);
assertEquals(ScanTestUtils.FILE_NAME_COL, col0.name());
assertEquals(MinorType.VARCHAR, col0.schema().getType().getMinorType());
assertEquals(DataMode.REQUIRED, col0.schema().getType().getMode());
ColumnProjection col1 = scanProj.columns().get(1);
assertTrue(col1 instanceof UnresolvedColumn);
assertEquals("a", col1.name());
assertTrue(scanProj.columns().get(2) instanceof PartitionColumn);
PartitionColumn col2 = (PartitionColumn) scanProj.columns().get(2);
assertTrue(col2 instanceof PartitionColumn);
assertEquals(ScanTestUtils.partitionColName(0), col2.name());
assertEquals(MinorType.VARCHAR, col2.schema().getType().getMinorType());
assertEquals(DataMode.OPTIONAL, col2.schema().getType().getMode());
}
// Schema-level projection, fills in values.
TupleMetadata tableSchema = new SchemaBuilder().add("a", MinorType.VARCHAR).buildSchema();
metadataManager.startFile(filePath);
NullColumnBuilder builder = new NullBuilderBuilder().build();
ResolvedRow rootTuple = new ResolvedRow(builder);
new ExplicitSchemaProjection(scanProj, tableSchema, rootTuple, ScanTestUtils.resolvers(metadataManager));
List<ResolvedColumn> columns = rootTuple.columns();
assertEquals(3, columns.size());
{
assertTrue(columns.get(0) instanceof FileMetadataColumn);
FileMetadataColumn col0 = (FileMetadataColumn) columns.get(0);
assertTrue(col0 instanceof FileMetadataColumn);
assertEquals(ScanTestUtils.FILE_NAME_COL, col0.name());
assertEquals("z.csv", col0.value());
assertEquals(MinorType.VARCHAR, col0.schema().getType().getMinorType());
assertEquals(DataMode.REQUIRED, col0.schema().getType().getMode());
ResolvedColumn col1 = columns.get(1);
assertEquals("a", col1.name());
assertTrue(columns.get(2) instanceof PartitionColumn);
PartitionColumn col2 = (PartitionColumn) columns.get(2);
assertTrue(col2 instanceof PartitionColumn);
assertEquals(ScanTestUtils.partitionColName(0), col2.name());
assertEquals("x", col2.value());
assertEquals(MinorType.VARCHAR, col2.schema().getType().getMinorType());
assertEquals(DataMode.OPTIONAL, col2.schema().getType().getMode());
}
// Verify that the file metadata columns were picked out
assertEquals(2, metadataManager.metadataColumns().size());
assertSame(columns.get(0), metadataManager.metadataColumns().get(0));
assertSame(columns.get(2), metadataManager.metadataColumns().get(1));
}
use of org.apache.drill.exec.physical.impl.scan.project.AbstractUnresolvedColumn.UnresolvedColumn 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.AbstractUnresolvedColumn.UnresolvedColumn in project drill by apache.
the class TestReaderLevelProjection method testOmittedMap.
/**
* Test the obscure case that the data source contains a map, but we
* project only one of the members of the map. The output should be a
* map that contains only the members we request.
*/
@Test
public void testOmittedMap() {
// Simulate SELECT a, b.c.d ...
final ScanLevelProjection scanProj = ScanLevelProjection.build(RowSetTestUtils.projectList("a", "b.c.d"), ScanTestUtils.parsers());
assertEquals(2, scanProj.columns().size());
{
assertTrue(scanProj.columns().get(1) instanceof UnresolvedColumn);
final UnresolvedColumn bCol = (UnresolvedColumn) (scanProj.columns().get(1));
assertTrue(bCol.element().isTuple());
}
// Simulate a data source, with early schema, of (a)
final TupleMetadata tableSchema = new SchemaBuilder().add("a", MinorType.VARCHAR).buildSchema();
final NullColumnBuilder builder = new NullBuilderBuilder().build();
final ResolvedRow rootTuple = new ResolvedRow(builder);
new ExplicitSchemaProjection(scanProj, tableSchema, rootTuple, ScanTestUtils.resolvers());
final List<ResolvedColumn> columns = rootTuple.columns();
assertEquals(2, columns.size());
// Should have resolved a to a table column, b to a missing map.
// A is projected
final ResolvedColumn aCol = columns.get(0);
assertEquals("a", aCol.name());
assertTrue(aCol instanceof ResolvedTableColumn);
// B is not projected, is implicitly a map
final ResolvedColumn bCol = columns.get(1);
assertEquals("b", bCol.name());
assertTrue(bCol instanceof ResolvedMapColumn);
final ResolvedMapColumn bMap = (ResolvedMapColumn) bCol;
final ResolvedTuple bMembers = bMap.members();
assertNotNull(bMembers);
assertEquals(1, bMembers.columns().size());
// C is a map within b
final ResolvedColumn cCol = bMembers.columns().get(0);
assertTrue(cCol instanceof ResolvedMapColumn);
final ResolvedMapColumn cMap = (ResolvedMapColumn) cCol;
final ResolvedTuple cMembers = cMap.members();
assertNotNull(cMembers);
assertEquals(1, cMembers.columns().size());
// D is an unknown column type (not a map)
final ResolvedColumn dCol = cMembers.columns().get(0);
assertTrue(dCol instanceof ResolvedNullColumn);
}
Aggregations