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;
}