Hive數據類型及文本文件數據編碼

本文參考Apache官網,更多內容請參考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

1. 數值型

類型支持范圍
TINYINT1-byte signed integer, from -128 to 127
SMALLINT2-byte signed integer, from -32,768 to 32,767
INT/INTEGER4-byte signed integer, from -2,147,483,648 to 2,147,483,647
BIGINT8-byte signed integer, from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
FLOAT4-byte single precision floating point number
DOUBLE8-byte double precision floating point number
DOUBLEPRECISION
DECIMALDecimal datatype was introduced in Hive 0.11.0 (HIVE-2693) and revised in Hive 0.13.0 (HIVE-3976)

1. Integral Types (TINYINT, SMALLINT, INT/INTEGER, BIGINT)?
默認情況下,整數型為INT型,當數字大于INT型的范圍時,會自動解釋執行為BIGINT,或者使用以下后綴進行說明。

類型后綴例子
TINYINTY100Y
SMALLINTS100S
BIGINTL100L

INTEGER is introduced as a synonym for INT in Hive 2.2.0 (HIVE-14950).?
2. Decimals?
Hive的小數型是基于Java BigDecimal做的, BigDecimal在java中用于表示任意精度的小數類型。所有常規數字運算(例如+, - ,*,/)和相關的UDFs(例如Floor,Ceil,Round等等)都使用和支持Decimal。你可以將Decimal和其他數值型互相轉換,且Decimal支持科學計數法和非科學計數法。因此,無論您的數據集是否包含如4.004E + 3(科學記數法)或4004(非科學記數法)或兩者的組合的數據,可以使用Decimal。?
從Hive 0.13開始,用戶可以使用DECIMAL(precision, scale) 語法在創建表時來定義Decimal數據類型的precision和scale。 如果未指定precision,則默認為10。如果未指定scale,它將默認為0(無小數位)。

CREATE TABLE foo (?
a DECIMAL, – Defaults to decimal(10,0)?
b DECIMAL(9, 7)?
)

大于BIGINT的數值,需要使用BD后綴以及Decimal(38,0)來處理,例:

select CAST(18446744073709001000BD AS DECIMAL(38,0)) from my_table limit 1;

Decimal在Hive 0.12.0 and 0.13.0之間是不兼容的,故0.12前的版本需要遷移才可繼續使用,具體情況參見官網。

2. 日期型

類型支持版本
TIMESTAMPNote: Only available starting with Hive 0.8.0
DATENote: Only available starting with Hive 0.12.0
INTERVALNote: Only available starting with Hive 1.2.0

1. Timestamps?
支持傳統的UNIX時間戳和可選的納秒精度。?
- 支持的轉化:?
- 整數數字類型:以秒為單位解釋為UNIX時間戳?
- 浮點數值類型:以秒為單位解釋為UNIX時間戳,帶小數精度?
- 字符串:符合JDBC java.sql.Timestamp格式“YYYY-MM-DD HH:MM:SS.fffffffff”(9位小數位精度)?
時間戳被解釋為無時間的,并被存儲為從Unix紀元的偏移量。 提供了用于轉換到和從時區轉換的便捷UDFs(to_utc_timestamp,from_utc_timestamp)。?
所有現有的日期時間UDFs(月,日,年,小時等)都使用TIMESTAMP數據類型。?
Text files中的時間戳必須使用格式yyyy-mm-dd hh:mm:ss [.f …]。 如果它們是另一種格式,請將它們聲明為適當的類型(INT,FLOAT,STRING等),并使用UDF將它們轉換為時間戳。?
在表級別上,可以通過向SerDe屬性”timestamp.formats”(自版本1.2.0 with HIVE-9298)提供格式來支持備選時間戳格式。 例如,yyyy-MM-dd’T’HH:mm:ss.SSS,yyyy-MM-dd’T’HH:mm:ss。?
2. Dates?
DATE值描述特定的年/月/日,格式為YYYY-MM-DD。 例如,DATE’2013-01-01’。 日期類型沒有時間組件。 Date類型支持的值范圍是0000-01-01到9999-12-31,這取決于Java Date類型的原始支持。?
Date types只能在Date, Timestamp, or String types之間轉換。

轉換類型結果
cast(date as date)Same date value
cast(date as string)The year/month/day represented by the Date is formatted as a string in the form ‘YYYY-MM-DD’.
cast(date as timestamp)A timestamp value is generated corresponding to midnight of the year/month/day of the date value, based on the local timezone.
cast(string as date)If the string is in the form ‘YYYY-MM-DD’, then a date value corresponding to that year/month/day is returned. If the string value does not match this formate, then NULL is returned.
cast(timestamp as date)The year/month/day of the timestamp is determined, based on the local timezone, and returned as a date value.

3. Intervals?
時間間隔在1.2.0之后版本支持,在2.2.0版本上進行了擴展,具體情況參見官網。

3. 字符型

1.Strings?
字符串文字可以用單引號(’)或雙引號(“)表示。Hive在字符串中使用C風格的轉義。?
2. Varchar?
Varchar類型使用長度說明符(介于1和65355之間)創建,它定義字符串中允許的最大字符數。 如果要轉換/分配給varchar值的字符串值超過length說明符,則字符串將被靜默截斷。 字符長度由字符串包含的代碼點的數量確定。?
像字符串一樣,尾部空格在varchar中很重要,并且會影響比較結果。?
非通用UDFs不能直接使用varchar類型作為輸入參數或返回值。 可以創建字符串UDFs,而varchar值將被轉換為strings并傳遞到UDF。 要直接使用varchar參數或返回varchar值,請創建GenericUDF。?
如果基于reflection-based方法來獲取數據類型信息,則可能存在不支持varchar的場景。 這包括一些SerDe函數實現。?
3. Char?
字符類型與Varchar類似,但它們是固定長度的,意味著比指定長度值短的值用空格填充,但尾隨空格在比較期間不重要。 最大長度固定為255。

CREATE TABLE foo (bar CHAR(10))

4. 其他

  1. BOOLEAN
  2. BINARY (Note: Only available starting with Hive 0.8.0)

所有這些數據類型都是對java中接口的實現,因為這些類型的具體行為細節和Java中對應的類型是完全一致的。例如,String類型實現的是java中的String,FLOAT實現的是java中的float,等等。

5. 復雜類型(集合數據類型)

  Hive中的列支持使用struct,map和array集合數據類型。語法示例實際上調用的是內置函數。和基本數據類型一樣,這些類型同樣是保留字。

?

類型?支持版本
arraysARRAY(data_type)Note: negative values and non-constant expressions are allowed as of Hive 0.14.
mapsMAP(primitive_type, data_type)Note: negative values and non-constant expressions are allowed as of Hive 0.14.
structsSTRUCTcol_name : data_type [COMMENT col_comment], …)?
unionUNIONTYPE(data_type, data_type, …)Note: Only available starting with Hive 0.7.0.

復雜類型包括ARRAY,MAP,STRUCT,UNION,這些復雜類型是由基礎類型組成的。

ARRAY:ARRAY類型是由一系列相同數據類型的元素組成,這些元素可以通過下標來訪問。比如有一個ARRAY類型的變量fruits,它是由['apple','orange','mango']組成,那么我們可以通過fruits[1]來訪問元素orange,因為ARRAY類型的下標是從0開始的;
  MAP:MAP包含key->value鍵值對,可以通過key來訪問元素。比如”userlist”是一個map類型,其中username是key,password是value;那么我們可以通過userlist['username']來得到這個用戶對應的password;
  STRUCT:STRUCT可以包含不同數據類型的元素。這些元素可以通過”點語法”的方式來得到所需要的元素,比如user是一個STRUCT類型,那么可以通過user.address得到這個用戶的地址。
  UNION: UNIONTYPE,他是從Hive 0.7.0開始支持的。

示例:一張虛構的人力資源應用程序中的員工表:

CREATE TABLE employees (
name     STIRNG,
salary    FLOAT,
subordinates ARRAY<STRING>,
deductions     MAP<STRING, FLOAT>,
address          STRUCT<street:STRING, city:STRING,state:STRING,zip:INT>);

?

說明:

subordinates 下屬員工,是個數組,
deductions 扣除額:是一個map,記錄每次的扣除額
address:雇員地址,使用struct數據類型存儲,其中每個城都被作了命名,并且具有一個特定類型。

集合類型也可以嵌套使用,類似如:ARRAY<STRUCT>表示數組中的每個元素都是STRUCT結構。

?

文本文件數據編碼

hive書用幾個很少出現在字段值中的控制字符,使用術語field來表示替換默認分隔符的字符

常使用分隔符

分隔符名稱說明
\n換行符對于文本文件而言,每一行是一條記錄,因此換行符可以分割數據。
^A<Ctrl>+A常用于分隔列,在CREATE TABLE語句中可以使用八進制編碼\001表示。
^B<Ctrl>+B常用于分隔ARRAY與STRUCT元素,或用于MAP中鍵值對之間的分隔。CREATE TABLE語句中可以使用八進制編碼\002表示
^C<Ctrl+C>MAP中鍵值對的分隔。
\t制表符常用
逗號常用
在使用的過程中,可以不使用Hive提供的默認分隔符,而使用其他的分隔符。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277797.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277797.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277797.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python繪圖Turtle庫詳解

轉載&#xff1a;https://blog.csdn.net/zengxiantao1994/article/details/76588580 Turtle庫是Python語言中一個很流行的繪制圖像的函數庫&#xff0c;想象一個小烏龜&#xff0c;在一個橫軸為x、縱軸為y的坐標系原點&#xff0c;(0,0)位置開始&#xff0c;它根據一組函數指令…

(待完成)qbxt2019.05 總結2 - 數位DP

數位 DP 嚴格來說其實并不是 DP……它只是個單純的計數問題 但是怎么說呢……現在大家似乎都把數位 DP 叫這個名字&#xff0c;所以……我們還是……叫它 DP 額什么是數位 DP 呢&#xff1f; 一句話概括——一類求在 K 進制下m滿足條件的數的數量有多少個的算法 常見的問題形式…

mac使用brew update無反應解決辦法

為什么80%的碼農都做不了架構師&#xff1f;>>> mac系統中使用brew作為包管理工具&#xff0c;類似centos中的yum&#xff0c;ubuntu中的apt-get&#xff0c;在使用brew update的使用&#xff0c;有時候會長時間無反應&#xff0c;或者中途斷開連接&#xff0c;這是…

2018-2019-2 20175223 實驗三《敏捷開發與XP實踐》實驗報告

目錄 北京電子科技學院&#xff08;BESTI&#xff09;實驗報告實驗名稱&#xff1a;實驗三 敏捷開發與XP實踐實驗內容、步驟與體會&#xff1a;一、實驗三 敏捷開發與XP實踐-1二、實驗三 敏捷開發與XP實踐-2三、實驗三 敏捷開發與XP實踐-3四、實驗三 敏捷開發與XP實踐-4五、代碼…

(八)路徑(面包屑導航)分頁標簽和徽章組件

一&#xff0e;路徑組件 路徑組件也叫做面包屑導航。 <ol class"breadcrumb"><li><a href"#">首頁</a></li><li><a href"#">產品列表</a></li><li><a href"#">大…

第十周總結

失望光年轉載于:https://www.cnblogs.com/daisy99lijing/p/11064924.html

LC #45 JS

效率低下 最起碼容易看得懂&#xff1f;將就看吧 /*** param {number[]} nums* return {number}*/ var jump function(nums) {let len nums.length;if(len < 1){return 0;}function calPossibleLastStep(index){let res [];if(index > len){return res;}if(index <…

python之爬蟲(四)之 Requests庫的基本使用

什么是Requests Requests是用python語言基于urllib編寫的&#xff0c;采用的是Apache2 Licensed開源協議的HTTP庫如果你看過上篇文章關于urllib庫的使用&#xff0c;你會發現&#xff0c;其實urllib還是非常不方便的&#xff0c;而Requests它會比urllib更加方便&#xff0c;可以…

https://blog.csdn.net/cscscscsc/article/details/50

https://blog.csdn.net/cscscscsc/article/details/50899522轉載于:https://blog.51cto.com/7237876/2129682

linux下安裝mysql說明

1.msyql下載 mysql-5.6.33 通用版&#xff0c;linux64位&#xff0c;官方下載地址&#xff1a;http://dev.mysql.com/downloads/mysql/5.6.html#downloads。也可以通過命令下載&#xff1a;wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86…

win8下cocos2dx-3.2+VS2012環境配置及項目創建

這是本人CSDN的第一篇博客&#xff0c;因為假期在學校做實訓項目接觸到了cocos2dx&#xff0c;覺得是一個特別適用強大&#xff0c;有不錯的可移植性&#xff08;雖然可移植性不錯&#xff0c;但實際上寫好的游戲往Android上移植&#xff0c;我的隊友廢了好大勁。。。&#xff…

Android通過透明度設置背景變暗

變暗 WindowManager.LayoutParams lpgetWindow().getAttributes(); lp.alpha0.3f; getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); getWindow().setAttributes(lp);變為原來的樣子 WindowManager.LayoutParams lpgetWindow().getAttributes(); lp.alpha1.…

BZOJ4557:[JLOI2016/SHOI2016]偵察守衛——題解

https://www.lydsy.com/JudgeOnline/problem.php?id4557 小R和B神正在玩一款游戲。這款游戲的地圖由N個點和N-1條無向邊組成&#xff0c;每條無向邊連接兩個點&#xff0c;且地圖是連通的。換句話說&#xff0c;游戲的地圖是一棵有N個節點的樹。 游戲中有一種道具叫做偵查守衛…

Mac系統下Homebrew的安裝和使用Homebrew安裝python

這里向大家推薦一個東西&#xff0c;Mac下很好用的東西&#xff0c;叫做Homebrew。剛開始接觸Mac的時候&#xff0c;我也沒聽過這個東西&#xff0c;但裝了以后真的覺得&#xff0c;TMD太碉堡了。引用一句話&#xff1a;Homebrew is the easiest and most flexible way to inst…

JS中的深拷貝

前言&#xff1a;我們經常會遇到想要將一個對象為己所用&#xff0c;但又不能污染原對象的需求&#xff0c;這就涉及到了js對象的深拷貝。 比如說在VUE的子組件中&#xff0c;父組件傳過來的數據中若是有對象&#xff0c;而子組件需要用父組件的數據進行初始化并且有另做他用的…

Mac下cocos2dx-3.2+Xcode環境配置和項目創建

這是有關環境配置的第二篇教程&#xff0c;第一篇講的是win8下的環境配置。這里我們使用C。所有如果你用其他語言如Lua和js進行cocos2d開發&#xff0c;那么可以再找一找其他的配置文檔。下面要說Mac os 下 cocos2dx-3.2Xcode的環境配置&#xff0c;這里我使用的是Xcode 5.1.1。…

對flex-grow和flex-shrink的深入理解

flex彈性布局&#xff0c;如果子元素寬度之和大于或者小于父元素寬度&#xff0c;空間就會存在剩余和不夠&#xff0c;flex默認不換行&#xff0c;除非設置flex-wrap,那么這種情況下&#xff0c;有兩個重要的屬性&#xff0c;flex-grow和flex-shrink. flex-grow默認值為0&#…

拿下京東榜單第五首戰告捷,看聯想手機如何上演王者歸來

618對于手機行業來說是一個非常重要的日子&#xff0c;京東618上銷量的高低在某種程度上就代表了該手機品牌在國內市場的影響力&#xff0c;以及在行業中所處的位置。因此&#xff0c;今年的618各大手機品牌卯足了勁在京東平臺上展開較量。榮耀、小米、VIVO、OPPO等手機品牌相繼…

Mac OS使用技巧之一:查看Finder中的.bash_profile等系統隱藏文件

作為一個程序員&#xff0c;經常要配置變量&#xff0c;可能要更改hosts文件&#xff0c;或者你閑著沒事兒尋找homebrew給你安裝的東西在什么地方。Mac OS的內核是Unix&#xff0c;Linux/Unix系統出于系統安全和用戶安全的考慮&#xff0c;會把一些與系統相關的文件隱藏&#x…

java.lang.NumberFormatException: For input string: “name”

背景&#xff1a;action中查詢出list數據需要在前臺進行顯示&#xff0c;但根據主鍵在數據庫中查詢出的數據list中含有熟悉alist屬性為配置表&#xff0c;且支持用戶多選&#xff0c;前端通過el表達式顯示 前臺界面為&#xff1a;<c:forEach items"${list}" var&q…