Table oldview = db.getTable(crtView.getViewName(), false); if (crtView.getOrReplace() && oldview != null) { if (!crtView.isMaterialized()) { oldview.setViewOriginalText(crtView.getViewOriginalText()); oldview.setViewExpandedText(crtView.getViewExpandedText()); oldview.setFields(crtView.getSchema()); if (crtView.getComment() != null) { oldview.setProperty("comment", crtView.getComment()); if (crtView.getTblProps() != null) { oldview.getTTable().getParameters().putAll(crtView.getTblProps()); oldview.setPartCols(crtView.getPartCols()); if (crtView.getInputFormat() != null) { oldview.setInputFormatClass(crtView.getInputFormat()); if (crtView.getOutputFormat() != null) { oldview.setOutputFormatClass(crtView.getOutputFormat()); db.alterTable(crtView.getViewName(), oldview, null); } catch (InvalidOperationException e) { throw new HiveException(e); Table tbl = db.newTable(crtView.getViewName()); tbl.setViewOriginalText(crtView.getViewOriginalText()); if (crtView.isMaterialized()) { tbl.setRewriteEnabled(crtView.isRewriteEnabled()); tbl.setTableType(TableType.MATERIALIZED_VIEW);
protected void saveViewDefinition() throws SemanticException { if (createVwDesc.isMaterialized() && createVwDesc.isReplace()) { List<FieldSchema> imposedSchema = createVwDesc.getSchema(); if (imposedSchema != null) { int explicitColCount = imposedSchema.size(); if (createVwDesc.getViewOriginalText() == null) { String originalText = ctx.getTokenRewriteStream().toString( viewSelect.getTokenStartIndex(), viewSelect.getTokenStopIndex()); createVwDesc.setViewOriginalText(originalText); if (createVwDesc.isMaterialized()) { if (createVwDesc.getPartColNames() != null) { for (int i = 0; i < derivedSchema.size(); ++i) { FieldSchema fieldSchema = derivedSchema.get(i); if (!createVwDesc.getPartColNames().contains(fieldSchema.getName())) { if (first) { first = false; for (String partColName : createVwDesc.getPartColNames()) { sb.append(", "); sb.append(HiveUtils.unparseIdentifier(partColName, conf)); sb.append(expandedText); sb.append(") "); sb.append(HiveUtils.unparseIdentifier(createVwDesc.getViewName(), conf)); expandedText = sb.toString();
private ASTNode handleCreateViewDDL(ASTNode ast) throws SemanticException { saveViewDefinition(); String originalText = createVwDesc.getViewOriginalText(); String expandedText = createVwDesc.getViewExpandedText(); List<FieldSchema> schema = createVwDesc.getSchema(); List<FieldSchema> partitionColumns = createVwDesc.getPartCols(); init(false); setAST(ast); ASTNode newAST = reAnalyzeViewAfterCbo(ast); createVwDesc.setViewOriginalText(originalText); createVwDesc.setViewExpandedText(expandedText); createVwDesc.setSchema(schema); createVwDesc.setPartCols(partitionColumns); return newAST; }
if (crtViewDesc.getStorageHandler() != null) { storageHandler = HiveUtils.getStorageHandler( SessionState.getSessionConf(), crtViewDesc.getStorageHandler()); } else if (crtViewDesc.getSerde() != null) { serdeClass = JavaUtils.loadClass(crtViewDesc.getSerde()); if (crtViewDesc.getStorageHandler() != null) { properties.setProperty( org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_STORAGE, crtViewDesc.getStorageHandler()); if (crtViewDesc.getViewName() != null && crtViewDesc.isMaterialized()) { properties.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_NAME, crtViewDesc.getViewName()); if (crtViewDesc.getTblProps() != null) { properties.putAll(crtViewDesc.getTblProps()); if (crtViewDesc.getSerdeProps() != null) { properties.putAll(crtViewDesc.getSerdeProps()); in_class = storageHandler.getInputFormatClass(); } else { in_class = JavaUtils.loadClass(crtViewDesc.getInputFormat()); out_class = storageHandler.getOutputFormatClass(); } else { out_class = JavaUtils.loadClass(crtViewDesc.getOutputFormat());
public Table toTable(HiveConf conf) throws HiveException { String[] names = Utilities.getDbTableName(getViewName()); String databaseName = names[0]; String tableName = names[1]; tbl.setViewOriginalText(getViewOriginalText()); tbl.setViewExpandedText(getViewExpandedText()); if (isMaterialized()) { tbl.setRewriteEnabled(isRewriteEnabled()); tbl.setTableType(TableType.MATERIALIZED_VIEW); } else { tbl.setFields(getSchema()); if (getComment() != null) { tbl.setProperty("comment", getComment()); if (getTblProps() != null) { tbl.getTTable().getParameters().putAll(getTblProps()); if (getPartCols() != null) { tbl.setPartCols(getPartCols()); if (getInputFormat() != null) { tbl.setInputFormatClass(getInputFormat()); if (getOutputFormat() != null) { tbl.setOutputFormatClass(getOutputFormat()); if (isMaterialized()) { if (getLocation() != null) {
Table oldview = db.getTable(crtView.getViewName(), false); if (oldview != null) { if (crtView.getReplicationSpec().isInReplicationScope()) { if (crtView.getReplicationSpec().allowEventReplacementInto(oldview.getParameters())){ crtView.setReplace(true); // we replace existing view. } else { LOG.debug("DDLTask: Create View is skipped as view {} is newer than update", crtView.getViewName()); // no replacement, the existing table state is newer than our update. return 0; if (!crtView.isReplace() && !crtView.getIfNotExists()) { throw new HiveException(ErrorMsg.TABLE_ALREADY_EXISTS.getMsg(crtView.getViewName())); assert !crtView.isMaterialized(); oldview.setViewOriginalText(crtView.getViewOriginalText()); oldview.setViewExpandedText(crtView.getViewExpandedText()); oldview.setFields(crtView.getSchema()); if (crtView.getComment() != null) { oldview.setProperty("comment", crtView.getComment()); if (crtView.getTblProps() != null) { oldview.getTTable().getParameters().putAll(crtView.getTblProps()); oldview.setPartCols(crtView.getPartCols()); if (crtView.getInputFormat() != null) {
Table tbl = db.newTable(crtView.getViewName()); tbl.setTableType(TableType.VIRTUAL_VIEW); tbl.setSerializationLib(null); tbl.clearSerDeInfo(); tbl.setViewOriginalText(crtView.getViewOriginalText()); tbl.setViewExpandedText(crtView.getViewExpandedText()); tbl.setFields(crtView.getSchema()); if (crtView.getComment() != null) { tbl.setProperty("comment", crtView.getComment()); if (crtView.getTblProps() != null) { tbl.getTTable().getParameters().putAll(crtView.getTblProps()); if (crtView.getPartCols() != null) { tbl.setPartCols(crtView.getPartCols()); db.createTable(tbl, crtView.getIfNotExists()); work.getOutputs().add(new WriteEntity(tbl)); return 0;
ParseUtils.validateColumnNameUniqueness(derivedSchema); List<FieldSchema> imposedSchema = createVwDesc.getSchema(); if (imposedSchema != null) { int explicitColCount = imposedSchema.size(); createVwDesc.setViewOriginalText(originalText); sb.append(expandedText); sb.append(") "); sb.append(HiveUtils.unparseIdentifier(createVwDesc.getViewName(), conf)); expandedText = sb.toString(); if (createVwDesc.getPartColNames() != null) { List<String> partColNames = createVwDesc.getPartColNames(); if (partColNames.size() > derivedSchema.size()) { throw new SemanticException( createVwDesc.setPartCols( new ArrayList<FieldSchema>(partitionColumns)); createVwDesc.setSchema(derivedSchema); createVwDesc.setViewExpandedText(expandedText);
private void validateCreateView() throws SemanticException { try { Table oldView = getTable(createVwDesc.getViewName(), false); if (createVwDesc.getIsAlterViewAs() && oldView == null) { String viewNotExistErrorMsg = "The following view does not exist: " + createVwDesc.getViewName(); throw new SemanticException( ErrorMsg.ALTER_VIEW_AS_SELECT_NOT_EXIST.getMsg(viewNotExistErrorMsg)); if (createVwDesc.getOrReplace() && oldView != null) { if (oldView.getTableType().equals(TableType.VIRTUAL_VIEW) && createVwDesc.isMaterialized()) { throw new SemanticException(ErrorMsg.REPLACE_VIEW_WITH_MATERIALIZED, oldView.getTableName()); !createVwDesc.isMaterialized()) { throw new SemanticException(ErrorMsg.REPLACE_MATERIALIZED_WITH_VIEW, oldView.getTableName()); String tableNotViewErrorMsg = "The following is an existing table, not a view: " + createVwDesc.getViewName(); throw new SemanticException( ErrorMsg.EXISTING_TABLE_IS_NOT_VIEW.getMsg(tableNotViewErrorMsg)); if (!createVwDesc.isMaterialized()) { createVwDesc.getViewName();
private void validateCreateView() throws SemanticException { try { Table oldView = getTable(createVwDesc.getViewName(), false); if (createVwDesc.isMaterialized() && createVwDesc.isRewriteEnabled() && !AcidUtils.isTransactionalTable(table)) { throw new SemanticException("Automatic rewriting for materialized view cannot " if (createVwDesc.isMaterialized() && createVwDesc.isRewriteEnabled()) { if (!ctx.isCboSucceeded()) { String msg = "Cannot enable automatic rewriting for materialized view."; if (createVwDesc.getIsAlterViewAs() && oldView == null) { String viewNotExistErrorMsg = "The following view does not exist: " + createVwDesc.getViewName(); throw new SemanticException( ErrorMsg.ALTER_VIEW_AS_SELECT_NOT_EXIST.getMsg(viewNotExistErrorMsg)); if (createVwDesc.isReplace() && oldView != null) { if (oldView.getTableType().equals(TableType.VIRTUAL_VIEW) && createVwDesc.isMaterialized()) { throw new SemanticException(ErrorMsg.REPLACE_VIEW_WITH_MATERIALIZED, oldView.getTableName()); !createVwDesc.isMaterialized()) { throw new SemanticException(ErrorMsg.REPLACE_MATERIALIZED_WITH_VIEW, oldView.getTableName()); String tableNotViewErrorMsg =
fieldSchemas = new ArrayList<>(); partitionColumns = new ArrayList<>(); partitionColumnNames = viewDesc.getPartColNames(); fileSinkColInfos = new ArrayList<>(); destTableIsTemporary = false; tblDesc.setPartCols(new ArrayList<>(partitionColumns)); } else if (viewDesc != null) { viewDesc.setSchema(new ArrayList<>(fieldSchemas)); viewDesc.setPartCols(new ArrayList<>(partitionColumns)); destinationTable = tblDesc != null ? tblDesc.toTable(conf) : viewDesc != null ? viewDesc.toTable(conf) : null; } catch (HiveException e) { throw new SemanticException(e);
public String getTableName() throws SemanticException { switch (getDescType()) { case TABLE: return createTblDesc.getTableName(); case VIEW: String dbDotView = createViewDesc.getViewName(); String[] names = Utilities.getDbTableName(dbDotView); return names[1]; // names[0] have the Db name and names[1] have the view name } return null; }
this.createViewDesc.setTablesUsed(table.getCreationMetadata() != null ? table.getCreationMetadata().getTablesUsed() : ImmutableSet.of()); } else { this.createViewDesc = new CreateViewDesc(dbDotView, table.getAllCols(), this.createViewDesc.setPartCols(table.getPartCols()); break; default:
boolean retrieveAndInclude = false; boolean disableRewrite = false; if (work.getCreateViewDesc() != null && work.getCreateViewDesc().isMaterialized()) { tableName = work.getCreateViewDesc().getViewName(); retrieveAndInclude = work.getCreateViewDesc().isRewriteEnabled(); } else if (work.getAlterMaterializedViewDesc() != null) { tableName = work.getAlterMaterializedViewDesc().getMaterializedViewName();
cboCtx.nodeOfInterest.getTokenStartIndex(), cboCtx.nodeOfInterest.getTokenStopIndex()); createVwDesc.setViewOriginalText(originalText); viewSelect = newAST; viewsExpanded = new ArrayList<>(); viewsExpanded.add(createVwDesc.getViewName()); } else if (cboCtx.type == PreCboCtx.Type.CTAS) {
this.createViewDesc = new CreateViewDesc(dbDotView, table.getAllCols(), this.createViewDesc.setPartCols(table.getPartCols()); break; default:
createVwDesc = new CreateViewDesc( dbDotTable, cols, comment, tblProps, partColNames, ifNotExists, orReplace, rewriteEnabled, isAlterViewAs, queryState.setCommandType(HiveOperation.CREATE_MATERIALIZED_VIEW); } else { createVwDesc = new CreateViewDesc( dbDotTable, cols, comment, tblProps, partColNames, ifNotExists, orReplace, isAlterViewAs, storageFormat.getInputFormat(),
if (createVwDesc.isMaterialized()) { createVwDesc.setTablesUsed(getTablesUsed(pCtx)); } else { .mapDirToOp(new Path(createVwDesc.getViewName()), sinkOp);
public Map<String, String> getTblProps() { switch (getDescType()) { case TABLE: return createTblDesc.getTblProps(); case VIEW: return createViewDesc.getTblProps(); } return null; }
if (!createVwDesc.isMaterialized()) { .mapDirToOp(new Path(createVwDesc.getViewName()), sinkOp);