簡體   English   中英

將CSV數據加載到Hive外部表時,日期變量為NULL

[英]Date variable is NULL while loading csv data into hive External table

我正在嘗試將SAS數據集加載到Hive外部表。 為此,我首先將SAS數據集轉換為CSV文件格式。 在sas數據集中, Date變量(即as_of_dt)的內容顯示如下: LENGTH=8 , FORMAT= DATE9. , INFORMAT=DATE9. , LABLE=as_of_dt LENGTH=8 , FORMAT= DATE9. , INFORMAT=DATE9. , LABLE=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 ,我仍然可以通過使用配置單元命令SELECT * FROM final_merged_table_20151 limit 10;在表中查看數據SELECT * FROM final_merged_table_20151 limit 10; ,其中Date變量(as_of_dt)存儲為NULL。 問題可能出在哪里?

根據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格式顯示日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM