in v2/datastream-common/src/main/java/com/google/cloud/teleport/v2/datastream/utils/DataStreamClient.java [480:535]
public StandardSQLTypeName convertMysqlToBigQueryColumnType(MysqlColumn column) {
String dataType = column.getDataType().toUpperCase();
switch (dataType) {
case "BLOB":
case "VARCHAR":
case "CHAR":
case "TINYTEXT":
case "TEXT":
case "MEDIUMTEXT":
case "LONGTEXT":
return StandardSQLTypeName.STRING;
case "TINYINT":
case "SMALLINT":
case "MEDIUMINT":
case "INT":
case "INTEGER":
case "BIGINT":
return StandardSQLTypeName.INT64;
case "FLOAT":
case "REAL":
case "DOUBLE":
case "DOUBLE PRECISION":
return StandardSQLTypeName.FLOAT64;
case "DECIMAL":
case "NUMERIC":
return StandardSQLTypeName.BIGNUMERIC;
case "BINARY":
case "VARBINARY":
return StandardSQLTypeName.BYTES;
case "DATETIME":
return StandardSQLTypeName.TIMESTAMP;
case "DATE":
return StandardSQLTypeName.DATE;
// (naveronen) - i'm setting this a STRING for now, but some customers might need a
// different
// solution. once we encounter such cases, we might need to adjust this
case "SET":
case "ENUM":
return StandardSQLTypeName.STRING;
case "BIT":
return StandardSQLTypeName.INT64;
default:
}
if (TIMESTAMP_PATTERN.matcher(dataType).matches()) {
return StandardSQLTypeName.TIMESTAMP;
} else if (TIMESTAMP_WITH_TIMEZONE_PATTERN.matcher(dataType).matches()) {
return StandardSQLTypeName.TIMESTAMP; // TODO: what type do we want here?
} else if (TIMESTAMP_WITH_LOCAL_TIMEZONE_PATTERN.matcher(dataType).matches()) {
return StandardSQLTypeName.TIMESTAMP; // TODO: what type do we want here?
} else {
LOG.warn("Datastream MySQL Type Unknown, Default to String: \"{}\"", dataType);
return StandardSQLTypeName.STRING;
}
}