Hive(七):HQL DML

来源:http://www.cnblogs.com/tgzhu/archive/2016/08/16/5773433.html
-Advertisement-
Play Games

HQL DML 主要涉到對Hive表中數據操作,包含有:load、INSERT、DELETE、EXPORT and IMPORT,詳細資料參見:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML 目錄: Loadin ...


目錄:

  • Loading files into tables
  • Inserting data into Hive Tables from queries
  • Writing data into the filesystem from queries
  • Inserting values into tables from SQL
  • Delete
  • 應用Demo

 Loading files into tables:


  • 語法:LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]  
  • 示例代碼如下:
    #創建表
    CREATE TABLE web_log(viewTime INT, userid BIGINT, url STRING, referrer STRING, ip STRING) 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
    
    #導入文件數據
    LOAD DATA LOCAL INPATH '/usr/zhu/table.txt'  OVERWRITE INTO TABLE web_log;
    View Code
  • OVERWRITE:
  1. 目標表(或者分區)中的內容(如果有)會被刪除,然後再將 filepath 指向的文件/目錄中的內容添加到表/分區中
  2. 如果目標表(分區)已經有一個文件,並且文件名和 filepath 中的文件名衝突,那麼現有的文件會被新文件所替代

Inserting data into Hive Tables from queries:


  • 語法:INSERT OVERWRITE TABLE tablename1 [PARTITION] select_statement1 FROM from_statement;
             INSERT INTO TABLE tablename1 [PARTITION] select_statement1 FROM from_statement;
  • 示例代碼:
    #創建結構相同的表
    create table empDemo as employee;
    
    #插入數據
    insert into table empDemo select * from employee;
    
    
    #覆蓋插入數據
    insert overwrite table empDemo select * from employee;
    View Code

Writing data into the filesystem from queries:


  • 語法:INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT ... FROM ...
  • 示例代碼:
    INSERT OVERWRITE LOCAL DIRECTORY './tmp/zhu'  SELECT * FROM employee;
    View Code

Inserting values into tables from SQL:


  • 語法:INSERT INTO TABLE tablename VALUES values_row [, values_row ...]

示例代碼:

#單行插入
insert into table employee values('001','001','tgzhu');

#多行插入
insert into table employee values('004','004','WangWu'),('005','005','ZhaoZhao');
View Code

 

Delete:


  • 語法:DELETE FROM tablename [WHERE expression]

應用Demo:


  • 以一個實際的應用Demo對Hive 的 DDL、DML 進行說明,過程如下
  • 創建與HBase關聯的外部表,HQL如下:
    CREATE EXTERNAL TABLE if not exists Hive_CM_EvcRealTimeData(
             Rowkey  string,
             RealTimeData_CarNo  string, 
             RealTimeData_Time  string,
         RealTimeData_Speed decimal(20,8),
         RealTimeData_Mileage decimal(20,8),
         RealTimeData_HighestVoltageBatteryOrd int,
         RealTimeData_Latitude decimal(20,8),
         RealTimeData_Longitude decimal(20,8)
      )
     STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
     WITH SERDEPROPERTIES('hbase.columns.mapping' = ':key,d:RealTimeData_CarNo, ata_Time,d:RealTimeData_Speed,d:RealTimeData_Mileage,d:RealTimeData_HighestVoltageBatteryOrd,d:RealTimeData_Latitude,d:RealTimeData_Longitude')
     TBLPROPERTIES('hbase.table.name' = 'CM_EvcRealTimeData')
    View Code
  • 創建一個用來保存計算結果的hive實表,如下:
CREATE TABLE if not exists Hive_CM_CarDailyRpt(
         CarNo        string,
         DTime        string,
     OnLineCount  int, 
         RunCount     int,  
     Mileage      decimal(20,8), 
         MaxSpeed     decimal(20,8),  
     totalPower   decimal(20,8), 
     AverageSpeed decimal(20,8),
     CDI_BatteryFlag string,
     CDI_CoordinatorFlag string   
  )
  STORED AS TEXTFILE
View Code
  •  計算並將結果插入實表,如下:
set hive.execution.engine = tez;
    
Insert overwrite table Hive_CM_CarDailyRpt 
select
      CarNo,DTime,
      CONVERT(int,SUM(CT)) as OnLineCount ,
      CONVERT(int,SUM(CTSPEED)) as RunCount,
      CONVERT(decimal(18,2),MAX(MILE)-MIN(MILE)) as Mileage ,
      CONVERT(decimal(18,2),MAX(SPEED)) as MaxSpeed,
      ((MAX(MILE)-MIN(MILE))*0.2) as totalPower,
      case when SUM(CTSPEED)>0 then CONVERT(decimal(18,2),((MAX(MILE)-MIN(MILE))/SUM(CTSPEED)))
      else 0 end as AverageSpeed,      
      case when SUM(RealTimeData_HighestVoltageBatteryOrd)>0 then '0' else '1' end as BatteryFlag,
      case when (SUM(RealTimeData_Latitude) + SUM(RealTimeData_Longitude)) >0 then '0' else '1' end as LatitudeFlag,
 from 
    (
     SELECT REALTIMEDATA_CARNO AS CARNO,
          substring(RealTimeData_Time,1,8) as DTime,
          1 AS CT,
          CASE WHEN REALTIMEDATA_SPEED>0 THEN 1 ELSE 0 END AS CTSPEED,
          CASE WHEN REALTIMEDATA_MILEAGE=0 THEN NULL ELSE REALTIMEDATA_MILEAGE END AS MILE,
          CASE WHEN REALTIMEDATA_SPEED>200 then 0 else REALTIMEDATA_SPEED end AS SPEED,
          RealTimeData_HighestVoltageBatteryOrd,
          RealTimeData_Latitude,RealTimeData_Longitude
          FROM CM_EvcRealTimeData
      ) t
 group by CarNo,DTime
View Code
  •  再將計算結果轉存關係型資料庫或HBase

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

-Advertisement-
Play Games
更多相關文章
  • 有時候我們的某個程式或者應用在執行SQL語句時報錯了, 我們需要拿到報錯的SQL語句檢查, 那麼你可以藉助:SQL Profiler工具來實現. 1.SQL Profiler是一個可以檢測SQL伺服器上SQL語句執行情況的工具,也稱SQL抓包工具. 2.打開 SQL Profiler: 開始=》所有 ...
  • 對於程式員來說,編程過程中或多或少會和資料庫打交道。如果採用Visual Studio進行程式開發,則微軟的Sql Server資料庫是最好的選擇。但是問題來了,Sql Server資料庫動輒幾個G,安裝後占用的空間也相當大,是不是每個開發人員在開發時都需要安裝Sql Server呢?其實,對於小型 ...
  • 環境要求JDK 1.6+java -versionPython 2.6.6+python -V ZooKeeper3.4.5+storm 0.9.4+ 單機模式上傳解壓 下麵分別啟動ZooKeeper、Nimbus、UI、supervisor、logviewer 需要多等一會兒,通過jps觀察 登錄 ...
  • Hive是為瞭解決hadoop中mapreduce編寫困難,提供給熟悉sql的人使用的。只要你對SQL有一定的瞭解,就能通過Hive寫出mapreduce的程式,而不需要去學習hadoop中的api。 在部署前需要確認安裝jdk以及Hadoop 如果需要安裝jdk以及hadoop可以參考我之前的博客 ...
  • 存儲過程 一 存儲過程的概念 存儲過程是在資料庫管理系統保存的,預先編譯的,能實現某種功能的SQL程式,它是資料庫應用中運用比較廣泛的一種數據對象。 為什麼需要存儲過程? 1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提 ...
  • 今天在做統計數據的時候,傳入數組導致數據不顯示。解決方式和大家分享一下: --參數@CompanyName='北京,天津,上海' DECLARE @PointerPrev int DECLARE @PointerCurr int DECLARE @TName nvarchar(100) Set @P ...
  • MySQL的複製是基於binlog來實現的。 流程如下 涉及到三個線程,主庫的DUMP線程,從庫的IO線程和SQL線程。 1. 主庫將所有操作都記錄到binlog中。當複製開啟時,主庫的DUMP線程根據從庫IO線程的請求將binlog中的內容發送到從庫。 2. 從庫的IO線程接受到主庫DUMP線程發 ...
  • PyMySQL Evaluation This page will capture issues related to Openstack moving to the PyMySQL driver for MySQL/MariaDB dbapi access. Rationale While the ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...