PROC SQL从HIVE拉取数据时DATE9格式日期过滤无结果问题求助
问题原因与解决方案
核心问题
你遇到的问题是SAS生成的DATE9格式日期(如01JAN2024)与Hive中日期的存储格式不匹配,导致字符串/日期比较逻辑失效,返回0条记录。
Hive中日期通常以两种形式存储:
- 字符串类型:格式为
yyyy-MM-dd(如2024-01-01) - DATE类型:Hive原生日期类型,需用日期函数处理字符串输入
解决方案
情况1:Hive的HIVE_DATE是字符串类型(存储为yyyy-MM-dd)
修改SAS宏变量的生成格式,直接生成和Hive一致的yyyy-MM-dd字符串:
data _null_; call symputx('START_DATE', put(Today()-30, yymmdd10.)); run;
此时宏变量START_DATE的值为2024-01-01这类格式,和Hive的日期字符串完全匹配,原查询的条件AA.HIVE_DATE >= '&START_DATE.'就能正常筛选数据。
情况2:Hive的HIVE_DATE是DATE类型
保留SAS的DATE9格式宏变量,在Hive查询中用to_date()函数将DATE9字符串转换为Hive原生日期类型:
PROC SQL; CONNECT TO HADOOP (SCHEMA=HIVE_DATA DBMAX_TEXT=255); CREATE TABLE DATA AS SELECT * FROM CONNECTION TO HADOOP ( SELECT DISTINCT AA.* FROM HIVE_TABLE AS AA LEFT JOIN HIVE_TABLE_2 AS BB ON AA.KEY=BB.KEY WHERE AA.HIVE_DATE >= to_date('&START_DATE.', 'ddMMMyyyy') ); DISCONNECT FROM HADOOP; QUIT;
to_date('&START_DATE.', 'ddMMMyyyy')会将SAS的DATE9字符串(如01JAN2024)正确解析为Hive的DATE类型,实现准确的日期比较。
额外注意
原查询的WHERE子句多了一个多余的AND,需要删除,否则会导致Hive语法错误。
内容的提问来源于stack exchange,提问作者Ajlec12
相关产品推荐
相关产品推荐

