将csv数据加载到hive外部表时,日期变量为NULL

时间:2015-11-12 06:54:03

标签: csv hadoop hive sas

我正在尝试将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';

此外,当我在配置单元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;查看表中的数据,并将Date变量(as_of_dt)存储为NULL 。 哪里可能是问题?

1 个答案:

答案 0 :(得分:0)

根据madhu的评论,您需要将as_of_dt的格式更改为yymmdd10。

您可以使用PROC DATASETS执行此操作。这是一个例子:

data test;
   /*Test data with AS_OF_DT formatted date9. per your question*/
   format as_of_dt date9.;
   do as_of_dt=today() to today()+5;
      output;
   end;
run;

proc datasets lib=work nolist;
/*Modify Test Data Set and set format for AS_OF_DT variable*/
   modify test;
     attrib as_of_dt format=yymmdd10.;
   run;
quit;

/*Create CSV*/
proc export file="C:\temp\test.csv"
            data=test
            dbms=csv
            replace;
        putnames=no;
run;

如果您打开CSV,您将看到YYYY-MM-DD格式的日期。