2016-05-28 9 views
1

テーブル列のデータ型をstringからdateに変更する必要があります。一方、以下のエラーを取得しようとしています。助けてください。Hiveで列データ型を変更する

ハイブ>説明sales_staging;

OK

CUST_ID列prod_num列
数量INT SALE_DATEストリング

sale_idストリング取ら 時間:0.151秒、 フェッチされた:5行(S)

ハイブは>変化をsales_stagingテーブルを変更しますsale_date sale_date DATE;

FAILED:実行エラー、 org.apache.hadoop.hive.ql.exec.DDLTaskからコード1を返します。テーブルを変更できません。 SALE_DATE

ハイブ>

+0

メッセージはかなり明確です。整数を日付に変更することはできません。おそらく、新しいバージョンのテーブルを作成し、そのテーブルにデータをコピーする必要があります。 –

+0

sale_date文字列で、文字列データ型です。私は日付に変更したい。親切にチェックして助けてください。 – user2949241

答えて

1

あなたはのデータ型を変更したい列に同じ名前を付けることはできません。 次の列が それぞれの立場での既存の列との互換性のない型を持っています。この

ALTER TABLE sales_staging CHANGE sale_date sale_date_new DATE; 

のような使用は、日付型に既存の文字列型のデータを変更することはできません。このApache Hive Wiki

1

を参照してください。この問題を2つの方法で解決することができます。

  1. 同じ列を持つ別のテーブルを作成してカウントが、データ型は、あなたがして、文字列を日付に必要な列が日付に文字列をキャストすることによって新しいテーブルに古いテーブルのデータをエクスポートするinsertコマンドを使用した日付です。
  2. データ型がdateの既存のテーブルに新しい列を追加します。 dateへの文字列を新しい列にキャストしてテーブル自体を上書きします。

例:

私は

は、注文を記述する受注テーブルを持っています。
order_customer_idが
ORDER_STATUS列

は別のテーブルを作成しordersnew

がordersnew説明int型

ORDER_ID INT
ORDER_DATEストリング。

のid int型
大館日
CID int型
ostatus列

は今ordersnew挿入テーブル

をordersnewする受注データをエクスポートしORDER_ID選択し、キャスト(FROM_UNIXTIME(UNIX_TIMESTAMP(サブストリング(ORDER_DATE、 1,19)、 'yyyy-MM-dd HH:mm:ss'))をタイムスタンプとしてstdate、order_customer_id、order_status from orders;

部分文字列(order_date、1,19)、 'yyyy-MM-dd HH:mm:ss'これは、データごとにクエリを確認および変更する必要がある場所です。

日付変換の場合はhereをご確認ください

関連する問題