
com.github.wz2cool.canal.utils.converter.hive.HiveAlterSqlConverter Maven / Gradle / Ivy
The newest version!
package com.github.wz2cool.canal.utils.converter.hive;
import com.github.wz2cool.canal.utils.converter.BaseAlterSqlConverter;
import com.github.wz2cool.canal.utils.converter.IColDataTypeConverter;
import com.github.wz2cool.canal.utils.model.AlterColumnExpression;
import net.sf.jsqlparser.statement.create.table.ColDataType;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class HiveAlterSqlConverter extends BaseAlterSqlConverter {
// https://www.cnblogs.com/linn/p/6233776.html
private final HiveColDataTypeConverter hiveColDataTypeConverter = new HiveColDataTypeConverter();
@Override
protected IColDataTypeConverter getColDataTypeConverter() {
return this.hiveColDataTypeConverter;
}
@Override
protected Optional convertToAddColumnSql(AlterColumnExpression alterColumnExpression) {
String tableName = alterColumnExpression.getTableName();
String columnName = alterColumnExpression.getColumnName();
ColDataType colDataType = alterColumnExpression.getColDataType();
String dataTypeString = getDataTypeString(colDataType);
String sql = String.format("ALTER TABLE %s ADD COLUMNS (%s %s)",
tableName, columnName, dataTypeString);
return Optional.of(sql);
}
@Override
protected Optional convertToChangeColumnTypeSql(AlterColumnExpression alterColumnExpression) {
String tableName = alterColumnExpression.getTableName();
String columnName = alterColumnExpression.getColumnName();
ColDataType colDataType = alterColumnExpression.getColDataType();
String dataTypeString = getDataTypeString(colDataType);
String sql = String.format("ALTER TABLE %s CHANGE %s %s %s",
tableName, columnName, columnName, dataTypeString);
return Optional.of(sql);
}
@SuppressWarnings("squid:S4144")
@Override
protected Optional convertToRenameColumnSql(AlterColumnExpression alterColumnExpression) {
String tableName = alterColumnExpression.getTableName();
String columnName = alterColumnExpression.getColumnName();
String colOldName = alterColumnExpression.getColOldName();
ColDataType colDataType = alterColumnExpression.getColDataType();
String dataTypeString = getDataTypeString(colDataType);
String sql = String.format("ALTER TABLE %s CHANGE %s %s %s",
tableName, colOldName, columnName, dataTypeString);
return Optional.of(sql);
}
// hive not support drop keyword. we have use replace, but we don't know table schema.
@Override
protected Optional convertToDropColumnSql(AlterColumnExpression alterColumnExpression) {
return Optional.empty();
}
@Override
protected List convertToOtherColumnActionSqlList(List alterColumnExpressions) {
return new ArrayList<>();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy