2017-09-15 92 views
0

我在放置在HDFS目錄中的.txt文件上創建配置單元表。在訪問數據時,它顯示最後一個日期時間列(order_dtm)的輸出爲NULL。我搜索並嘗試了谷歌提供的其他選項,但迄今爲止沒有任何工作。Hive表顯示datetime列的NULL輸出

蜂巢查詢:---製表符分隔

Create EXTERNAL table Orders(
    order_id int, 
    cust_id int, 
    order_dtm TIMESTAMP) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/user/analyst/order/'; 

HDFS文件-head

>> hdfs dfs -cat /user/analyst/order/orders.txt | head -10 
17/09/15 23:46:37 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
5000001 1133938 06-01-2008 00:03:35 
5000002 1131278 06-01-2008 00:27:42 
5000003 1153459 06-01-2008 00:49:37 
5000004 1159099 06-01-2008 01:05:28 
5000005 1020687 06-01-2008 01:08:36 
5000006 1187459 06-01-2008 01:11:09 
5000007 1048773 06-01-2008 01:36:35 
5000008 1064002 06-01-2008 01:36:52 
5000009 1096744 06-01-2008 01:49:46 
5000010 1107526 06-01-2008 03:07:14 
cat: Unable to write to output stream. 
+0

**(1)** 「表示它的輸出作爲NULL」 - 用一個單一的值,其爲NULL的單個記錄?多行和其中一列只包含NULL值?所有列只包含NULL值? **(2)**''/ t'' - 反斜槓,不是斜槓('\ t')**(3)**您正在猜測分隔符而不是檢查它**(4)**您的分隔符是空間,這是沒有意義的,因爲你的數據(order_dtm)包含空間。在這個特定的用例中有一種方法來處理它,但這是一種不好的做法。 **(5)** ISO時間戳格式以外的任何其他格式 - 「yyyy-MM-dd HH:mm:ss [.S *]」將產生NULL。 –

+0

感謝您的回覆。 – Deepak

+0

@DuduMarkovitz ....感謝您的回覆。 1)最後一列ORDER_DTM顯示NULL值。 2)這是一個錯字,我原來的查詢有反斜槓。 3)我沒有猜測,我知道這是空間,因爲我已經在電子表格中測試了示例數據,但我嘗試了不同的方法來解決這個問題4)理解,5)理解....如果你可以接受放棄downvote ...我做了我的研究後發佈了問題。 – Deepak

回答

1
create external table orders 
(
    order_id int 
    ,cust_id  int 
    ,order_dtm string 
) 
    row format delimited 
    fields terminated by ' ' 
    location '/user/analyst/order' 
    tblproperties ('serialization.last.column.takes.rest'='true') 

; 

select * from orders 
; 

+-----------+----------+----------------------+ 
| order_id | cust_id |  order_dtm  | 
+-----------+----------+----------------------+ 
| 5000001 | 1133938 | 06-01-2008 00:03:35 | 
| 5000002 | 1131278 | 06-01-2008 00:27:42 | 
| 5000003 | 1153459 | 06-01-2008 00:49:37 | 
| 5000004 | 1159099 | 06-01-2008 01:05:28 | 
| 5000005 | 1020687 | 06-01-2008 01:08:36 | 
| 5000006 | 1187459 | 06-01-2008 01:11:09 | 
| 5000007 | 1048773 | 06-01-2008 01:36:35 | 
| 5000008 | 1064002 | 06-01-2008 01:36:52 | 
| 5000009 | 1096744 | 06-01-2008 01:49:46 | 
| 5000010 | 1107526 | 06-01-2008 03:07:14 | 
+-----------+----------+----------------------+ 

create view orders_v 
as 
select order_id 
     ,cust_id 
     ,from_unixtime(to_unix_timestamp(order_dtm,'MM-dd-yyyy HH:mm:ss')) as order_dtm 

from orders 
; 

select * from orders_v 
; 

+-----------+----------+----------------------+ 
| order_id | cust_id |  order_dtm  | 
+-----------+----------+----------------------+ 
| 5000001 | 1133938 | 2008-06-01 00:03:35 | 
| 5000002 | 1131278 | 2008-06-01 00:27:42 | 
| 5000003 | 1153459 | 2008-06-01 00:49:37 | 
| 5000004 | 1159099 | 2008-06-01 01:05:28 | 
| 5000005 | 1020687 | 2008-06-01 01:08:36 | 
| 5000006 | 1187459 | 2008-06-01 01:11:09 | 
| 5000007 | 1048773 | 2008-06-01 01:36:35 | 
| 5000008 | 1064002 | 2008-06-01 01:36:52 | 
| 5000009 | 1096744 | 2008-06-01 01:49:46 | 
| 5000010 | 1107526 | 2008-06-01 03:07:14 | 
+-----------+----------+----------------------+ 
+0

感謝您的回覆。接受答案。 – Deepak