iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

Hive 使用 SQL-Like 查詢語言(Hive SQL),其語法與一般的 SQL 語法非常相似,唯一要注意的是,之前有提過 HDFS 只支援寫入、讀取與刪除資料,並不能針對現存資料進行局部更新,這點移到 Hive 上也一樣,畢竟說到底我們還是透過 Hive 在與 HDFS 進行互動。

今天會示範 Hive 的基本操作、包括創建資料庫與表格、插入資料、與刪除資料等,另外會示範以 Python API 來使用 Hive。

Hive SQL

  • 查看現有資料庫/資料表 (SHOW)

    SHOW DATABASES;
    SHOW TABLES;
    
  • 創建資料庫 (CREATE DATABASE)

    -- syntax: CREATE DATABASE <db_name>;
    CREATE DATABASE test;
    
  • 使用/切換資料庫 (USE)

    -- syntax: USE <db_name>;
    USE test;
    
  • 創建資料表 (CREATE TABLE)

    • syntax ([...] 表示 options,可寫可不寫。)

      CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] <table_name>
      (col_name data_type [COMMENT col_comment], ...)
      
      [COMMENT table_comment] 
      [ROW FORMAT row_format] 
      [STORED AS file_format]
      
    • example

      CREATE TABLE IF NOT EXISTS employee ( 
          eid int, 
          name String,
          salary String, 
          destination String)
      
      COMMENT 'Employee details'
      ROW FORMAT DELIMITED 
      FIELDS TERMINATED BY '\t' 
      LINES TERMINATED BY '\n' 
      STORED AS TEXTFILE; 
      

    我們就範例來解釋,可以發現上半部分就是一般 sql 語法,其中 IF NOT EXISTS 是 options 可以省略;下半部分每一行的意思分別是是:

    • COMMENT 用來添加資料表的註解
    • ROW FORMAT DELIMITED 用來自定義分隔符 (後面兩行是自定義的內容)
    • FIELDS TERMINATED BY 自定義欄位之間分隔符號 (預設為 \001)
    • LINES TERMINATED BY 自定義行之間的分隔符號 (預設為 \n)
    • STORED AS TEXTFILE 儲存的檔案格式 ()
  • 插入資料 (INSERT)

    INSERT INTO <table_name> (col1, ...) 
    VALUES
        (val1.1, ...), 
        (val2.1, ...);
    
  • 讀取資料 (SELECT)

    select cols | * from <table_name> 
    
    [ WHERE <condition> ]
    [ GROUP BY col_list ]
    [ ORDER BY col_list ]
    [ CLUSTER BY col_list
        | [DISTRIBUTE BY col_list] [SORT BY col_list]
    ]
    [ LIMIT [offset,] rows ]
    
  • 更新資料 (Update)
    只有符合 ACID 的 table 能夠使用 Update,另外 Partitioning** 以及 Bucketing 的欄位不能被 Update。

    ACID:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),Hive 預設不支持 ACID,要在建表時要設置 transactional 屬性。

    CREATE TABLE <table_name>
    ...
    STORED AS ORC
    TBLPROPERTIES ('transactional'='true');
    
    UPDATE <table_name> 
    SET col1 = val1 , col2 = val2 ... 
    
    [ WHERE <condition> ]
    
  • 刪除資料 (DELETE)

    • 只有符合 ACID 的 table 能夠使用 Update。
    DELETE FROM <table_name> 
    
    [ WHERE <condition> ]
    
  • 刪除資料庫/資料表 (DROP)

    DROP DATABASE <db_name>;
    DROP TABLE <table_name>;
    

預告

Hive 預設是將 SQL query 轉換為 MapReduce,但 MapReduce 本身其實存在不少缺點,因此才有了後來的 Spark

明天開始將進入 Spark 的介紹。

參考資料

Hive SQL 基礎語法學習筆記
How to Create a Table in Hive


上一篇
Day11 - Hive 安裝與設置
下一篇
Day13 - Spark 介紹 (1):簡介與架構
系列文
30天認識主流大數據框架:Hadoop + Spark + Flink30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言