2011-08-26 16 views
8

Zaman damgası sütununu içeren bir günlük dosyasına sahibim. Zaman damgası unix dönemi zaman biçimindedir.unix epoch saatini kovandaki tarih dizgisine dönüştürme

Bölüm, yıl, ay ve gün içeren bir zaman damgasını temel alan bir bölüm oluşturmak istiyorum.

Şimdiye kadar bunu yaptım ama bir hata atıyor.

( ) (

) İşte kodum.

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; 

cevap

24

Oof, bu çirkin görünüyor. Hive içinde bu işlevi kullanmayı deneyin:

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

Ya zaman damgası değil birkaç saniye ms ise:

bir YYYY-AA-GG SS içine unix zaman damgası dönüştürür
SELECT from_unixtime(unix_timestamp DIV 1000) as new_timestamp from raw_data ... 

: dd: ss formatında, o zaman yıl, ay ve günü almak için aşağıdaki işlevleri kullanabilirsiniz:

Hive ve SparkSQL, tarih ve tip döküm seçeneklerinin veri türünün daha yeni sürümleri ile
SELECT year(new_timestamp) as year, month(new_timestamp) as month, day(new_timestamp) as day ... 
+0

Teşekkür! Çok zamanımı kurtardım. Tam olarak aradığım şey bu! –

+2

'timestamp_value' (burada' unix_timestamp') saniye cinsinden olduğundan emin olun aksi halde 'from_unixtime (timestamp_value DIV 1000)' – narush

+0

Sadece ikinciye kadar zaman harcadım ama ms istiyorum da. bunu nasıl yaparım ? – Avinash

4

mevcuttur. özel biçimde tarih dönüştürmek gerekiyorsa Kıvılcım SQL yanı sıra Hive içinde çalışması gerektiğini takiben

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

, bunu kullanın:

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


yılAy örn olarak tarih dönecektir hangi 201.708

0

damgası bir dize bölümü için tarih dizesi yyyy-AA-gg dönüştürülmesi gerekmektedir listeye bu sorguyu ekleme:

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; 
İlgili konular