抽取 ods 库中 changerecord 的全量数据进入 Hive 的 dwd 库中表 fact_change_record,抽取数据之前需要 对数据根据 changeid 和 changemachineid进行联合去重处理,分区字段为 etldate且值与 ods库的相对应表该值相等,并添加 dwd_insert_user、dwd_insert_time、dwd_modify_user、 dwd_modify_time 四 列 ,其 中 dwd_insert_user、dwd_modify_user 均填写“user1”,dwd_insert_time、dwd_modify_time 均填写当前操作时间,并进行数据类型转换
时间: 2024-02-28 13:54:12 浏览: 236
ods_to_dwd.sql
好的,你可以按照以下步骤进行操作:
1. 在Hive中创建dwd库和fact_change_record表,并添加分区字段和新增的四列:
```
CREATE DATABASE IF NOT EXISTS dwd;
USE dwd;
CREATE TABLE IF NOT EXISTS fact_change_record (
changeid INT,
changemachineid INT,
changetype STRING,
changereason STRING,
changedate STRING,
etldate STRING,
dwd_insert_user STRING,
dwd_insert_time TIMESTAMP,
dwd_modify_user STRING,
dwd_modify_time TIMESTAMP
) PARTITIONED BY (etldate STRING);
```
2. 对ods库中的changerecord表进行联合去重处理,将结果写入临时表temp_change_record中:
```
USE ods;
CREATE TABLE IF NOT EXISTS temp_change_record AS
SELECT DISTINCT changeid, changemachineid, changetype, changereason, changedate, etldate
FROM changerecord;
```
3. 使用INSERT INTO语句将临时表中的数据插入到dwd库的fact_change_record表中,同时添加分区字段和新增的四列:
```
USE dwd;
INSERT INTO TABLE fact_change_record PARTITION (etldate='2022-01-01')
SELECT changeid, changemachineid, changetype, changereason, changedate, etldate,
'user1' AS dwd_insert_user, CAST(FROM_UNIXTIME(UNIX_TIMESTAMP()) AS TIMESTAMP) AS dwd_insert_time,
'user1' AS dwd_modify_user, CAST(FROM_UNIXTIME(UNIX_TIMESTAMP()) AS TIMESTAMP) AS dwd_modify_time
FROM temp_change_record;
```
其中,etldate的值可以根据你的需求进行修改。
4. 查看抽取结果:
```
USE dwd;
SELECT * FROM fact_change_record;
```
这样就可以将ods库中changerecord表的数据抽取到dwd库的fact_change_record表中,并进行了联合去重处理和添加了新增的四列。
阅读全文