2017-06-23 8 views
0

次の形式の行があり、有効なハイブのタイムスタンプに変換したいと思います。私のデータでフォーマット:最初のunix_timestampを使用して、カラムのすべての行を最初に変換します

28/04/2017 00:00:00|20550|22/05/2017 00:00:00| 

私は分離された第1および3列目、唯一の興味|は、私の場合、フォーマットは、その後、次のとおりです。

dd/MM/yy HH:mm:ss 

私はこの缶を発見しましたHiveではタイムスタンプとして使用されません。私はそのクエリの異なるインスタンスをしようとしているが、私はドキュメントにアクセスすることはできませんので、

select from_unixtime(unix_timestamp('28/04/2017','dd/MM/yy HH:mm:ss'),'yyyy-MM-dd') from `20170428_f_pers_pers` 

は、私は次のようにクエリを使用して、適切なフォーマットにすべてが最初と3番目の列を変換するために自分ができない見つけます

    :(インターネットは仕事でここでキャップされる)、私は適切にこの二つの機能、 from_unixtime

    私が作ったunix_timestamp以下の仮定を使用する方法を見ることができません210

  1. 私は日と年を並べ替えることができます。これが真でない場合は、元のデータをHive形式に変換する方法がわかりません。
  2. これを選択すると、列全体に影響します。さらに、これを成功させた後、列全体のフォーマットを文字列からタイムスタンプに変更する必要があります(おそらく私は新しい列を作成する必要があります)。

私は気にしません一度に両方の列が表示されますが、今すぐクエリを実行すると、最初にデータがテーブルを持つように多くのnullが取得され、私の仮定は部分的に正しいとは確信していません。例えば、日と年のarround)。

これまでに研究された例からこれを行う方法を理解していないので、特定の列にクエリを適用する方法を知りたいと思います。列のデータを使用して列自体を変更すると、私には変わった列IDの型が使用されることはありません。

ありがとうございます。

編集:私は今

select from_unixtime(unix_timestamp(f_Date, 'dd/MM/yyyy HH:mm:ss')) from `myTable` 

ような何かをしようとしています。しかし、私はHUEから次のエラーを取得する:

Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 

答えて

1

フォーマットが完全に入力された文字列によってカバーされるべきです。
他の言葉では、 -
フォーマットは、入力文字列の長さと同じか、それよりも短くてもかまいません。

28/04/2017 00:00:00 
||||||||||||||||||| 
dd/MM/yyyy HH:mm:ss 

select from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy HH:mm:ss')) 

2017-04-28 00:00:00


28/04/2017 00:00:00 
|||||||||| 
dd/MM/yyyy 

select from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy')) 

2017-04-28 00:00:00


結果は、私が見cast

select cast (from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy HH:mm:ss')) as timestamp) 
+0

を使用してタイムスタンプする文字列から変換することができます...それは列内のすべてのデータに対して、そのクエリを適用することは可能ですか?このアイデアは、タイムスタンプのようなデータを最終的に持っています、それは可能ですか?多分それがクエリが私を失敗させ続ける理由です –

+0

私はそれもキャストする方法を探していたので、それは私にとって非常に便利です。しかし、1行だけではなく、2000を持つ場合、その操作を列全体に適用できますか?たとえば、'28/04/2017 00:00:00 '列が「date」列にある場合、この操作をその列にあるすべての単一行に適用する方法を適用するにはどうすればよいですか?出来ますか? –

+1

オフコースも可能です。スカラ関数は式に作用します。ハードコードされた式と列名に違いがあるのはなぜですか?なぜ2000行のテーブルをクエリして、1つの行を使って "テーブル"をクエリするかに違いがありますか? –

関連する問題