2014-10-30 85 views
0

我有一个用于跟踪的红移表,因此它非常庞大。我需要在应用一些文本操作并从另一列提取值后更新一列。使用其他列的修改数据更新红移列值

我设法写入的查询仅适用于一行。

UPDATE schema.table_name SET data_id = (SELECT split_part(regexp_substr(data_column,'pattern=[^&]*'),'=',2)::BIGINT FROM schema.table_name where id = 1620) WHERE id = 1620; 

如何让它在表中的每一行都能正常工作。

回答

2
UPDATE 
    schema.table_name 
SET 
    data_id = SPLIT_PART(REGEXP_SUBSTR(data_column, 'pattern=[^&]*'),'=',2)::BIGINT; 
0

只是不要把WHERE id = 1620;更新查询结束。

0

更新在Redshift中效率不高。如果你有一个巨大的表,并且你打算更新每一行,你应该将数据(带有更新的列)复制到一个新表中,然后将它们翻转。

+0

它为我工作。而且速度很快。为了记录,该表格非常庞大,其中有100万条记录被更新。我曾经在几处地方看过,红移的更新“过于缓慢”,因此我犹豫不决。但它的工作。 – 2014-10-30 18:40:07