2017-01-10 8 views
1

更新I日付および製品タイプIは、「T」(トップスにシャツ)の「S」からPRODUCT_TYPEのすべての値を更新する必要がハイブ - 分配カラム

product_id, sale_id, date, product_type 
42342423, 43423, 2017-01-01, S 
67867868, 23233, 2017-01-01, C 
53453466, 63423, 2017-02-01, S 

によって区画ハイブテーブルを有しています。 Hiveのバージョンではサポートされていないため、直接更新することはできません。このように掲載さ

他のソリューションには、新しいテーブルを作成し、case文でinsert overwriteを使用することを含む -

INSERT OVERWRITE TABLE data.textile_sales PARTITION(date='2017-01-01') 
select product_id, sale_id, case when product_type = 'S' then 'T' end as product_type, date 

のようなものが、列を更新する場合、これは動作しませんでしたパーティションです。

これについて他の方法はありますか?

+0

P.S. 'product_type = 'S'の場合、 'product_typeとして終了' - この式は 'S'以外のproduct_typeにNULLを返します。 –

答えて

0

パーティションの列「データ」は、実際にはディレクトリに関連するメタデータです。
既に 'T'フォルダがある場合、現在の日付+ product_type = 'S'フォルダから対応する日付+ product_type = 'T'フォルダにファイルを移動します。
「T」フォルダがない場合は、「S」フォルダの名前を変更してパーティションリストを更新するだけです。


デモ

hive> select * from product; 
OK 
67867868 23233 2017-01-01 C 
42342423 43423 2017-01-01 S 
53453466 63423 2017-01-02 S 

[[email protected] ~]$ hdfs dfs -ls -R /user/hive/warehouse/product 
drwxrwxrwx - training hive   0 2017-01-10 13:35 /user/hive/warehouse/product/date=2017-01-01 
drwxrwxrwx - training hive   0 2017-01-10 13:36 /user/hive/warehouse/product/date=2017-01-01/product_type=C 
-rwxrwxrwx 1 training hive   15 2017-01-10 13:36 /user/hive/warehouse/product/date=2017-01-01/product_type=C/000000_0 
drwxrwxrwx - training hive   0 2017-01-10 13:35 /user/hive/warehouse/product/date=2017-01-01/product_type=S 
-rwxrwxrwx 1 training hive   15 2017-01-10 13:35 /user/hive/warehouse/product/date=2017-01-01/product_type=S/000000_0 
drwxrwxrwx - training hive   0 2017-01-10 13:36 /user/hive/warehouse/product/date=2017-01-02 
drwxrwxrwx - training hive   0 2017-01-10 13:36 /user/hive/warehouse/product/date=2017-01-02/product_type=S 
-rwxrwxrwx 1 training hive   15 2017-01-10 13:36 /user/hive/warehouse/product/date=2017-01-02/product_type=S/000000_0 

[[email protected] ~]$ hdfs dfs -mkdir /user/hive/warehouse/product/date=2017-01-01/product_type=T 
[[email protected] ~]$ hdfs dfs -mkdir /user/hive/warehouse/product/date=2017-01-02/product_type=T 
[[email protected] ~]$ hdfs dfs -mv /user/hive/warehouse/product/date=2017-01-01/product_type=S/000000_0 /user/hive/warehouse/product/date=2017-01-01/product_type=T/000000_0 
[[email protected] ~]$ hdfs dfs -mv /user/hive/warehouse/product/date=2017-01-02/product_type=S/000000_0 /user/hive/warehouse/product/date=2017-01-02/product_type=T/000000_0 

[[email protected] ~]$ hdfs dfs -ls -R /user/hive/warehouse/product 
drwxrwxrwx - training hive   0 2017-01-10 13:41 /user/hive/warehouse/product/date=2017-01-01 
drwxrwxrwx - training hive   0 2017-01-10 13:36 /user/hive/warehouse/product/date=2017-01-01/product_type=C 
-rwxrwxrwx 1 training hive   15 2017-01-10 13:36 /user/hive/warehouse/product/date=2017-01-01/product_type=C/000000_0 
drwxrwxrwx - training hive   0 2017-01-10 13:42 /user/hive/warehouse/product/date=2017-01-01/product_type=S 
drwxrwxrwx - training hive   0 2017-01-10 13:42 /user/hive/warehouse/product/date=2017-01-01/product_type=T 
-rwxrwxrwx 1 training hive   15 2017-01-10 13:35 /user/hive/warehouse/product/date=2017-01-01/product_type=T/000000_0 
drwxrwxrwx - training hive   0 2017-01-10 13:41 /user/hive/warehouse/product/date=2017-01-02 
drwxrwxrwx - training hive   0 2017-01-10 13:42 /user/hive/warehouse/product/date=2017-01-02/product_type=S 
drwxrwxrwx - training hive   0 2017-01-10 13:42 /user/hive/warehouse/product/date=2017-01-02/product_type=T 
-rwxrwxrwx 1 training hive   15 2017-01-10 13:36 /user/hive/warehouse/product/date=2017-01-02/product_type=T/000000_0 

hive> msck repair table product; 
OK 
Partitions not in metastore: product:date=2017-01-01/product_type=T product:date=2017-01-02/product_type=T 
Repair: Added partition to metastore product:date=2017-01-01/product_type=T 
Repair: Added partition to metastore product:date=2017-01-02/product_type=T 
Time taken: 0.409 seconds, Fetched: 3 row(s) 

hive> select * from product; 
OK 
67867868 23233 2017-01-01 C 
42342423 43423 2017-01-01 T 
53453466 63423 2017-01-02 T 
+0

まだありますか? –

+0

私はデータファイルを変更するアクセス権がありませんでしたので、影響を受けたデータを新しい値で再ロードしました – Craig

関連する問題