-
打开项目设置

-
将字段的拓展属性启用

-
给拓展属性设置码值
具体码值参考如下:
[
{
"label": "DUPLICATE",
"value": "DUPLICATE"
},
{
"label": "AGGREGATE",
"value": "AGGREGATE"
},
{
"label": "UNIQUE",
"value": "UNIQUE"
}
]

-
打开物理模型,找到对应的字段,选择相应的数据模型

-
修改建表语句的代码模板
具体模板内容参考如下:
{{
let schemaName = it.schemaName ? `${it.schemaName}.` : '';
const tableKey = `${schemaName}${it.defKey}`;
function getDataType(field) {
const { dbDataType } = field;
if(!dbDataType) {
return ''
}
const dataType = dbDataType.toUpperCase();
if (dataType === 'VARCHAR') {
return `${dataType}(${field.dataLen ? field.dataLen : 128})`;
} else if (['JSON','DATE'].includes(dataType)) {
return dataType;
} else if (dataType === 'TIMESTAMP') {
return field.dataLen && field.dataLen >= 0 && field.dataLen <= 9 ? `${dataType}(${field.dataLen})` : dataType;
} else if (dataType === 'DECIMAL') {
return field.dataLen && field.dataLen >= 0 && field.dataLen <= 6 ? `${dataType}(${field.dataLen})` : dataType;
} else {
return field.dataLen && field.dataLen >= 0 ? `${dataType}(${field.dataLen})` : dataType;
}
}
function getFieldDefinition(field, index, fields) {
const dataType = getDataType(field);
const notNull = field.notNull ? ' NOT NULL' : '';
const defaultValue = field.defaultValue ? ` DEFAULT ${field.defaultValue}` : '';
const comment = ` COMMENT '${it.func.strJoin(field.defName, field.intro, ";", true)}'`;
return `${dataType}${notNull}${defaultValue}${comment}${index < nonPkList.length-1 ? ',' : ''}`;
}
}}
DROP TABLE IF EXISTS {{= tableKey }};
CREATE TABLE {{= tableKey }}(
{{ pkList = [] ; nonPkList = [] ;duList = [] ; agList = []; }}
{{~it.fields:field:index}}{{? field.primaryKey }}{{ pkList.push(field) }}{{?? field.attr1 === 'DUPLICATE'}}{{ nonPkList.push(field);duList.push(field) }}{{?? field.attr1 === 'AGGREGATE'}}{{ nonPkList.push(field);agList.push(field) }}{{??}}{{ nonPkList.push(field) }}{{?}}{{~}}
{{~pkList:field:index}}
`{{=field.defKey}}` {{= getFieldDefinition(field, index, it.fields) }}{{?}}
{{~nonPkList:field:index}}
`{{=field.defKey}}` {{= getFieldDefinition(field, index, it.fields) }}{{?}}
{{~}}
){{? pkList.length > 0 }} UNIQUE KEY ({{~pkList:field:index}}`{{= field.defKey }}`{{= index < pkList.length-1 ? ',' : '' }}{{~}}){{?}}
{{? duList.length > 0 }} DUPLICATE KEY ({{~duList:field:index}}`{{= field.defKey }}`{{= index < duList.length-1 ? ',' : '' }}{{~}}){{?}}
{{? agList.length > 0 }} AGGREGATE KEY ({{~agList:field:index}}`{{= field.defKey }}`{{= index < agList.length-1 ? ',' : '' }}{{~}}){{?}}
{{? it.defName || it.intro }}
COMMENT '{{=it.func.strJoin(it.defName, it.intro, ";", true)}}'
{{?}}
DISTRIBUTED BY HASH(`{{=pkList.length > 0 ? pkList[0].defKey : it.fields[0].defKey}}`) BUCKETS 1
PROPERTIES(
"replication_allocation" = "tag.location.default: 1"
);
$blankline

