【源】從零自學Hadoop(16):Hive數據導入導出,集群數據遷移上

来源:http://www.cnblogs.com/mephisto/archive/2016/01/08/5081004.html
-Advertisement-
Play Games

上一篇,我們介紹了Hive的表操作做了簡單的描述和實踐。在實際使用中,可能會存在數據的導入導出,雖然可以使用sqoop等工具進行關係型數據導入導出操作,但有的時候只需要很簡便的方式進行導入導出即可   下麵我們開始介紹hive的數據導入,導出,以及集群的數據遷移進行描述。


閱讀目錄

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。

文章是哥(mephisto)寫的,SourceLink

 

     上一篇,我們介紹了Hive的表操作做了簡單的描述和實踐。在實際使用中,可能會存在數據的導入導出,雖然可以使用sqoop等工具進行關係型數據導入導出操作,但有的時候只需要很簡便的方式進行導入導出即可

   下麵我們開始介紹hive的數據導入,導出,以及集群的數據遷移進行描述。

導入文件到Hive

一:語法

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

二:從本地導入

  使用"LOCAL"就可以從本地導入

三:從集群導入

  將語法中"LOCAL"去掉即可。

四:OVERWRITE

  使用該參數,如果被導入的地方存在了相同的分區或者文件,則刪除並替換,否者直接跳過。

五:實戰

  根據上篇我們建立的帶分區的score的例子,我們先構造兩個個文本文件score_7和score_8分別代表7月和8月的成績,文件會在後面附件提供下載。

  由於建表的時候沒有指定分隔符,所以這兩個文本文件的分隔符。

  先將文件放入到linux主機中,/data/tmp路徑下。

      導入本地數據

load data local inpath '/data/tmp/score_7.txt' overwrite into table score PARTITION (openingtime=201507);

  我們發現001變成了1這是以為表的那一類為int形,所以轉成int了。

  將score_8.txt 放到集群中

su hdfs
hadoop fs -put score_8.txt /tmp/input

  導入集群數據

load data inpath '/tmp/input/score_8.txt' overwrite into table score partition(openingtime=201508);

  

將其他表的查詢結果導入表

一:語法

Standard syntax:

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;

INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;

 

Hive extension (multiple inserts):

FROM from_statement

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1

[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] 

[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;

FROM from_statement

INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1

[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] 

[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] ...;

 

Hive extension (dynamic partition inserts):

INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;

INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;

 

二:OVERWRITE

  使用該參數,如果被導入的表或者分區中有相同的內容,則該內容被替換,否者直接跳過。

三:INSERT INTO

  該語法從0.80才開始支持,它會保持目標表,分區的原有的數據的完整性。

四:實戰

  我們構造一個和score表結構一樣的表score1

create table score1 (

  id                int,

  studentid       int,

  score              double

)

partitioned by (openingtime string);

  插入數據

insert into table score1 partition (openingtime=201509) values (21,1,'76'),(22,2,'45');

  我們將表score1的查詢結果導入到score中,這裡指定了201509分區。

insert overwrite table score partition (openingtime=201509) select id,studentid,score from score1;

 

動態分區插入

一:說明

  本來動態分區插入屬於將其他表結果插入的內容,但是這個功能實用性很強,特將其單獨列出來闡述。該功能從Hive 0.6開始支持。

二:參數

  動態分區參數會在該命令生命周期內有效,所以一般講修改的參數命令放在導入之前執行。

Property Default Note
hive.error.on.empty.partition false Whether to throw an exception if dynamic partition insert generates empty results
hive.exec.dynamic.partition false Needs to be set to true to enable dynamic partition inserts
hive.exec.dynamic.partition.mode strict In strict mode, the user must specify at least one static partition in case the user accidentally overwrites all partitions, in nonstrict mode all partitions are allowed to be dynamic
hive.exec.max.created.files 100000 Maximum number of HDFS files created by all mappers/reducers in a MapReduce job
hive.exec.max.dynamic.partitions 1000 Maximum number of dynamic partitions allowed to be created in total
hive.exec.max.dynamic.partitions.pernode 100 Maximum number of dynamic partitions allowed to be created in each mapper/reducer node

三:官網例子

  我們可以下看hive官網的例子

FROM page_view_stg pvs
INSERT OVERWRITE TABLE page_view PARTITION(dt='2008-06-08', country)
       SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, null, null, pvs.ip, pvs.cnt

  在這裡country分區將會根據pva.cut的值,被動態的創建。註意,這個分區的名字是沒有被使用過的,在nonstrict 模式,dt這個分區也可以被動態創建。

四:實戰

  我們先清空score表的數據(3個分區)

insert overwrite table score partition(openingtime=201507,openingtime=201508,openingtime=201509) select id,studentid,score from score where 1==0;

  將7月8月數據插入到score1

load data local inpath '/data/tmp/score_7.txt' overwrite into table score1 partition(openingtime=201507);
load data local inpath '/data/tmp/score_8.txt' overwrite into table score1 partition(openingtime=201508);

  

  設置自動分區等參數

set  hive.exec.dynamic.partition=true;   
set  hive.exec.dynamic.partition.mode=nonstrict;   
set  hive.exec.max.dynamic.partitions.pernode=10000; 

  將score1的數據自動分區的導入到score

insert overwrite table score partition(openingtime) select id,studentid,score,openingtime from score1;

  圖片

 

 

將SQL語句的值插入到表中

一:說明

  該語句可以直接將值插入到表中。

二:語法

Standard Syntax:
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
 
Where values_row is:
( value [, value ...] )
where a value is either null or any valid SQL literal

三:官網例子

CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3, 2))
  CLUSTERED BY (age) INTO 2 BUCKETS STORED AS ORC;
 
INSERT INTO TABLE students
  VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
 
 
CREATE TABLE pageviews (userid VARCHAR(64), link STRING, came_from STRING)
  PARTITIONED BY (datestamp STRING) CLUSTERED BY (userid) INTO 256 BUCKETS STORED AS ORC;
 
INSERT INTO TABLE pageviews PARTITION (datestamp = '2014-09-23')
  VALUES ('jsmith', 'mail.com', 'sports.com'), ('jdoe', 'mail.com', null);
 
INSERT INTO TABLE pageviews PARTITION (datestamp)
  VALUES ('tjohnson', 'sports.com', 'finance.com', '2014-09-23'), ('tlee', 'finance.com', null, '2014-09-21');

四:實戰

  在將其他表數據導入到表中的例子中,我們新建了表score1,並且通過SQL語句將數據插入到score1中。這裡就只是將上面的步驟重新列舉下。

  插入數據

insert into table score1 partition (openingtime=201509) values (21,1,'76'),(22,2,'45');

 

--------------------------------------------------------------------

  到此,本章節的內容講述完畢。

模擬數據文件下載

Github https://github.com/sinodzh/HadoopExample/tree/master/2016/hive%20test%20file

系列索引

  【源】從零自學Hadoop系列索引

 

 

 

 

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。

文章是哥(mephisto)寫的,SourceLink

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 昨天在做一個sql代碼查詢的問題,發現了一些可優化的東西,藉此記錄一下。1,善用with as之前在寫sql 分頁查詢的時候,就只是用嵌套查詢,然後一個普通的關聯幾個表查詢,例如:SELECT * FROM( SELECT TOP 100 lr.SKU,lr.ItemPrice,lr.La...
  • 一、簡介思考一下這個場景:如果重做日誌可以無限地增大,同時緩衝池也足夠大,那麼是不需要將緩衝池中頁的新版本刷新回磁碟。因為當發生宕機時,完全可以通過重做日誌來恢復整個資料庫系統中的數據到宕機發生的時刻。但是這需要兩個前提條件:1、緩衝池可以緩存資料庫中所有的數據;2、重做日誌可以無限增大因此Chec...
  • 本文目錄列表:1、SQL Server旬時間粒度2、SQL Server月有關時間粒度3、SQL Server函數重構4、總結語5、參考清單列表SQL Server旬時間粒度 SQL Server不存在旬這個時間粒度,這個時間粒度在我們國家存在的。一個月分為上、中、下3旬,上旬和中旬均10天,分別對...
  • 整理和學習了一下網上高手關於rownum的帖子:參考資料: http://www.cnblogs.com/mabaishui/archive/2009/10/20/1587165.html對於Oracle的rownum問題,很多資料都說不支持>,>=,=,between……and,只能用以上符號(,...
  • MyCAT是mysql中間件,前身是阿裡大名鼎鼎的Cobar,Cobar在開源了一段時間後,不了了之。於是MyCAT扛起了這面大旗,在大數據時代,其重要性愈發彰顯。這篇文章主要是MyCAT的入門部署。一、安裝java因Mycat是用java開發的,所以需要在實驗環境下安裝java,官方建議jdk1....
  • 為什麼要使用sql語句建庫建表? 現在假設這樣一個場景,公司的項目經過測試沒問題後需要在客戶的實際環境中進行演示,那就需要對數據進行移植,現在問題來了:客戶的資料庫版本和公司開發階段使用的資料庫不相容怎麼移植? 行之有效的辦法就是編寫比較通用的SQL語句,編寫完畢後存入*.sql文件中,最後複製到客...
  • 五、MySql 中常用子句 1.where子句 我們都知道在查詢數據時,未必會查整個表中的數據,當有條件查詢時,就會用到where子句。其結構: select * from [表名] where [條件]。 2.like子句 like子句就是模糊查詢,有下麵一些通配符: ...
  • 在機器學習和數據挖掘中,經常會聽到兩個名詞:歸一化(Normalization)與標準化(Standardization)。它們具體是什麼?帶來什麼益處?具體怎麼用?本文來具體討論這些問題。
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...