Search in sources :

Example 16 with FormatPluginConfig

use of org.apache.drill.common.logical.FormatPluginConfig in project drill by apache.

the class AnalyzeTableHandler method getPlan.

@Override
public PhysicalPlan getPlan(SqlNode sqlNode) throws ValidationException, RelConversionException, IOException, ForemanSetupException {
    final SqlAnalyzeTable sqlAnalyzeTable = unwrap(sqlNode, SqlAnalyzeTable.class);
    verifyNoUnsupportedFunctions(sqlAnalyzeTable);
    SqlNode tableRef = sqlAnalyzeTable.getTableRef();
    SqlSelect scanSql = new SqlSelect(SqlParserPos.ZERO, /* position */
    SqlNodeList.EMPTY, /* keyword list */
    getColumnList(sqlAnalyzeTable), /* select list */
    tableRef, /* from */
    null, /* where */
    null, /* group by */
    null, /* having */
    null, /* windowDecls */
    null, /* orderBy */
    null, /* offset */
    null);
    ConvertedRelNode convertedRelNode = validateAndConvert(rewrite(scanSql));
    RelDataType validatedRowType = convertedRelNode.getValidatedRowType();
    RelNode relScan = convertedRelNode.getConvertedNode();
    DrillTableInfo drillTableInfo = DrillTableInfo.getTableInfoHolder(sqlAnalyzeTable.getTableRef(), config);
    String tableName = drillTableInfo.tableName();
    AbstractSchema drillSchema = SchemaUtilites.resolveToDrillSchema(config.getConverter().getDefaultSchema(), drillTableInfo.schemaPath());
    Table table = SqlHandlerUtil.getTableFromSchema(drillSchema, tableName);
    if (table == null) {
        throw UserException.validationError().message("No table with given name [%s] exists in schema [%s]", tableName, drillSchema.getFullSchemaName()).build(logger);
    } else if (!(table instanceof DrillTable)) {
        return DrillStatsTable.notSupported(context, tableName);
    }
    DrillTable drillTable = (DrillTable) table;
    final Object selection = drillTable.getSelection();
    if (!(selection instanceof FormatSelection)) {
        return DrillStatsTable.notSupported(context, tableName);
    }
    // Do not support non-parquet tables
    FormatSelection formatSelection = (FormatSelection) selection;
    FormatPluginConfig formatConfig = formatSelection.getFormat();
    if (!((formatConfig instanceof ParquetFormatConfig) || ((formatConfig instanceof NamedFormatPluginConfig) && ((NamedFormatPluginConfig) formatConfig).getName().equals("parquet")))) {
        return DrillStatsTable.notSupported(context, tableName);
    }
    FileSystemPlugin plugin = (FileSystemPlugin) drillTable.getPlugin();
    DrillFileSystem fs = new DrillFileSystem(plugin.getFormatPlugin(formatSelection.getFormat()).getFsConf());
    Path selectionRoot = formatSelection.getSelection().getSelectionRoot();
    if (!selectionRoot.toUri().getPath().endsWith(tableName) || !fs.getFileStatus(selectionRoot).isDirectory()) {
        return DrillStatsTable.notSupported(context, tableName);
    }
    // Do not recompute statistics, if stale
    Path statsFilePath = new Path(selectionRoot, DotDrillType.STATS.getEnding());
    if (fs.exists(statsFilePath) && !isStatsStale(fs, statsFilePath)) {
        return DrillStatsTable.notRequired(context, tableName);
    }
    // Convert the query to Drill Logical plan and insert a writer operator on top.
    DrillRel drel = convertToDrel(relScan, drillSchema, tableName, sqlAnalyzeTable.getSamplePercent());
    Prel prel = convertToPrel(drel, validatedRowType);
    logAndSetTextPlan("Drill Physical", prel, logger);
    PhysicalOperator pop = convertToPop(prel);
    PhysicalPlan plan = convertToPlan(pop);
    log("Drill Plan", plan, logger);
    return plan;
}
Also used : Path(org.apache.hadoop.fs.Path) SchemaPath(org.apache.drill.common.expression.SchemaPath) FileSystemPlugin(org.apache.drill.exec.store.dfs.FileSystemPlugin) PhysicalPlan(org.apache.drill.exec.physical.PhysicalPlan) DrillTable(org.apache.drill.exec.planner.logical.DrillTable) DrillStatsTable(org.apache.drill.exec.planner.common.DrillStatsTable) SqlAnalyzeTable(org.apache.drill.exec.planner.sql.parser.SqlAnalyzeTable) Table(org.apache.calcite.schema.Table) DrillTable(org.apache.drill.exec.planner.logical.DrillTable) RelDataType(org.apache.calcite.rel.type.RelDataType) FormatSelection(org.apache.drill.exec.store.dfs.FormatSelection) NamedFormatPluginConfig(org.apache.drill.exec.store.dfs.NamedFormatPluginConfig) Prel(org.apache.drill.exec.planner.physical.Prel) SqlSelect(org.apache.calcite.sql.SqlSelect) RelNode(org.apache.calcite.rel.RelNode) DrillFileSystem(org.apache.drill.exec.store.dfs.DrillFileSystem) AbstractSchema(org.apache.drill.exec.store.AbstractSchema) FormatPluginConfig(org.apache.drill.common.logical.FormatPluginConfig) NamedFormatPluginConfig(org.apache.drill.exec.store.dfs.NamedFormatPluginConfig) PhysicalOperator(org.apache.drill.exec.physical.base.PhysicalOperator) DrillRel(org.apache.drill.exec.planner.logical.DrillRel) ParquetFormatConfig(org.apache.drill.exec.store.parquet.ParquetFormatConfig) SqlAnalyzeTable(org.apache.drill.exec.planner.sql.parser.SqlAnalyzeTable) SqlNode(org.apache.calcite.sql.SqlNode)

Aggregations

FormatPluginConfig (org.apache.drill.common.logical.FormatPluginConfig)16 FileSystemConfig (org.apache.drill.exec.store.dfs.FileSystemConfig)7 HashMap (java.util.HashMap)6 ParquetFormatConfig (org.apache.drill.exec.store.parquet.ParquetFormatConfig)6 DrillFileSystem (org.apache.drill.exec.store.dfs.DrillFileSystem)4 FileSystemPlugin (org.apache.drill.exec.store.dfs.FileSystemPlugin)4 FormatSelection (org.apache.drill.exec.store.dfs.FormatSelection)4 NamedFormatPluginConfig (org.apache.drill.exec.store.dfs.NamedFormatPluginConfig)4 Path (org.apache.hadoop.fs.Path)4 BeforeClass (org.junit.BeforeClass)4 Table (org.apache.calcite.schema.Table)3 SchemaPath (org.apache.drill.common.expression.SchemaPath)3 DrillTable (org.apache.drill.exec.planner.logical.DrillTable)3 IOException (java.io.IOException)2 Field (java.lang.reflect.Field)2 SchemaPlus (org.apache.calcite.schema.SchemaPlus)2 StoragePluginConfig (org.apache.drill.common.logical.StoragePluginConfig)2 SqlRefreshMetadata (org.apache.drill.exec.planner.sql.parser.SqlRefreshMetadata)2 StoragePluginRegistry (org.apache.drill.exec.store.StoragePluginRegistry)2 FileSelection (org.apache.drill.exec.store.dfs.FileSelection)2