Для проекта CsvCruncher я загружаю файл CSV в HSQLDB.
CREATE TEXT TABLE concat_1 ( Op VARCHAR(255), id VARCHAR(255), uuid VARCHAR(255), session_id VARCHAR(255) )
SET TABLE concat_1 SOURCE '.../concat_1.csv;encoding=UTF-8;cache_rows=50000;cache_size=10240000;ignore_first=true;fs=,;qc=\quote'
Во время создания таблицы и загрузки я ничего не знаю означения столбцов.
Чтобы ускорить SELECT, я пытаюсь преобразовать столбцы (после загрузки) в другие типы, опираясь на эту функцию HSQLDB:
"HyperSQL позволяет изменятьвведите, если все существующие значения могут быть преобразованы в новый тип без усечения строки или потери значащих цифр. "
ALTER TABLE concat_1 ALTER COLUMN id SET DATA TYPE BIGINT
Но когда я пытаюсь это сделать, я получаю:
operation is not allowed on text table with data in statement
Возможно ли это с HSQLDB без дублирования таблицы TEXT в обычную (нативную) таблицу?
Вот код для вашего воображения:
for (String colName : colNames) {
String sqlTypeUsed = null;
for (String sqlType : new String[]{"TIMESTAMP","UUID","BIGINT","INTEGER","SMALLINT","BOOLEAN"}) {
String sqlCol = String.format("ALTER TABLE %s ALTER COLUMN %s SET DATA TYPE %s",
tableName, colName, sqlTypeUsed = sqlType);
log.info("Column change attempt SQL: " + sqlCol);
try (Statement st = this.conn.createStatement()) {
st.execute(sqlCol);
log.info(String.format("Column %s.%s converted to to %s", tableName, colName, sqlTypeUsed));
} catch (SQLException ex) {
log.info(String.format("Column %s.%s values don't fit to %s.\n %s",
tableName, colName, sqlTypeUsed, ex.getMessage()));
}
}
}