我在Redshift集群中有一个表,行数约为10亿.我有一个作业试图根据一些过滤器更新一些列值.在此表中更新任何内容都非常慢.这是一个例子:
SELECT col1, col2, col3
FROM SOMETABLE
WHERE col1 = 'a value of col1'
AND col2 = 12;
Run Code Online (Sandbox Code Playgroud)
上面的查询在不到一秒的时间内返回,因为我有sortkeys col1和col2.只有一行符合此条件,因此结果集只有一行.但是,如果我跑:
UPDATE SOMETABLE
SET col3 = 20
WHERE col1 = 'a value of col1'
AND col2 = 12;
Run Code Online (Sandbox Code Playgroud)
此查询需要一段未知的时间(我在20分钟后停止了).同样,它应该更新一行的一个列值.
我还尝试按照此处的文档:http://docs.aws.amazon.com/redshift/latest/dg/merge-specify-a-column-list.html,其中讨论了如何创建临时临时表以进行更新主表,但得到了相同的结果.
知道这里发生了什么吗?
我正在sci-kit学习中构建线性回归模型,并将输入扩展为sci-kit学习管道中的预处理步骤.有什么办法可以避免缩放二进制列吗?发生的事情是这些列与其他列一起缩放,导致值以0为中心,而不是0或1,所以我得到的值如[-0.6,0.3],这会导致输入值为0影响我的线性模型中的预测.
基本代码说明:
>>> import numpy as np
>>> from sklearn.pipeline import Pipeline
>>> from sklearn.preprocessing import StandardScaler
>>> from sklearn.linear_model import Ridge
>>> X = np.hstack( (np.random.random((1000, 2)),
np.random.randint(2, size=(1000, 2))) )
>>> X
array([[ 0.30314072, 0.22981496, 1. , 1. ],
[ 0.08373292, 0.66170678, 1. , 0. ],
[ 0.76279599, 0.36658793, 1. , 0. ],
...,
[ 0.81517519, 0.40227095, 0. , 0. ],
[ 0.21244587, 0.34141014, 0. , 0. ],
[ 0.2328417 , 0.14119217, 0. , 0. ]])
>>> scaler …Run Code Online (Sandbox Code Playgroud)