amazon-web-services - 处理传递给 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" 。
解决方案
您可以在 SQL 中使用 HIVE 日期函数来获得所需的结果:
- 前一天:
date_sub(RUN_DATE,1)
- 上个月的开始日期:
date_add(last_day(add_months(RUN_DATE, -2)),1)
- 上个月的结束日期:
last_day(add_months(RUN_DATE, -1))
推荐阅读
- spring-kafka - 如何为每个 StreamListener 的 ConcurrentKafkaListenerContainerFactory 设置并发(或其他配置)
- github - 超过 master 分支的 github 安全警报
- python - 如何在 Python 3.7 的 DataFrame 列表中将 Nan 值更改为零
- angular-material - 当 mat-dialog 方向为 RTL 时,mat-radio-button 无法正常工作
- android - kotlin 变量类型在运行时更改
- amazon-web-services - AWS EKS:将多个服务账户分配给 Deployment\Pod
- python - 使用 OpenCV 查找图像的坐标
- python - 如何使用 Python REST 从 Sharepoint 列表中删除所有项目?
- amazon-web-services - aws 管道角色无权对跨账户角色执行 AssumeRole
- css - 如何在不使用网格和 flex 的情况下制作水平视图