动态分区添加的新字段无法插入数据
生活随笔
收集整理的這篇文章主要介紹了
动态分区添加的新字段无法插入数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們在使用動態分區的進程中,有時候需要新增字段,新增之后,發現該字段一直為空,無論怎么插入數據,該字段值始終不變。過去的做法就是把表刪了,重建帶新字段的新表,問題就解決了,今天嘗試了一種新的方法,也完美解決了這個問題。
ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type[COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];--簡單些: alter table tb_name alter column_name cascade/restrict;我們添加字段的時候選擇CASCADE,再往老分區里面重新寫入數據,該字段就能更新了。
原理:
cascade
有遞歸的含義,在刪除數據庫時加上它,不論該數據庫下是否有表,一律刪除;
在修改分區表的時候,會把所有分區全部修改,分區太多,修改會耗更長時間;
restrict
在刪除表時,加上該關鍵字,如果該數據庫下有表,不會刪除;
在修改分區表時,不會修改老分區,只修改新分區,即:不管以前,只修改當前。
而restrict 是默認值,避免誤刪等誤操作,如果有特殊需求,我們要帶上cascade
hive> drop database test1; FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database test1 is not empty. One or more tables exist.) hive>我的操作:
1.數據庫現有2016和2017年的數據:
Partition test1.apd_bas_bay_p_f1{buy_year=2016} stats: [numFiles=1, numRows=272, totalSize=8167, rawDataSize=180608] Partition test1.apd_bas_bay_p_f1{buy_year=2017} stats: [numFiles=1, numRows=206, totalSize=6766, rawDataSize=135960]2.添加字段:
hive> alter table APD_BAS_BAY_P_F1 add columns(buy_month int) restrict; OK Time taken: 0.192 seconds3.更新2016,2017年的數據:
INSERT overwrite table APD_BAS_BAY_P_F PARTITION(BUY_YEAR) SELECT ID,SEQ_ID,CNAME,PHONE_NUM,PRODUCT_NAME,PRODUCT_CODE,PRICE,AMT,TOTAL_COST,BUY_DATE,BUY_WAY_FALG,SUBSTR(BUY_DATE,0,4) AS BUY_YEAR FROM BAK.APD_BAS_BAY_P_F_BAK WHERE SUBSTR(BUY_DATE,0,4)<2018;4.查看結果:
hive> select * from APD_BAS_BAY_P_F1 where buy_year=2017; OK 2 s00002 錢維言 18355249330 iphoneXR iphoneXR 5599 1 5599 2017/11/16 17:45 1 NULL 2017 4 s00004 黎玲丞 17689073874 iphoneXR iphoneXR 5599 1 5599 2017/9/14 21:28 1 NULL 2017 11 s00011 邱可達 13777770406 iphoneXR iphoneXR 5599 1 5599 2017/11/9 13:14 1 NULL 2017 13 s00013 彭華柴 18087071823 華為P30pro HWP30P 3499 1 3499 2017/8/21 21:30 2 NULL 2017 17 s00017 董琛雄 13739393668 華為P30pro HWP30P 3499 1 3499 2017/12/21 8:25 2 NULL 2017 18 s00018 崔諺征 17742572922 iphoneXR iphoneXR 5599 1 5599 2017/12/6 14:54 2 NULL 2017 21 s00021 汪蕓冉 14507260060 oppoR20 oppoR20 3599 1 3599 2017/10/31 15:51 1 NULL 2017 34 s00034 龔言字 13345452438 華為mate20pro mate20P 5999 1 5999 2017/8/19 19:50 1 NULL 2017 36 s00036 謝彤沂 15600489793 華為mate20X mate20X 4999 5 24995 2017/10/19 17:34 1 NULL 2017 40 s00040 龔悅 17768059644 榮耀20 H20 2499 1 2499 2017/8/1 12:47 1 NULL 2017 41 s00041 吳煌 15070716341 小米9 M9 3499 1 3499 2017/9/29 20:09 2 NULL 2017 49 s00049 董竹延 18686139632 oppoR20 oppoR20 3599 1 3599 2017/12/25 10:40 1 NULL 2017 54 s00054 蔡輔 19902324268 oppoR20 oppoR20 3599 1 3599 2017/10/18 17:15 1 NULL 2017 59 s00059 蘇海焓 18777776176 iphoneXR iphoneXR 5599 1 5599 2017/12/3 10:03 1 NULL 2017 63 s00063 杜恬憶 17845519083 榮耀20 H20 2499 1 2499 2017/8/29 14:55 2 NULL 2017 64 s00064 許謙 17048385976 華為P20 mate20B 12999 1 12999 2017/10/27 21:11 1 NULL 2017 65 s00065 江梅豐 17328046851 小米9 M9 3499 1 3499 2017/9/15 21:48 2 NULL 2017 83 s00083 楊寒功 17332351757 榮耀v20 Hv20 2999 1 2999 2017/10/5 18:23 1 NULL 2017 91 s00091 覃承 15334762451 榮耀20pro H20P 3499 1 3499 2017/12/24 11:21 2 NULL 2017新增的字段仍是空值。
5.插入2018和2019年的數據,查詢:
hive> select * from APD_BAS_BAY_P_F1 where buy_year=2018; OK 1 s00001 陶嫻依 17609686974 iphoneXR iphoneXR 5599 1 5599 2018/1/1 15:41 1 201801 2018 3 s00003 賀梅 18626038839 華為mate20保時潔 mate20B 12999 1 12999 2018/1/20 14:25 1 201801 2018 5 s00005 彭勝駿 13427744202 華為mate20 mate20 3399 1 3399 2018/6/3 11:00 1 201806 2018 6 s00006 余珊綺 17237083372 oppoR20 oppoR20 3599 1 3599 2018/12/27 21:54 1 201812 2018 7 s00007 郭冉 13384397593 榮耀20 H20 2499 1 2499 2018/2/19 11:29 1 201802 2018 8 s00008 蘇文展 13192977655 iphoneX iphoneX 5999 1 5999 2018/11/2 20:58 2 201811 2018 12 s00012 韓易 17873194514 三星肝垃圾X GLSX 6599 1 6599 2018/2/11 20:45 1 201802 2018 14 s00014 陸舒融 13183431414 iphoneX iphoneX 5999 1 5999 2018/9/27 20:31 2 201809 2018 20 s00020 王萱小 14949639352 oppoR20 oppoR20 3599 1 3599 2018/9/24 19:24 1 201809 2018 24 s00024 董大東 18514676812 紅米2 RM2 999 1 999 2018/6/1 9:01 1 201806 2018 25 s00025 黎予昭 15366888184 華為mate20 mate20 3399 1 3399 2018/11/23 14:41 1 201811 2018 27 s00027 唐昌臣 15943404630 華為mate20pro mate20P 5999 1 5999 2018/12/5 9:12 1 201812 2018 28 s00028 向翰豐 13372258092 華為mate20X mate20X 4999 1 4999 2018/3/12 19:55 1 201803 2018 32 s00032 朱蘭夢 19804773033 華為mate20pro mate20P 5999 1 5999 2018/7/18 13:37 2 201807 2018 35 s00035 潘滄俯 13866501242 榮耀v20 Hv20 2999 1 2999 2018/8/31 11:11 1 201808 2018 38 s00038 徐蕓 14580998733 iphoneX iphoneX 5999 1 5999 2018/1/18 20:03 1 201801 2018 39 s00039 劉冉鈺 16698339809 小米9 M9 3499 1 3499 2018/10/13 11:44 1 201810 2018可以看到新分區可以更新。
cascade模式各個分區數據都會更新,不再演示。
-
注意:所有數據都是自動生成的,如有侵權請告知。
總結
以上是生活随笔為你收集整理的动态分区添加的新字段无法插入数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一套Windows上C/C++的编码转换
- 下一篇: 有关字符的检验