Hive(六):HQL DDL

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

HQL語法基於 SqlLine(http://sqlline.sourceforge.net/),DDL主要包含資料庫、函數、視圖的創建、修改、刪除,參考資料:(https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL), ...


      HQL語法基於 SqlLinehttp://sqlline.sourceforge.net/),DDL主要包含資料庫、函數、視圖的創建、修改、刪除,參考資料:(https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL), 語法關鍵字:

  • CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX
  • DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX
  • ALTER DATABASE/SCHEMA, TABLE, VIEW
  • SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLE
  • DESCRIBE DATABASE/SCHEMA, table_name, view_name

 DataBase:


 

  • create 語法:
    CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
      [COMMENT database_comment]
      [LOCATION hdfs_path]
      [WITH DBPROPERTIES (property_name=property_value, ...)];
  • 創建資料庫:           create database if not exists demo;
  • 顯示數據有數據:     show database;
  • 按條件過濾:           show databases like 'dem*';   (註意通配符是*而不是%)
  • 資料庫描述:           create database hello with dbproperties('creator'='tgzhu','date'='2016-07-12');
  • 顯示資料庫:             describe database hello;   (基本信息,描述信息看不到的)
  • 顯示資料庫信息:      describe database extended  hello;  

     drop 語法:

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
  • RESTRICT:預設的行為,即當資料庫不為空時,不允許刪除的
  • CASCADE:先刪除表,再刪除資料庫
  • 刪除資料庫: drop database if exists hello;
  • 刪除資料庫:drop database if exists hellp cascade;

DataTable:


  • CreateTable 語法:
    CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name  
      [(col_name data_type [COMMENT col_comment], ...)]
      [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
      [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] 
      [SKEWED BY (col_name, col_name, ...) ]
      ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
      [STORED AS DIRECTORIES]
      [
       [ROW FORMAT row_format] 
       [STORED AS file_format]
         | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] 
      ]
      [LOCATION hdfs_path]
      [TBLPROPERTIES (property_name=property_value, ...)]   
      [AS select_statement];   
     
    
    CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
      LIKE existing_table_or_view_name
  • 說明:表名和列名是大小寫不敏感,但SerDe和屬性名正好相反
  • 切換資料庫: use hello;
  • 創建表: 手工創建簡單表
    create table if not exists students(
     ID        string,
     Code      string,
     Name      string,
     Score     decimal(20,8),
     address   struct<street:string,city:string,state:string,zip:string>
    ) tblProperties('creator'='tgzhu','version'='1.0');
  • 複製表結構:在已經存在表基礎上建表
    create table if not exists student1 like students;
  • CTAS(Create table as Select)表: 創建表並載入查詢結果到表中,限制(目標表不能是分區表、外部表、桶表
  • 試著執行下麵的語句:create external table empdemo1 as select * from employee;
  • Re:FAILED: SemanticException [Error 10070]: CREATE-TABLE-AS-SELECT cannot create external table (state=42000,code=10070)
  • show、describe 與上面描述的 database 的語法一致,關鍵字換為: table, 如: show tables;  describle students、describe extended students;
  • 顯示指定欄位信息:  describe students.address;
  • 外部表:參見上一章 Hive(五):hive與hbase整合

分區表:


  • 一個表可以擁有一個或者多個分區,每個分區以文件夾的形式單獨存在表文件夾的目錄下。分區是以欄位的形式在表結構中存在,通過describe table命令可以查看到欄位存在,但是該欄位不存放實際的數據內容,僅僅是分區的表示。在Hive Select查詢中一般會掃描整個表內容,會消耗很多時間做沒必要的工作。有時候只需要掃描表中關心的一部分數據,因此建表時引入了partition概念。表中的一個 Partition 對應於表下的一個目錄,Partition 就是輔助查詢,縮小查詢範圍,加快數據的檢索速度和對數據按照一定的規格和條件進行管理
  • 示例:
    create table student_p(
      id string,
      name string,   
      age int, 
      birthday date
    ) partitioned by(region string, sex string);  

 桶表:


  • 對於每一個表(table)或者分區, Hive可以進一步組織成桶,也就是說桶是更為細粒度的數據範圍劃分。Hive也是 針對某一列進行桶的組織。Hive採用對列值哈希,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶當中。
  • 創建桶表的目的:
    1. 獲得更高的查詢處理效率,比如JOIN操作,在JOIN操作兩個表有一個相同的列,如果對這兩個表都進行了桶操作,那麼將保存相同列值的桶進行JOIN操作就可以,可以大大較少JOIN的數據量
    2. 使取樣更高效,在處理大規模數據集時,在開發和修改查詢的階段,如果能在數據集的一小部分數據上試運行查詢,會帶來很多方便
  • 示例建表語句如下:
    create table student_c(
      id string,
      name string,   
      age int, 
      birthday date
    ) 
    partitioned by(region string, sex string)  
    clustered by(id) sorted by(birthday) into 64 buckets;

 

 

 

 

 

 

 

 



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

-Advertisement-
Play Games
更多相關文章
  • 一些常見的狀態碼為: 200 - 伺服器成功返回網頁 404 - 請求的網頁不存在 503 - 服務不可用 所有狀態解釋: 1xx(臨時響應)表示臨時響應並需要請求者繼續執行操作的狀態代碼。代碼 說明 100 (繼續) 請求者應當繼續提出請求。 伺服器返回此代碼表示已收到請求的第一部分,正在等待其餘 ...
  • Range對象基本用法 效果圖如下(在谷歌瀏覽器下的展示) 代碼如下 在火狐瀏覽器下的展示 為什麼會出現這種情況呢,因為火狐瀏覽器下可以針對不連續的內容多選. Range對象之SelectNode和selectNodeContents方法 效果圖如下 代碼內容如下: selectNodeConten ...
  • 本篇介紹如何創建一個ExtJS應用程式。並通過創建目錄、導入文件、編寫代碼及分析代碼等步驟來解釋第一個ExtJS程式。 ...
  • 最近在刷 fcc的題,跟升級打怪一樣,一關一關的過,還挺吸引我的。今天抽時間把 Basic Algorithm Scritping 這部分題做了,根據一些提示,還是比較簡單的。有些題的處理方式 方法,我想值得借鑒。比如在項目中有時候要處理一個字元,如果想不到一些相關的方法,還挺費事的,所以,在此記錄 ...
  • 很久之前就看了有關JavaScript繼承,都沒怎麼總結,剛好今天有空就來聊聊唄 (^o^)/ 通過不斷試驗 來檢驗自己理解的正確性。 首先JavaScript裡面所有的數據類型都是對象(object),其中的new命令引入Javascript,用來從原型對象生成一個實例對象。 (這裡請註意:在Ja ...
  • 這幾天有個工作需求,就是在富文本輸入區域(kindeditor)可以有@功能,能夠容易提示用戶名的(像在qq群組@人一樣)。在網上找了一個叫bootstrap-suggest的插件,卻不能滿足我的需求,於是我決定在該插件上改良,主要是下麵幾點: 1. @內容的輸入,能夠匹配多個屬性值。 2. 選中列 ...
  • PHPMyadmin配置文件config.inc.php內容如下,在需要設置的地方增加了相關註釋。 PHPMyadmin配置文件config.inc.php內容如下,在需要設置的地方增加了相關註釋。 非常適合對資料庫操作命令不熟悉的資料庫管理者,下麵我就說下怎麼安裝該工具: 1.先到網上下載phpm ...
  • 配置 hive 與 hbase 整合的目的是利用 HQL 語法實現對 hbase 資料庫的增刪改查操作,基本原理就是利用兩者本身對外的API介面互相進行通信,兩者通信主要是依靠hive_hbase-handler.jar工具類。 但請註意:使用Hive操作HBase中的表,只是提供了便捷性,前面章節 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...