Hive集合數據類型

来源:http://www.cnblogs.com/yongjian/archive/2017/04/06/6674986.html
-Advertisement-
Play Games

Hive的列除了支持基本的數據類型外,還支持使用Struct、Map和Array三種集合數據類型。 假設某表有如下一行,我們用JSON格式來表示其數據結構。在Hive下訪問的格式為 { "name": "John Doe", "salary": 100000.0 , "subordinates": ... ...


Hive的列除了支持基本的數據類型外,還支持使用Struct、Map和Array三種集合數據類型。

假設某表有如下一行,我們用JSON格式來表示其數據結構。在Hive下訪問的格式為

{
    "name": "John Doe",
    "salary": 100000.0 ,
    "subordinates": ["Mary Smith" , "Todd Jones"] ,   //列表Array, subordinates[1]=”Tood Jones”
    "deductions": {                                  //鍵值Map, deductions[’Federal Taxes’]=0.2
        "Federal Taxes": 0.2 ,
        "State Taxes": 0.05,
        "Insurance": 0.1
    }
    "address": {                                     //結構Struct, address.city=”Chicago”
        "street": "1 Michigan Ave." ,
        "city": "Chicago" ,
        "state": "IL" ,
        "zip": 60600
    }
}

 

基於上述數據結構,我們在Hive里創建對應的表,並導入數據。

創建本地測試文件6_1.txt

John Doe,100000.0,Mary Smith_Todd Jones,Federal Taxes:0.2_State Taxes:0.05_Insurance:0.1,1 Michigan Ave._Chicago_1L_60600
Tom Smith,90000.0,Jan_Hello Ketty,Federal Taxes:0.2_State Taxes:0.05_Insurance:0.1,Guang dong._China_0.5L_60661

註意,STRUCT和ARRAY里的元素間關係都可以用同一個字元表示,這裡用“_”。

 

Hive上創建測試表employees

CREATE  TABLE learn.employees(
name STRING,
sa1ary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','    -- 列分隔符
COLLECTION ITEMS TERMINATED BY '_'  -- STRUCT 和 ARRAY 的分隔符
MAP KEYS TERMINATED BY ':' -- MAP中的key與value的分隔符
LINES TERMINATED BY '\n';  -- 行分隔符

 

導入文本數據到測試表

load data local inpath "/home/hadoop/files/input/6_1.txt" overwrite into table learn.employees ;

 

訪問三種集合列里的數據,以下分別是ARRAY,MAP,STRUCT的訪問方式

hive> select subordinates[1], deductions['Federal Taxes'],address.city from learn.employees;
OK
Todd Jones     0.2    Chicago
Hello Ketty    0.2    China
Time taken: 0.123 seconds, Fetched: 2 row(s)

 

通過集合類型來定義列的好處是什麼?

在大數據系統中,不遵循標準格式的一個好處就是可以提供更高吞吐量的數據
當處理的數據的數量級是T 或者P 時,以最少的"頭部定址"來從磁碟上掃描數據是非常必要的。按數據集進行封裝的話可以通過減少定址次數來提供查詢的速度。而如果根據外鍵關係關聯的話則需要進行磁碟間的定址操作,這樣會有非常高的性能消耗。


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

-Advertisement-
Play Games
更多相關文章
  • Paint 畫筆 ,即用來繪製圖形的"筆" 前面我們知道了Paint的一些基本用法: 不過我們會發現,這樣畫出的線條都是筆筆直直的,能滿足需求,但是美觀上並不好看。 這就需要使用到Paint類 更多的一些方法了 首先,看下最簡單設置的線條 一、線條路徑樣式 設置路徑樣式;取值類型是所有派生自Path ...
  • 安裝 Android Development Environment http://www.cnblogs.com/youchihwang/p/6645880.html 2. answer : no 3. Installing Repo 4. ARM Compiler Tools 5.01 upda ...
  • 由OpenDigg 出品的安卓開源項目周報第十五期來啦。我們的安卓開源周報集合了OpenDigg一周來新收錄的優質的安卓開源項目,方便安卓開發人員便捷的找到自己需要的項目工具。 ...
  • 圖片載入涉及到圖片的緩存、圖片的處理、圖片的顯示等。四種常用的圖片載入框架,分別是Fresco、ImageLoader、 Picasso、 Glide... ...
  • 為了ios開發中tableview讀取數據的方便,先弄了一個只有字母的json表,再將未處理的數據添加到上面。僅用於將首字母作為section head。 [{"initial":"A","list":[]},{"initial":"B","list":[]},{"initial":"C","lis ...
  • 安裝rz工具和wget工具:分別如下: sudo yum install lrzsz;yum install wget 安裝cmake編譯工具:rz -y 選擇下載的cmake工具上傳到伺服器中 安裝c、c++:yum -y install gcc-c++ 環境參數:Linux:Centos6.5, ...
  • 需求場景 項目中有這麼個需求:統計集群中各個節點的數據量存儲大小,不是記錄數。 一開始有點無頭緒,後面查看cassandra官方文檔看到Monitoring章節,裡面說到:Cassandra中的指標使用Dropwizard Metrics庫進行管理。 這些指標可以通過JMX查詢,也可以使用多個內置和 ...
  • 簡要介紹MySQL Flashback 的原理,安裝和使用。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...