首页 > 解决方案 > 处理传递给 AWS 数据管道中的 SQL 活动的参数

问题描述

我正在使用 AWS 数据管道。在这种情况下,我将几个参数从管道定义传递到 sql 文件,如下所示:

  s3://reporting/preprocess.sql,-d,RUN_DATE=#{@scheduledStartTime.format('YYYYMMdd')}"

我的 sql 文件如下所示:

CREATE EXTERNAL TABLE RESULT (
STUDENT_ID            STRING,
REMARKS               STRING,
EXAM_DATE             STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE LOCATION  's3://result/data/run_date=${previous day of RUN_DATE}';  <----(1)

...
insert into temp
select a.roll_number, remarks
from student a inner join result b
on a.student_id = b.student_id
where exam_date>='<start date of previous month of RUN_DATE>' <---- (2)
and exam_date<='<end date of previous month of RUN_DATE>';<---- (3)

在上面的 sql 中,我不知道如何从 RUN_DATE 实现 (1)、(2) 和 (3)。

所以如果 RUN_DATE=20190101,那么 (1) 中的值应该是 "20181231",(2) 中的值应该是 "2018-12-01" 并且 (3) 应该是 "2018-12-31" 。

标签: amazon-web-serviceshivehiveqlaws-data-pipeline

解决方案


您可以在 SQL 中使用 HIVE 日期函数来获得所需的结果:

  1. 前一天:date_sub(RUN_DATE,1)
  2. 上个月的开始日期:date_add(last_day(add_months(RUN_DATE, -2)),1)
  3. 上个月的结束日期:last_day(add_months(RUN_DATE, -1))

推荐阅读