public Boolean visitCreateTable()

in fastmodel-transform/fastmodel-transform-hive/src/main/java/com/aliyun/fastmodel/transform/hive/format/HiveOutVisitor.java [75:157]


    public Boolean visitCreateTable(CreateTable node, Integer indent) {
        boolean columnNotEmpty = node.getColumnDefines() != null && !node.getColumnDefines().isEmpty();
        boolean executable = true;
        //hive不支持没有列的表
        if (!columnNotEmpty) {
            executable = false;
        }
        boolean external = HiveHelper.isExternal(node);
        if (external) {
            builder.append("CREATE EXTERNAL TABLE ");
        } else {
            builder.append("CREATE TABLE ");
        }
        if (node.isNotExists()) {
            builder.append("IF NOT EXISTS ");
        }
        String tableName = getCode(node.getQualifiedName());
        builder.append(tableName);

        int newIndent = indent + 1;
        String elementIndent = indentString(newIndent);
        if (columnNotEmpty) {
            builder.append(newLine("("));
            String columnList = formatColumnList(node.getColumnDefines(), elementIndent);
            builder.append(columnList);
            //因为Hive中EMR中不支持constraint的屏蔽处理
            if (context.isEnableConstraint() && node.getConstraintStatements() != null && !node
                .getConstraintStatements().isEmpty()) {
                builder.append(",\n");
                Iterator<BaseConstraint> iterator = node.getConstraintStatements().iterator();
                while (iterator.hasNext()) {
                    process(iterator.next(), newIndent);
                    if (iterator.hasNext()) {
                        builder.append(",\n");
                    }
                }
            }
            builder.append(newLine(")"));
        } else {
            if (!node.isCommentElementEmpty()) {
                builder.append(newLine(COMMENT + "("));
                builder.append(formatCommentElement(node.getColumnCommentElements(), elementIndent));
                builder.append(newLine(COMMENT + ")"));
            }
        }
        if (node.getComment() != null) {
            builder.append(formatComment(node.getComment(), isEndNewLine(builder.toString())));
        }
        if (!node.isPartitionEmpty()) {
            builder.append(
                formatPartitions(
                    node.getPartitionedBy().getColumnDefinitions(),
                    isEndNewLine(builder.toString()),
                    elementIndent)
            );
        }
        //append row format

        String rowFormat = HiveHelper.appendRowFormat(node, elementIndent);
        if (StringUtils.isNotBlank(rowFormat)) {
            appendLineIfNecessary();
            builder.append(rowFormat);
        }
        //append stored format
        String storedFormat = HiveHelper.appendStoredFormat(node);
        if (StringUtils.isNotBlank(storedFormat)) {
            appendLineIfNecessary();
            builder.append(storedFormat);
        }

        //append location
        String location = HiveHelper.appendLocation(node);
        if (StringUtils.isNotBlank(location)) {
            appendLineIfNecessary();
            builder.append(location);
        }
        if (!node.isPropertyEmpty()) {
            String s = formatTblProperties(node.getProperties(), isEndNewLine(builder.toString()));
            builder.append(s);
        }
        removeNewLine(builder);
        return executable;
    }