in fastmodel-transform/fastmodel-transform-hologres/src/main/java/com/aliyun/fastmodel/transform/hologres/format/HologresAstVisitor.java [119:171]
private Boolean visitDynamicTable(CreateTable node, Integer indent) {
builder.append("BEGIN;\n");
printExtensionIfNeed(node);
builder.append("CREATE DYNAMIC TABLE ");
if (node.isNotExists()) {
builder.append("IF NOT EXISTS ");
}
String tableCode = getCode(node.getQualifiedName());
builder.append(tableCode);
String elementIndent = indentString(indent + 1);
boolean columnEmpty = node.isColumnEmpty();
if (!columnEmpty) {
builder.append(" (\n");
String column = formatColumnList(node.getColumnDefines(), elementIndent);
builder.append(column);
builder.append("\n").append(")");
}
if (!node.isPartitionEmpty()) {
builder.append(" PARTITION BY LIST(").append(
node.getPartitionedBy().getColumnDefinitions().stream().map(x -> formatExpression(x.getColName()))
.collect(joining(","))).append(")");
}
//with
List<Property> properties = node.getProperties();
List<String> excludeKeys = Lists.newArrayList(
HologresPropertyKey.DYNAMIC.getValue(),
HologresPropertyKey.TASK_DEFINITION.getValue()
);
String p = formatProperty(elementIndent, properties.stream().filter(
prop -> !excludeKeys.contains(prop.getName())
).collect(Collectors.toList()));
if (StringUtils.isNotBlank(p)) {
builder.append("\nWITH (\n");
builder.append(p);
builder.append("\n)");
}
String sql = PropertyUtil.getPropertyValue(properties, HologresPropertyKey.TASK_DEFINITION.getValue());
//query
if (StringUtils.isNotBlank(sql)) {
builder.append(" AS\n");
builder.append(sql);
if (!sql.endsWith(";")) {
builder.append(";");
}
}
builder.append("\n");
builder.append("COMMIT;");
if (node.getCommentValue() != null) {
builder.append("\n");
BuilderUtil.addTransaction(builder, () -> commentTable(tableCode, node.getCommentValue()));
}
return true;
}