UPDATE CARBON TABLE
命令功能
UPDATE命令根据列表达式和可选的过滤条件更新CarbonData表。
命令格式
- 格式1:
    
UPDATE <CARBON TABLE> SET (column_name1, column_name2, ... column_name n) = (column1_expression , column2_expression , column3_expression ... column n_expression ) [ WHERE { <filter_condition> } ];
 - 格式2:
    
UPDATE <CARBON TABLE> SET (column_name1, column_name2,) = (select sourceColumn1, sourceColumn2 from sourceTable [ WHERE { <filter_condition> } ] ) [ WHERE { <filter_condition> } ];
 
参数描述
| 
        参数  | 
      
        描述  | 
     
|---|---|
| 
        CARBON TABLE  | 
      
        在其中执行更新操作的CarbonData表的名称。  | 
     
| 
        column_name  | 
      
        待更新的目标列。  | 
     
| 
        sourceColumn  | 
      
        需在目标表中更新的源表的列值。  | 
     
| 
        sourceTable  | 
      
        将其记录更新到目标CarbonData表中的表。  | 
     
注意事项
以下是使用UPDATE命令的条件:
- 如果源表中的多个输入行与目标表中的单行匹配,则UPDATE命令失败。
 - 如果源表生成空记录,则UPDATE操作将在不更新表的情况下完成。
 - 如果源表的行与目标表中任何已有的行不对应,则UPDATE操作将完成,不更新表。
 - 具有二级索引的表不支持UPDATE命令。
 - 在子查询中,如果源表和目标表相同,则UPDATE操作失败。
 - 如果在UPDATE命令中使用的子查询包含聚合函数或group by子句,则UPDATE操作失败。
    
例如,update t_carbn01 a set (a.item_type_code, a.profit) = ( select b.item_type_cd, sum(b.profit) from t_carbn01b b where item_type_cd =2 group by item_type_code);
其中,在子查询中使用聚合函数sum(b.profit)和group by子句,因此UPDATE操作失败。
 - 如果查询的表设置了carbon.input.segments属性,则UPDATE操作失败。要解决该问题,在查询前执行以下语句。
    
    
SET carbon.input.segments. <database_name>. <table_name>=*;
 
示例
- 示例1:
    
update carbonTable1 d set (d.column3,d.column5 ) = (select s.c33 ,s.c55 from sourceTable1 s where d.column1 = s.c11) where d.column1 = 'country' exists( select * from table3 o where o.c2 > 1);
 - 示例2:
    
update carbonTable1 d set (c3) = (select s.c33 from sourceTable1 s where d.column1 = s.c11) where exists( select * from iud.other o where o.c2 > 1);
 - 示例3:
    
update carbonTable1 set (c2, c5 ) = (c2 + 1, concat(c5 , "y" ));
 - 示例4:
    
update carbonTable1 d set (c2, c5 ) = (c2 + 1, "xyx") where d.column1 = 'india';
 - 示例5:
    
update carbonTable1 d set (c2, c5 ) = (c2 + 1, "xyx") where d.column1 = 'india' and exists( select * from table3 o where o.column2 > 1);
 
系统响应
可在driver日志和客户端中查看命令运行成功或失败。