當前位置:首頁 » 編程語言 » hivesqlupdate
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hivesqlupdate

發布時間: 2022-12-20 03:55:41

Ⅰ Hive入門概述

1.1 什麼是Hive

Hive:由Facebook開源用於解決海量結構化日誌的數據統計。

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張表,並提供類sql查詢功能。本質是:將HQL轉化成MapRece程序

Hive處理的數據存儲在HDFS

Hive分析數據底層的實現是MapRece

執行程序運行在Yarn上

1.2 Hive的優缺點

1.2.1 優點

操作介面採用類SQL語法,提供快速開發的能力(簡單、容易上手)。

避免了去寫MapRece,減少開發人員的學習成本。

Hive的執行延遲比較高,因此Hive常用於數據分析,對實時性要求不高的場合。

Hive優勢在於處理大數據,對於處理小數據沒有優勢,因為Hive的執行延遲比較高。

Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。

1.2.2 缺點

1.Hive的HQL表達能力有限

(1)迭代式演算法無法表達

(2)數據挖掘方面不擅長

2.Hive的效率比較低

(1)Hive自動生成的MapRece作業,通常情況下不夠智能化

(2)Hive調優比較困難,粒度較粗

1.3 Hive架構原理

1.用戶介面:Client

CLI(hive shell)、JDBC/ODBC(java訪問hive)、WEBUI(瀏覽器訪問hive)

2.元數據:Metastore

元數據包括:表名、表所屬的資料庫(默認是default)、表的擁有者、列/分區欄位、表的類型(是否是外部表)、表的數據所在目錄等;

默認存儲在自帶的derby資料庫中,推薦使用MySQL替代derby存儲Metastore

3.Hadoop

使用HDFS進行存儲,使用MapRece進行計算。

4.驅動器:Driver

(1)解析器(SQL Parser):將SQL字元串轉換成抽象語法樹AST,這一步一般都用第三方工具庫完成,比如antlr;對AST進行語法分析,比如表是否存在、欄位是否存在、SQL語義是否有誤。

(2)編譯器(Physical Plan):將AST編譯生成邏輯執行計劃。

(3)優化器(Query Optimizer):對邏輯執行計劃進行優化。

(4)執行器(Execution):把邏輯執行計劃轉換成可以運行的物理計劃。對於Hive來說,就是MR/Spark。

Hive通過給用戶提供的一系列交互介面,接收到用戶的指令(SQL),使用自己的Driver,結合元數據(MetaStore),將這些指令翻譯成MapRece,提交到Hadoop中執行,最後,將執行返回的結果輸出到用戶交互介面。

1.4 Hive和資料庫比較

由於 Hive 採用了類似SQL 的查詢語言 HQL(Hive Query Language),因此很容易將 Hive 理解為資料庫。其實從結構上來看,Hive 和資料庫除了擁有類似的查詢語言,再無類似之處。本文將從多個方面來闡述 Hive 和資料庫的差異。資料庫可以用在 Online 的應用中,但是Hive 是為數據倉庫而設計的,清楚這一點,有助於從應用角度理解 Hive 的特性。

1.4.1 查詢語言

由於SQL被廣泛的應用在數據倉庫中,因此,專門針對Hive的特性設計了類SQL的查詢語言HQL。熟悉SQL開發的開發者可以很方便的使用Hive進行開發。

1.4.2 數據存儲位置

Hive 是建立在 Hadoop 之上的,所有 Hive 的數據都是存儲在 HDFS 中的。而資料庫則可以將數據保存在塊設備或者本地文件系統中。

1.4.3 數據更新

由於Hive是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。因此,Hive中不建議對數據的改寫,所有的數據都是在載入的時候確定好的。而資料庫中的數據通常是需要經常進行修改的,因此可以使用 INSERT INTO … VALUES 添加數據,使用 UPDATE … SET修改數據。

1.4.4 索引

Hive在載入數據的過程中不會對數據進行任何處理,甚至不會對數據進行掃描,因此也沒有對數據中的某些Key建立索引。Hive要訪問數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲較高。由於 MapRece 的引入, Hive 可以並行訪問數據,因此即使沒有索引,對於大數據量的訪問,Hive 仍然可以體現出優勢。資料庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的數據的訪問,資料庫可以有很高的效率,較低的延遲。由於數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。

1.4.5 執行

Hive中大多數查詢的執行是通過 Hadoop 提供的 MapRece 來實現的。而資料庫通常有自己的執行引擎。

1.4.6 執行延遲

Hive 在查詢數據的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另外一個導致 Hive 執行延遲高的因素是 MapRece框架。由於MapRece 本身具有較高的延遲,因此在利用MapRece 執行Hive查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,即數據規模較小,當數據規模大到超過資料庫的處理能力的時候,Hive的並行計算顯然能體現出優勢。

1.4.7 可擴展性

由於Hive是建立在Hadoop之上的,因此Hive的可擴展性是和Hadoop的可擴展性是一致的(世界上最大的Hadoop 集群在 Yahoo!,2009年的規模在4000 台節點左右)。而資料庫由於 ACID 語義的嚴格限制,擴展行非常有限。目前最先進的並行資料庫 Oracle 在理論上的擴展能力也只有100台左右。

1.4.8 數據規模

由於Hive建立在集群上並可以利用MapRece進行並行計算,因此可以支持很大規模的數據;對應的,資料庫可以支持的數據規模較小。

Ⅱ 如何克服hive不能更新刪除建數倉

dataframe.registerTempTable("result")
sql(s"""INSERT OVERWRITE Table $outputTable PARTITION (dt ='$outputDate') select * from result""")
整結數據產需要4鍾左右間比式:結textfile存入hdfs:
result.rdd.saveAsTextFile(output_tmp_dir)
由見hive寫入操作耗用量間

現象優化文件存符合hive table文件格式使用hive load產結文件直接move指定目錄代碼:
result.rdd.map { r => r.mkString("\001") }.repartition(partitions).saveAsTextFile(output_tmp_dir)
sql(s"""load data inpath '$output_tmp_dir' overwrite into table $output partition (dt='$dt')""")
F

Ⅲ hive 執行sql錯誤

貼一下你的SQL。
這個啟動的MapredLocalTask,應該是數據增加到200000時,超過了本地任務的最大限制。

Ⅳ hive sql 中換行字元的替換

···
CREATE TABLE IF NOT EXISTS test_wl7 as SELECT hive_query_id,
jobid,
TYPE,
task_count,
start_time,
finish_time,
max_task,
pre_task,
yarnuser,
regexp_replace(hive_query_string,
'\n|\r',
' ') hive_query_string,
update_user,
etl_tx_dt
FROM dev_test_dc.mapred_job_history_skew
WHERE etl_tx_dt=20190730 ;
···

採集的用戶sql,分析後通過sqoop將hive(表的格式是textfile)導入到mysql中。因為sql中存在換行符。需要替換。注意是\n|\r.有個\r..

Ⅳ hive上的數據如何去查詢源數據

先明白數據倉庫的作用--存儲歷史數據-進而對數據進行分析,只提供查詢-不提供修改1。Hive 的目標是做成數據倉庫,所以它提供了sql,提供了文件-表的映射關系,又由於Hive基於hdfs,所以搜索不提供Update,因為hdfs本身就不支持。

Ⅵ 資料庫裡面mysql和hive區別是什麼

1.查詢語言不同:hql/sql
2.數據存儲位置不同:hdfs/資料庫系統
3.數據格式:可自定義/資料庫系統定義格式
4.數據更新:Hive不支持數據更新/mysql支持數據更新update

Ⅶ HIve中SQL如何判斷一個欄位是連續10個數字

目前我知道的方法是把你希望添加的數據寫入到文本中,然後從文本導入到你的表格中。
但是,hive不知道oracle的insert into , update。
load data [local] inpath 'yourfile_location' [overwrite] into your_table;

Ⅷ hive和mysql的區別是什麼

hive和mysql的區別有:

1、查詢語言不同:hive是hql語言,mysql是sql語句;

2、數據存儲位置不同:hive是把數據存儲在hdfs上,而mysql數據是存儲在自己的系統中;

3、數據格式:hive數據格式可以用戶自定義,mysql有自己的系統定義格式;

4、數據更新:hive不支持數據更新,只可以讀,不可以寫,而sql支持數據更新;

5、索引:hive沒有索引,因此查詢數據的時候是通過maprece很暴力的把數據都查詢一遍,也造成了hive查詢數據速度很慢的原因,而mysql有索引。