日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

4.2 Hive SQL

發布時間:2024/1/8 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4.2 Hive SQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hive SQL - DDL

  • 一、Hive SQL語言:DDL建庫、建表
    • 1、 Hive SQL之數據庫與建庫
      • SQL中DDL語法的作用
      • Hive中DDL語法的使用
      • 數據庫database
      • create database
      • use database
      • drop database
    • 2、Hive SQL之表與建表
      • 表Table
      • 建表語法樹(基礎)
      • 注意事項
      • (1)數據類型
      • (2)分隔符指定語法
      • Hive默認分隔符
      • 練習一、數據類型、分隔符練習
      • 練習二、默認分隔符使用
  • 二、Hive Show語法
    • 1、show語法功能
    • 2、常用show語句
    • 參考

一、Hive SQL語言:DDL建庫、建表

1、 Hive SQL之數據庫與建庫

Hive數據模型總覽

SQL中DDL語法的作用

  • 數據定義語言 (Data Definition Language, DDL),是SQL語言集中對數據庫內部的對象結構進行創建,刪除,修改等的操作語言,這些數據庫對象包括database、table等。
  • DDL核心語法由CREATE、ALTER與DROP三個所組成。DDL并不涉及表內部數據的操作。

Hive中DDL語法的使用

  • Hive SQL(HQL)與標準SQL的語法大同小異,基本相通;
  • 基于Hive的設計、使用特點,HQL中create語法(尤其create table)將是學習掌握Hive DDL語法的重中之重。
  • 建表是否成功直接影響數據文件是否映射成功,進而影響后續是否可以基于SQL分析數據。通俗點說,沒有表,表沒有數據,你用Hive分析什么呢?

數據庫database

  • 在Hive中,默認的數據庫叫做default,存儲數據位置位于HDFS的/user/hive/warehouse下。
  • 用戶自己創建的數據庫存儲位置是/user/hive/warehouse/database_name.db下。

create database

  • create database用于創建新的數據庫
    COMMENT:數據庫的注釋說明語句
    LOCATION:指定數據庫在HDFS存儲位置,默認/user/hive/warehouse/dbname.db
    WITH DBPROPERTIES:用于指定一些數據庫的屬性配置
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
  • 例子:創建數據庫itcast
    注意:如果需要使用location指定路徑的時候,最好指向的是一個新創建的空文件夾。
create database if not exists itcast comment "this is my first db" with dbproperties ('createdBy'='Allen');

use database

  • 選擇特定的數據庫
    切換當前會話使用哪一個數據庫進行操作

drop database

  • 刪除數據庫
    默認行為是RESTRICT,這意味著僅在數據庫為空時才刪除它。
    要刪除帶有表的數據庫(不為空的數據庫),我們可以使用CASCADE。
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

2、Hive SQL之表與建表

Hive數據模型總覽

表Table

  • 一個數據庫通常包含一個或多個表。每個表由一個名字標識(例如“客戶”或者“訂單”)。
  • 表包含帶有數據的記錄(行)。

建表語法樹(基礎)

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ... ) [COMMENT table_comment] [ROW FORMAT DELIMITED …];

注意事項

  • 藍色字體是建表語法的關鍵字,用于指定某些功能。
  • [ ]中括號的語法表示可選。
  • 建表語句中的語法順序要和語法樹中順序保持一致。
  • 最低限度必須包括的語法為:
CREATE TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ... ) [COMMENT table_comment] [ROW FORMAT DELIMITED …]; CREATE TABLE table_name (col_name data_type);

(1)數據類型

  • Hive數據類型指的是表中列的字段類型;
  • 整體分為兩類:原生數據類型(primitive data type)和復雜數據類型(complex data type)。
  • 最常用的數據類型是字符串String和數字類型Int。

(2)分隔符指定語法

  • ROW FORMAT DELIMITED語法用于指定字段之間等相關的分隔符,這樣Hive才能正確的讀取解析數據。
  • 或者說只有分隔符指定正確,解析數據成功,我們才能在表中看到數據
CREATE TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ... ] [COMMENT table_comment] [ROW FORMAT DELIMITED …];
  • LazySimpleSerDe是Hive默認的,包含4種子語法,分別用于指定字段之間、集合元素之間、map映射 kv之間、換行的分隔符號。
  • 在建表的時候可以根據數據的特點靈活搭配使用。

Hive默認分隔符

  • Hive建表時如果沒有row format語法指定分隔符,則采用默認分隔符;
  • 默認的分割符是’\001’,是一種特殊的字符,使用的是ASCII編碼的值,鍵盤是打不出來的。
  • 在vim編輯器中,連續按下Ctrl+v/Ctrl+a即可輸入’\001’ ,顯示^A
  • 在一些文本編輯器中將以SOH的形式顯示:

練習一、數據類型、分隔符練習

文件archer.txt中記錄了手游《王者榮耀》射手的相關信息,包括生命、物防、物攻等屬性信息,其中
字段之間分隔符為制表符\t,要求在Hive中建表映射成功該文件。

(1/3)數據文件

  • 字段含義:id、name(英雄名稱)、hp_max(最大生命)、mp_max(最大法力)、attack_max(最高物攻)、defense_max(最大物防)、attack_range(攻擊范圍)、role_main(主要定位)、role_assist(次要定位)。
  • 分析一下:字段都是基本類型,字段的順序需要注意一下。
  • 字段之間的分隔符是制表符,需要使用row format語法進行指定

    (2/3)建表語句
--創建數據庫并切換使用 create database if not exists itheima; use itheima; --ddl create table create table t_archer( id int comment "ID", name string comment "英雄名稱", hp_max int comment "最大生命", mp_max int comment "最大法力", attack_max int comment "最高物攻", defense_max int comment "最大物防", attack_range string comment "攻擊范圍", role_main string comment "主要定位", role_assist string comment "次要定位" ) comment "王者榮耀射手信息" row format delimited fields terminated by "\t";

(2/3)建表語句

  • 建表成功之后,在Hive的默認存儲路徑下就生成了表對應的文件夾;
  • 把archer.txt文件上傳到對應的表文件夾下。
#在node機器上進行操作 cd ~ mkdir hivedata cd hivedata/ #把文件從課程資料中首先上傳到node1 linux系統上 #執行命令把文件上傳到HDFS表所對應的目錄下 hadoop fs -put archer.txt /user/hive/warehouse/itheima.db/t_archer

(3/3)結果驗證

  • 執行查詢操作,可以看出數據已經映射成功。
  • 核心語法:row format delimited fields terminated by 指定字段之間的分隔符。

練習二、默認分隔符使用

文件team_ace_player.txt中記錄了手游《王者榮耀》主要戰隊內最受歡迎的王牌選手信息,字段之間
使用的是\001作為分隔符,要求在Hive中建表映射成功該文件。

(1/3)數據文件

  • 字段:id、team_name(戰隊名稱)、ace_player_name(王牌選手名字)
  • 分析一下:數據都是原生數據類型,且字段之間分隔符是\001,因此在建表的時候可以省去row format語句,因為hive默認的分隔符就是\001。

    (2/3)建表語句
create table t_team_ace_player ( id int, team_name string, ace_player_name string );
  • 表成功后,把team_ace_player.txt文件上傳到對應的表文件夾下。
#在node機器上進行操作 cd ~ cd hivedata/ #把文件從課程資料中首先上傳到node1 linux系統上 #執行命令把文件上傳到HDFS表所對應的目錄下 hadoop fs -put team_ace_player.txt /user/hive/warehouse/itheima.db/t_team_ace_player

(3/3)結果驗證

  • 執行查詢操作,可以看出數據已經映射成功。
  • 想一想:字段以\001分隔建表時很方便,那么采集、清洗數據時對數據格式追求有什么啟發?你青睞于什么分隔符?

二、Hive Show語法

1、show語法功能

  • Show相關的語句可以幫助用戶查詢相關信息。
  • 比如我們最常使用的查詢當前數據庫下有哪些表 show tables.

2、常用show語句

--1、顯示所有數據庫 SCHEMAS和DATABASES的用法 功能一樣 show databases; show schemas; --2、顯示當前數據庫所有表 show tables; SHOW TABLES [IN database_name]; --指定某個數據庫 --3、查詢顯示一張表的元數據信息 desc formatted t_team_ace_player;

參考

資料來源于《黑馬程序員-大數據Hadoop入門》

總結

以上是生活随笔為你收集整理的4.2 Hive SQL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。