【发布时间】:2016-02-13 10:41:55
【问题描述】:
我正在尝试将 SAS 数据集加载到 Hive 外部表。为此,我首先将 SAS 数据集转换为 CSV 文件格式。在 sas 数据集中,日期变量(即 as_of_dt) 内容显示如下:
LENGTH=8 , FORMAT= DATE9. , INFORMAT=DATE9. , LABLE=as_of_dt
为了将 SAS 转换为 CSV,我使用了下面的代码补丁(我之前在 sas 中使用过'retain'语句,以便保持变量的顺序):
proc export data=input_SASdataset_for_csv_conv
outfile= "/mdl/myData/final_merged_table_201501.csv"
dbms=csv
replace;
putnames=no;
run;
直到这里(即创建 csv 文件),Date 变量被正确读取。但在此之后,当我在 HIVE 中使用以下命令将其加载到 Hive 外部表中时,DATE 变量(即 as_of_dt)被分配为 NULL :
CREATE EXTERNAL TABLE final_merged_table_20151(as_of_dt DATE, client_cm_id STRING, cm11 BIGINT, cm_id BIGINT, corp_id BIGINT, iclic_id STRING, mkt_segment_cd STRING, product_type_cd STRING, rated_company_id STRING, recovery_amt DOUBLE, total_bal_amt DOUBLE, write_off_amt DOUBLE) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/mdl/myData';
另外,当我在 hive desc formatted final_merged_table_201501 中使用此命令时,我会得到下表参数:
Table Parameters:
COLUMN_STATS_ACCURATE false
EXTERNAL TRUE
numFiles 0
numRows -1
rawDataSize -1
totalSize 0
transient_lastDdlTime 1447151851
但即使它显示 numRows=-1,我仍然可以通过使用 hive 命令 SELECT * FROM final_merged_table_20151 limit 10; 将日期变量 (as_of_dt) 存储为 NULL 来查看表内的数据。
问题可能出在哪里?
【问题讨论】:
-
如果字符串的格式为 'YYYY-MM-DD',则返回对应于该年/月/日的日期值。如果字符串值与此格式不匹配,则在 Hive 中将返回 NULL