HIVE基本語法以及HIVE分區

来源:https://www.cnblogs.com/liaozhilong/archive/2018/09/20/9681450.html
-Advertisement-
Play Games

HIVE小結 HIVE基本語法 HIVE和Mysql十分類似 建表規則 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT tabl ...


HIVE小結

HIVE基本語法

HIVE和Mysql十分類似
建表規則

  CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
  [(col_name data_type [COMMENT col_comment], ...)] 
  [COMMENT table_comment] 
  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 
  [CLUSTERED BY (col_name, col_name, ...) 
  [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
  [ROW FORMAT row_format] 
  [STORED AS file_format] 
  [LOCATION hdfs_path]
  1. CREATE TABLE 創建一個指定名字的表。如果相同名字的表已經存在,則拋出異常;用戶可以用 IF NOT EXIST 選項來忽略這個異常

  2. EXTERNAL 關鍵字可以讓用戶創建一個外部表,在建表的同時指定一個指向實際數據的路徑(LOCATION)

  3. LIKE 允許用戶複製現有的表結構,但是不複製數據

  4. COMMENT可以為表與欄位增加描述

創建表
hive> CREATE TABLE IF NOT EXISTS test1
> (id INT,name STRING);

刪除表
drop table test1;
查看表結構
desc test1;
修改表名
alter table test1 rename to test2;
修改表結構
alter table test1 add columns(address string ,grade string);
創建和已知表相同結構的表
create table test3 like test1;
載入本地數據
load date local inpath '/home/date/' into table test1;
註意可以在into 前面添加overwrite表示覆蓋之前在test1的數據,如果沒有就表示載入本地數據在原始數據的後面
載入hdfs的文件
首先將文件上傳到hdfs文件系統對對應的目錄上
hadoop fs -put /home/
.txt /usr/
然後載入hdfs中的數據
load data inpath /usr/
into table test1;

插入數據
insert overwrite table test2 select * from test1;
查詢數據
和mysql語法上沒甚沒區別

  1. 查詢單個欄位的數據
  2. where條件查詢
  3. all和distinct
  4. limit限制查詢
  5. group by
  6. order by
  7. sort bu
  8. distribute by
  9. cluster by

HIVE分區

hive分區是為了更方便數據管理,常見的有時間分區和業分區

    create table t1(
    id      int
    ,name    string
    ,hobby   array<string>
    ,add     map<String,string>
    )
    partitioned by (pt_d string)

需要註意的是分區欄位不能和表中的欄位重覆,否則就會報錯:

    FAILED: SemanticException [Error 10035]: Column repeated in partitioning columns

我們在載入數據的時候也可以分區載入

load data local inpath '/home/hadoop/Desktop/data' overwrite into table t1 partition ( pt_d = '201701');

之後我們再將同一份數據載入到不同的分區中

load data local inpath '/home/hadoop/Desktop/data' overwrite into table t1 partition ( pt_d = '000000');

查詢一下數據 select * from t1;

1   xiaoming    ["book","TV","code"]    {"beijing":"chaoyang","shagnhai":"pudong"}  000000
2   lilei   ["book","code"] {"nanjing":"jiangning","taiwan":"taibei"}   000000
3   lihua   ["music","book"]    {"heilongjiang":"haerbin"}  000000
1   xiaoming    ["book","TV","code"]    {"beijing":"chaoyang","shagnhai":"pudong"}  201701
2   lilei   ["book","code"] {"nanjing":"jiangning","taiwan":"taibei"}   201701
3   lihua   ["music","book"]    {"heilongjiang":"haerbin"}  201701

創建分區除了在創建表的時候啟動partition by實現,還可以
alter table t1 add partition (pt_d string)
這樣就創建了一個分區,這時會看到hive在hdfs中創建了相應的文件夾

查詢相應的分區的數據

select * from t1 where pt_d = ‘000000’

添加分區,增加一個分區文件

alter table t1 add partition (pt_d = ‘333333’); 

刪除分區(刪除對應的分區文件)
註意,對於外表進行drop partition並不會刪除hdfs上的文件,並且通過msck repair table table_name同步回hdfs上的分區。

alter table test1 drop partition (pt_d = ‘20170101’);

查詢分區

show partitions table_name;

修複分區
修複分區就是重新同步hdfs上的分區信息。

msck repair table table_name;

插入數據

insert overwrite table partition_test partition(stat_date='2015-01-18',province='jiangsu') 
select member_id,name from partition_test_input 
where stat_date='2015-01-18' 
and province='jiangsu';

內部表和外部表的區別

Hive中表與外部表的區別:
1、在導入數據到外部表,數據並沒有移動到自己的數據倉庫目錄下,也就是說外部表中的數據並不是由它自己來管理的!而表則不一樣;
2、在刪除表的時候,Hive將會把屬於表的元數據和數據全部刪掉;而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的!
那麼,應該如何選擇使用哪種表呢?在大多數情況沒有太多的區別,因此選擇只是個人喜好的問題。但是作為一個經驗,如果所有處理都需要由Hive完成,那麼你應該創建表,否則使用外部表!


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

-Advertisement-
Play Games
更多相關文章
  • 版本信息 ubuntu版本:16.04.1 mysql server版本:5.7.23 安裝 先查看一下apt可獲取的mysql版本 看到結果裡面有這兩個package,我們安裝mysql server就可以了,可以看到提供的mysql server是5.7.23的。 安裝apt提供的mysql 開 ...
  • 一、現象 發運車次調用發車介面時發生異常,後臺拋出資料庫死鎖日誌。 二、原因分析 通過日誌可以看出事務T1等待 heap no 8的行鎖 (X locks 排他鎖) 事務T2持有heap no 8的行鎖,等待heap no 7的行鎖 兩個更新運單sql發生死鎖。 三、代碼追蹤 發車介面:/ltl/l ...
  • 1.1 前言 MySQL對於很多Linux從業者而言,是一個非常棘手的問題,多數情況都是因為對資料庫出現問題的情況和處理思路不清晰。在進行MySQL的優化之前必須要瞭解的就是MySQL的查詢過程,很多的查詢優化工作實際上就是遵循一些原則讓MySQL的優化器能夠按照預想的合理方式運行而已。 今天給大家 ...
  • (1)LIMIT子句(MySql) LIMIT 子句用於規定要返回的記錄的數目,一般和Order By一起使用 經常用於數據的分頁查詢,但是一旦數據量一大,limit的性能就會急速下降 格式:select * from table limit m,n 其中m代表表的某一行數據,n表示的是要查找的多少 ...
  • [20180918]文件格式與sql_id.txt--//記錄測試中遇到的一個問題.這是我在探究SQL*Net more data from client遇到的問題.--//就是實際oracle會把windows的腳本文件轉化為linux的文本格式.1.環境:SCOTT@test01p> @ver1 ...
  • 過去公司都是用的5.7 系列的MySQL,隨著8.0的發版,也想試著升級一下。遇到了兩個小錯誤,記錄在此。 路徑設置: 安裝包路徑:/data/mysql80/ 數據路徑: /data/mysql/ 下麵描述一下,我安裝時遇到的錯誤 和 問題解決方案: 問題1 Premission denied 因 ...
  • 創建執行JS語句任務,在腳本中輸入相關代碼,兩種寫法: 寫法一 // 直接調用類的路徑 var now = com.haohe.utils.DateUtil.getNowDateTime(); //print("-->"+now); 寫法二 // 導入類的包路徑 importPackage(java ...
  • MongoDB 提供了 linux 各發行版本 64 位的安裝包,你可以在官網下載安裝包。 下載地址:https://www.mongodb.com/download-center#community 下麵我們選擇ubuntu來安裝MongoDB: 1.官網下載安裝包: wget http://fa ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...