2016-12-30 17 views
-1

Hiveテーブルの作成中に日付を書式設定する方法はありますか。Hadoop - テーブルを作成するときの日付の書式設定

私は現在、DATEまたはTIMESTAMPとして書式設定すると値がnullになるため、仕事中の検出環境にデータをダンプし、文字列として日付を格納しています。

ここのような生データが見えるものです:

select id, receipt_dt, from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd') as app_dt from MySchema.MyTable where app_num='123456' 
:私の理解では、ハイブは、私は、SELECT文を使用して、これらをフォーマットすることができ、この形式で

yyyy-mm-dd hh:mm:ss 

を日付を受け入れることである

12/07/2016 05:07:28 PM 

ステートメントに追加する方法

from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd') 

一般的なCREATE EXTERNAL STATEMENTにこれを追加して、日付を文字列として保存したり、ALTER TABLE文を使って書式を変更したりする必要はありませんか?

CREATE EXTERNAL TABLE IF NOT EXISTS MySchema.My_New_Table 
(Field1 Format, 
Field2 Format, 
Field 3 Format, 
) 
....... 
+1

保管日数は恐ろしい考えであるデルタを挿入すると

...あなたは試してみて、編集して試してみる必要があるかもしれません...しかし、あなたのアイデアを得ました。問題が日付またはタイムスタンプフィールドに入力されている場合は、その問題の解決に集中してください。 –

+0

多分あなたはその質問を間違って理解していました。私はこれらを文字列として保存したくないのです...なぜ私は言っていたのですか?CREATE TABLE文のHIVE内で受け入れ可能なDATE形式としてこれらの日付の書式を設定したいので、ストリング...もう一度、これは発見です。私はこれが悪い考えであることを知っています。それはなぜ質問を投稿したのかのようなものです... – DukeLuke

+2

助けを求めている間、すべての帽子を飲んだ人に悲鳴を上げないでください。 –

答えて

1

生データとのステージングテーブルとして使用MyTable、最終/ターゲットテーブルmy_new_table変換は、IEと、dateフォーマット...それはプロセスのEDWの一種であろう作成...

例:

CREATE EXTERNAL TABLE IF NOT EXISTS MySchema.My_New_Table 
(Field1 int, 
Field2 string, 
Field3 date 
) 
... more definitions.... 
AS 
select id, receipt_dt, 
cast(from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd') as date) as app_dt 
from MySchema.MyTable ; 

注:これはテストされていません。同様のプロセスでなければなりません...文字列として

INSERT INTO TABLE MySchema.My_New_Table 
AS 
select id, receipt_dt, 
cast(from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd') as date) as app_dt 
from MySchema.MyTable where <<conditions>>; 
+0

恐ろしい!私はこのプロセスのために2つのテーブルを作成する必要はないと思っていましたが、実行する必要がある場合は、実行する必要があります。 – DukeLuke

+0

はい、または....あなたが選んだテーブルの1つを作成したい場合は、pig/spark/MRの誰かを使ってデータを変換してください:) ...でも、両方を行うことはできません(読み込み+変換) 1台のハイブテーブルでのみ –

+0

私は職場でスパークにアクセスできるかどうか分からない。私はもっ​​とビジネス面ではありますが、我々は実際にどのようなデータがあるかを見るためにテーブルを検出環境に投棄しています。 最初の例の古いテーブルに基づいて新しいテーブルを作成する場合、2番目のコードセットの目的は何ですか? – DukeLuke