2011-08-26 16 views
8

में यूनिक्स युग टाइम टू डेट स्ट्रिंग को कैसे परिवर्तित करें मेरे पास एक लॉग फ़ाइल है जिसमें टाइमस्टैम्प कॉलम है। टाइमस्टैम्प यूनिक्स युग टाइम प्रारूप में है।हाइव

मैं विभाजन वर्ष, महीने और दिन के साथ टाइमस्टैम्प के आधार पर एक विभाजन बनाना चाहता हूं।

अभी तक मैंने यह किया है लेकिन यह एक त्रुटि फेंक रहा है।

PARSE ERROR cannot recognize input '(' in column type 

यहां मेरा कोड है।

from (
     from raw_data 
      MAP ${PREFIX}raw_data.line 
      USING 's3://scripts/clean.py' 
      AS (timestamp STRING, name STRING) 
    ) map_out 
INSERT OVERWRITE TABLE date_base_data_temp PARTITION(year(timestamp), month(timestamp)), day(timestamp))) 
    select map_out.name; 

उत्तर

24

ओफ, यह बदसूरत लग रहा है। हाइव में इस समारोह का उपयोग कर प्रयास करें:

SELECT from_unixtime(unix_timestamp) as new_timestamp from raw_data ... 

या अगर टाइमस्टैम्प ms बजाय सेकंड के में है:

SELECT from_unixtime(unix_timestamp DIV 1000) as new_timestamp from raw_data ... 

यह एक YYYY-MM-YYY HH में एक यूनिक्स टाइमस्टैम्प धर्मान्तरित: MM: SS प्रारूप, तो आप वर्ष, माह, और दिन पाने के लिए निम्नलिखित कार्यों का उपयोग कर सकते हैं:

SELECT year(new_timestamp) as year, month(new_timestamp) as month, day(new_timestamp) as day ... 
+0

धन्यवाद! मेरा बहुत समय बचाया यही वह है जिसकी तलाश में मैं हूं! –

+2

सुनिश्चित करें कि 'timestamp_value' (यहां 'unix_timestamp') सेकंड में है अन्यथा' from_unixtime (timestamp_value DIV 1000)' – narush

+0

का उपयोग करें, मुझे केवल सेकंड तक ही समय मिल रहा है लेकिन मुझे भी एमएस चाहिए। मैं उसको कैसे करू ? – Avinash

4
हाइव और SparkSQL, तारीख और प्रकार कास्टिंग विकल्पों में से डेटा प्रकार के और अधिक हाल ही में रिलीज के साथ

उपलब्ध हैं। स्पार्क एसक्यूएल के रूप में हाइव में काम करते हैं और साथ ही चाहिए के बाद

SELECT cast(from_unixtime(epoch_datetime) as date) from myHiveTable 
2

आप कस्टम स्वरूप में तिथि बदलने की आवश्यकता है, इस का उपयोग करें:

select date_format(from_unixtime(epoch_datetime),'yyyMM') as formatted_date from myHiveTable; 


जो वर्ष महीना जैसे के रूप में की तारीख वापस आ जाएगी 201708

0

सूची जहां टाइमस्टैम्प एक स्ट्रिंग विभाजन के लिए दिनांक स्ट्रिंग yyyy-MM-dd करने के लिए परिवर्तित किए जाने की आवश्यकता को यह क्वेरी जोड़ना:

hive> select date_format(from_unixtime(epoch_datetime), 'yyyy-MM-dd') as day from table_name limit 20; 

-- If required, remove the millis precision for timestamps 
hive> select date_format(from_unixtime(cast(epoch_datetime/1000 as bigint)), 'yyyy-MM-dd') as day from table_name limit 20; 
संबंधित मुद्दे