从一个或几个table中获取数据插入到另一个table中

本文介绍了一个从sourceA和sourceB两个表中选择特定字段并插入到目标表target的SQL案例。该操作根据sourceA表中的flag字段转换为描述,并从sourceB表中获取value值,同时记录更新时间。

Table  target:

-----------------------------------------------

ID                        char(32)             PK

description          varchar(100)      null

value                   var                     not null

update_time       date                   not null

 

Table sourceA

----------------------------------------------

sourceID             char(32)             PK

flag                     char(1)               not null

 

 

Table sourceB

----------------------------------------------

sourceID             char(32)             PK

value                   varchar(1)          not null

 

 

insert into target(

    ID,

    description,

    value,

    update_time

)

select

s1.sourceID,

case when s1.flat = 'Y' then 'active'

        when s1.flat = 'N' then 'deactive'

        end,

s2.value,

current_timestamp

from sourceA s1, sourceB s2;

Hive使用INSERT语句将一个表的数据插入一个表有以下几种常见情况: 1. **简单插入**:直接从一个表查询数据并插入一个表,示例代码如下: ```sql INSERT INTO TABLE target_table SELECT * FROM source_table; ``` 这种方式会将`source_table`中的所有数据插入到`target_table`中。 2. **指定字段插入**:当只需要插入部分字段时,可以指定字段名,示例代码如下: ```sql INSERT INTO TABLE target_table (column1, column2) SELECT column1, column2 FROM source_table; ``` 此方法仅将`source_table`中的`column1`和`column2`字段的数据插入到`target_table`对应的字段中。 3. **插入到分区表**:如果目标表是分区表,需要明确指定分区,示例代码如下: ```sql INSERT INTO TABLE target_table PARTITION (partition_column = 'partition_value') SELECT * FROM source_table; ``` 如果插入数据到有分区的Hive表时不明显指定分区会抛出异常,如`insert overwrite table persons_tmp select * from persons;`会抛出`FAILED: SemanticException 1:23 Need to specify partition columns because the destination table is partitioned. Error encountered near token 'persons_tmp'` [^4]。 4. **覆盖插入**:使用`INSERT OVERWRITE`可以覆盖目标表中已有的数据,示例代码如下: ```sql INSERT OVERWRITE TABLE target_table SELECT * FROM source_table; ``` 5. **CTAS(Create Table As Select)**:在实际情况中,若将Hive的查询输出结果直接存到一个新的表中,可使用CTAS,示例代码如下: ```sql CREATE TABLE new_table AS SELECT * FROM source_table; ``` 这里虽然使用的不是`INSERT`语句,但也是一种将一个表的数据插入到新表的方式 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值