抽取 db 库中 table4 的增量数据进入 Hive 的 ods 库中表 table4,增量字段 取 ods.table4 表中 time1、time2 中的返回一个最大者,只将新增的数据抽入,字段 名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String, 且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd)。用纯sql语法详细步骤代码
时间: 2023-06-13 09:08:00 浏览: 126
假设 db 库中的表 table4 的结构如下:
```
+----+--------+--------+----------+
| id | field1 | field2 | datetime |
+----+--------+--------+----------+
| 1 | abc | xyz | 2022-10-01 10:00:00 |
| 2 | def | uvw | 2022-10-02 10:00:00 |
| 3 | ghi | rst | 2022-10-03 10:00:00 |
+----+--------+--------+----------+
```
ods 库中的表 table4 的结构如下:
```
+--------+--------+------------+
| field1 | field2 | etl_date |
+--------+--------+------------+
| abc | xyz | 2022-10-02 |
+--------+--------+------------+
```
以下是抽取 db 库中 table4 的增量数据进入 Hive 的 ods 库中表 table4 的 SQL 代码:
```
INSERT INTO TABLE ods.table4 PARTITION(etl_date='${hiveconf:etl_date}')
SELECT
field1,
field2,
'${hiveconf:etl_date}' AS etl_date
FROM db.table4
WHERE datetime > (
SELECT
MAX(COALESCE(time1, time2))
FROM ods.table4
);
```
其中 `${hiveconf:etl_date}` 是从外部传入的变量,表示当前比赛日的前一天日期,格式为 yyyyMMdd,需要在执行 SQL 前设置该变量的值。例如,如果当前比赛日为 2022 年 10 月 5 日,则 `${hiveconf:etl_date}` 的值应该为 20221004。执行 SQL 的命令为:
```
hive -hiveconf etl_date=20221004 -f /path/to/sql/file.sql
```
阅读全文