中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

傳統hive數據表怎么通過寫SQL方式實現數據的更新

發布時間:2021-12-10 09:30:47 來源:億速云 閱讀:1217 作者:小新 欄目:大數據

這篇文章主要為大家展示了“傳統hive數據表怎么通過寫SQL方式實現數據的更新”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“傳統hive數據表怎么通過寫SQL方式實現數據的更新”這篇文章吧。

1.這里新建兩張表student10,student10_temp(臨時表,可看成業務庫),建表語句如下:

//學生信息表create table student10(id string,name string,age string) row format delimited fields terminated by',' stored as textfile;//學生信息表臨時表,業務關系數據庫的變化,一般先導入臨時表create table student10_temp(id string,name string,age string) row format delimited fields terminated by',' stored as textfile;

2.數據準備,可理解成業務庫更新前全量數據,文件test.txt,數據如下:

[root@salver158 ~]# cat /tmp/test.txt 1,name1,162,name2,173,name3,18

3.這里先將test.txt中的數據加載到student10_temp表中,執行命令:

hive> load data local inpath '/tmp/test.txt'  into table student10_temp;Loading data to table lujs.student10_tempTable lujs.student10_temp stats: [numFiles=1, numRows=0, totalSize=33, rawDataSize=0]OKTime taken: 1.275 seconds

    執行insert into將student10_temp,全量插入到student10表中:

hive> insert into table student10 select id,name,age from student10_temp;

    到這里兩張表數據相同,這就相當于我們生產上,第一次進行了全量數據的導入;這時候我們更新了student10_temp表(這里模擬業務關系數據庫中刪除一條數據,插入了兩條數據),這里直接加載文件test1.txt:

[root@salver158 tmp]# cat  /tmp/test1.txt 2,name2,173,name3,5104,name4,195,name5,20

    其實這個student10_temp一般代表的是關系型數據庫的變化,然后可通過sqoop等數據抽取工具,全量抽取關系數據庫已變化的數據到student10_temp臨時表中。

hive> select * from student10_temp;OK2  name2  173  name3  5104  name4  195  name5  20

4.我們可以通過SQL進行數據比對,然后把非增量、非更新的數據覆蓋到student10表中,執行完SQL后可保證student10和student10_temp數據不重復(這里表必須要有主鍵,不然沒法關聯)

    找出非增量、非更新數據,一般就是已刪除數據,執行命令:

select b.id,b.name,b.age from student10 a left join student10_temp b on a.id=b.id  where b.id is nul

    將非增量、非更新數據覆蓋到student10表,執行命令:

insert overwrite table student10 select b.id,b.name,b.age from student10 a left join student10_temp b on a.id=b.id  where b.id is null

    執行完后,表中只有非增量、非更新數據,一般就是業務庫已刪除數據,這里我們可以選擇保留做個標識;

5.經過步驟4的比對去重之后,則可以把臨時表數據加載進來,執行命令:

hive> insert into table student10  select  id,name,age from student10_temp;

    查看最終數據,包含非增量、非更新數據,以及更新和增量數據:

hive> select * from student10;OK1  name1  162  name2  173  name3  5104  name4  195  name5  20Time taken: 0.436 seconds, Fetched: 5 row(s)

    我這里只是簡單的一種數據更新方案,中間可能問題,數據更新之前最后都要做好備份,以免丟失數據。

補充SQL:

    1.比對新增、更新數據SQL,這里可以執行步驟4之前查看,可在student10表中添加一個標識字段來標識,是已刪除、更新、還是新增數據,這里就不在演示,有興趣自己去研究下:

hive> select a.id,a.name,a.age,CASE WHEN b.id IS null THEN '新增' ELSE '更新'  END  FROM  student10_temp a LEFT JOIN  student10  b on a.id=b.id;Query ID = root_20200310194355_d5428597-77a7-40e6-8b56-6b636c3e137eTotal jobs = 1Launching Job 1 out of 1Status: Running (Executing on YARN cluster with App id application_1583204243863_0026)
--------------------------------------------------------------------------------        VERTICES      STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED--------------------------------------------------------------------------------Map 1 ..........   SUCCEEDED      1          1        0        0       0       0Map 2 ..........   SUCCEEDED      1          1        0        0       0       0--------------------------------------------------------------------------------VERTICES: 02/02  [==========================>>] 100%  ELAPSED TIME: 6.59 s     --------------------------------------------------------------------------------OK2  name2  17  更新3  name3  510  更新4  name4  19  新增5  name5  20  新增

以上是“傳統hive數據表怎么通過寫SQL方式實現數據的更新”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

雷州市| 安陆市| 博乐市| 永年县| 平陆县| 陇西县| 墨竹工卡县| 云阳县| 缙云县| 罗甸县| 霍州市| 岑巩县| 福安市| 仁布县| 吴桥县| 永泰县| 桂东县| 普安县| 岢岚县| 鄂伦春自治旗| 区。| 鞍山市| 丽水市| 汝阳县| 锦州市| 长兴县| 宽城| 海宁市| 如皋市| 米林县| 无为县| 宁都县| 驻马店市| 青阳县| 杭州市| 灵川县| 察隅县| 乡城县| 中西区| 宿州市| 赣州市|