更改数据类型时出现Vertica错误

时间:2017-10-11 18:08:34

标签: sql vertica

我尝试使用以下查询将列从varchar转换为bigint:

X_train = array([['20170110', 'US', '1', 'google', '1', '500'],
                 ['20170110', 'EU', '1', 'google', '2', '400'],
                 ['20170111', 'US', '2', 'facebook', '2', '400']],
                dtype='<U21')
y_train = array(['5000', '2000', '2000'], dtype='<U21')

X_test = array([['20170112', 'EU', '2', 'google', '1', '500'],
                ['20170113', 'US', '1', 'facebook', '2', '400'],
                ['2017014', 'US', '2', 'google', '1', '500']],
               dtype='<U21')

estimator = RandomForestRegressor().fit(X_train, y_train)
y_pred = estimator.predict(X_test)

但是我收到以下错误:

ALTER TABLE 'table_name' ALTER COLUMN 'colname' SET DATA TYPE BIGINT; 

该列具有类似于37439510的int值,但是采用varchar格式。

2 个答案:

答案 0 :(得分:1)

无法回答,这不适用于Vertica deifnition:

https://my.vertica.com/docs/7.1.x/HTML/index.htm#Authoring/AdministratorsGuide/Tables/ChangingAColumnsDataType.htm

两种方法。

  1. 创建新表,加载新表,删除旧表,重命名新表。

  2. 在表格中创建新列。从旧加载列。更改表以删除旧列

答案 1 :(得分:1)

如果你想保留你的桌子,试试:

ALTER TABLE table_name ADD COLUMN colname_as_int INT DEFAULT colname::INT;

然后:

ALTER TABLE table_name ALTER COLUMN colname_as_int DROP DEFAULT;

然后:

ALTER TABLE table_name DROP COLUMN colname;

最后:

ALTER TABLE table_name RENAME COLUMN colname_as_int TO colname;

但是,如果table_name上没有colname作为ORDER BY列或SEGMENTED BY HASH()列的投影,则仅适用;你必须用另一个超级投影替换那些投影,然后放弃那些预测....