天天看點

将MySQL中的資料導入到Hive中的幾種方式

作者:碼農不器
  1. Sqoop方式:

步驟:

(1)在MySQL中建立一個表(例如,employees)并插入資料。

(2)在Hive中建立一個表,用于存儲從MySQL中導入的資料。例如:

CREATE TABLE employees (
  id INT,
  name STRING,
  age INT
)
STORED AS ORC;
           

(3)使用Sqoop導入MySQL中的資料到Hive中。例如:

sqoop import \
  --connect jdbc:mysql://localhost:3306/mydb \
  --username root \
  --password 123456 \
  --table employees \
  --hive-import \
  --hive-table employees           

指令解釋:

  • --connect:指定MySQL資料庫的連接配接資訊。
  • --username:指定MySQL資料庫的使用者名。
  • --password:指定MySQL資料庫的密碼。
  • --table:指定要導入的MySQL表。
  • --hive-import:使用Hive的導入功能。
  • --hive-table:指定要導入到的Hive表。

(4)在Hive中查詢導入的表,檢查資料是否正确。

SELECT * FROM employees;           

檢查方式:檢查查詢結果是否正确。

  1. Hive自帶的MySQL JDBC驅動方式:

步驟:

(1)在MySQL中建立一個表(例如,employees)并插入資料。

(2)在Hive中建立一個外部表,用于連接配接MySQL資料庫。例如:

CREATE EXTERNAL TABLE employees_mysql (
  id INT,
  name STRING,
  age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION 'jdbc:mysql://localhost:3306/mydb?user=root&password=123456&db=employees&table=employees';           

指令解釋:

  • ROW FORMAT DELIMITED FIELDS TERMINATED BY ',':指定資料的分隔符。
  • LOCATION:指定MySQL資料的位置。

(3)在Hive中建立一個表,用于存儲從MySQL中導入的資料。例如:

CREATE TABLE employees (
  id INT,
  name STRING,
  age INT
)
STORED AS ORC;           

(4)使用INSERT INTO語句将資料從外部表導入到Hive表中。例如:

INSERT INTO TABLE employees SELECT * FROM employees_mysql;           

(5)在Hive中查詢導入的表,檢查資料是否正确。

SELECT * FROM employees;           

檢查方式:檢查查詢結果是否正确。

  1. 使用HDFS作為中間層方式:

步驟:

(1)在MySQL中建立一個表(例如,employees)并插入資料。

(2)使用Sqoop或其他工具将MySQL中的資料導入到HDFS中。例如:

sqoop import \
  --connect jdbc:mysql://localhost:3306/mydb \
  --username root \
  --password 123456 \
  --table employees \
  --target-dir /user/hive/warehouse/employees           

(3)在Hive中建立一個外部表,用于連接配接HDFS。例如:

CREATE EXTERNAL TABLE employees(
	id INT,
  name STRING,
  age INT) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/warehouse/employees';           

指令解釋:

- `ROW FORMAT DELIMITED FIELDS TERMINATED BY ','`:指定資料的分隔符。

- `LOCATION`:指定HDFS資料的位置。

(4)在Hive中建立一個表,用于存儲從HDFS中導入的資料。例如:

CREATE TABLE employees_hdfs ( id INT, name STRING, age INT ) STORED AS ORC;           

(5)使用INSERT INTO語句将資料從外部表導入到Hive表中。例如:

INSERT INTO TABLE employees_hdfs SELECT * FROM employees;           

(6)在Hive中查詢導入的表,檢查資料是否正确。

SELECT * FROM employees_hdfs;           

檢查方式:檢查查詢結果是否正确。

以上是将MySQL中的資料導入到Hive中的幾種方式的具體操作步驟、指令/代碼/腳本及驗證/檢查方式。在實際應用中,需要根據具體情況進行選擇和調整。

最補充一些驗證/檢查方式:

  1. 驗證/檢查方式1:對比MySQL和Hive中的資料

在MySQL和Hive中分别查詢相同的資料,對比查詢結果是否一緻。例如,可以在MySQL中查詢前10條資料和在Hive中查詢前10條資料,将結果進行比較。如果結果一緻,說明資料正确導入。

MySQL查詢示例:

SELECT * FROM employees LIMIT 10;           

Hive查詢示例:

SELECT * FROM employees_hdfs LIMIT 10;           
  1. 驗證/檢查方式2:在Hive中查詢導入的表并檢查資料

在Hive中查詢導入的表,并檢視資料是否正确。例如:

SELECT COUNT(*) FROM employees_hdfs;           

檢查方式:檢查查詢結果是否正确。

  1. 驗證/檢查方式3:在Hive中使用JDBC将資料導出到本地檔案中

在Hive中使用JDBC将資料導出到本地檔案中,然後對比檔案中的資料是否正确。例如:

beeline -u jdbc:hive2://localhost:10000 -n <username> -p <password> -e "SELECT * FROM employees_hdfs" > employees_hdfs.txt           

檢查方式:對比本地檔案中的資料和MySQL中的資料是否一緻。

需要注意的是,資料導入到Hive中後可能會出現資料類型不比對、資料丢失等問題,是以需要進行一些資料清洗和轉換。在實際應用中,需要根據具體業務需求和資料情況進行選擇和調整。

  1. 驗證/檢查方式4:使用Hive的資料校驗功能

Hive提供了一個資料校驗功能,可以用于檢查導入的資料是否正确。具體步驟如下:

(1)在Hive中建立一個空表,用于存儲校驗結果。例如:

sqlCopy codeCREATE TABLE employees_check (
  id INT,
  name STRING,
  age INT,
  status STRING
)
STORED AS ORC;
           

(2)使用以下指令運作資料校驗:

sqlCopy codeINSERT INTO TABLE employees_check
SELECT id, name, age, 
  CASE WHEN EXISTS (SELECT * FROM employees_hdfs WHERE id = e.id AND name = e.name AND age = e.age) THEN 'OK' ELSE 'ERROR' END
FROM employees_hdfs e;
           

該指令會從employees_hdfs表中查詢資料,并将每條資料的校驗結果(OK或ERROR)插入到employees_check表中。

(3)查詢校驗結果:

sqlCopy codeSELECT * FROM employees_check;           

檢查方式:檢查status列是否全部為OK。如果有ERROR則說明有部分資料沒有正确導入。

需要注意的是,資料校驗功能會對資料進行全表掃描,對于大資料量的表可能會比較耗時。在實際應用中,需要根據資料規模和性能需求進行選擇和調整。

  1. 驗證/檢查方式5:使用Apache Nifi進行資料遷移并驗證

Apache Nifi是一個開源的資料流處理工具,可以用于資料的抽取、轉換、加載等操作。可以使用Nifi将MySQL中的資料抽取到Hive中,并驗證資料是否正确導入。

具體步驟如下:

(1)在Nifi中建立一個資料流程。資料流程包括兩個元件:一個GetTableFetch(用于從MySQL中抽取資料)、一個PutHiveQL(用于将資料導入到Hive中)。

(2)配置GetTableFetch元件,将MySQL的連接配接資訊、要抽取的表名、要抽取的列等資訊配置好。

(3)配置PutHiveQL元件,将Hive的連接配接資訊、要導入的表名、要導入的列等資訊配置好。

(4)運作資料流程,等待資料抽取和導入完成。

(5)在Hive中查詢導入的表,檢查資料是否正确。

SELECT * FROM employees;           

檢查方式:檢查查詢結果是否正确。

需要注意的是,Nifi的使用需要一定的配置和開發經驗,适合處理較為複雜的資料處理場景。在實際應用中,需要根據具體情況進行選擇和調整。

附送,使用Apache NiFi将MySQL中的資料抽取到Hive中

步驟:

(1)在Nifi中建立一個資料流程。資料流程包括兩個元件:一個GetTableFetch(用于從MySQL中抽取資料)、一個PutHiveQL(用于将資料導入到Hive中)。

(2)配置GetTableFetch元件:

  • 點選GetTableFetch元件,打開配置面闆。
  • 在面闆中,點選"Properties"頁籤,配置MySQL的連接配接資訊。
    • "Database Connection Pooling Service":選擇一個已經配置好的連接配接池。
    • "Table Name":要抽取的表名。
    • "Columns to Return":要抽取的列。
    • "Maximum-value Column Name":要使用的最大值列。
    • "Maximum-value Column Value":要使用的最大值。
  • 點選"Settings"頁籤,配置抽取政策。
    • "Fetch Size":每次抽取的資料量。
    • "Maximum-value":最大值。
  • 點選"Relationships"頁籤,配置輸出關系。
    • "failure":抽取失敗。
    • "original":原始資料。
    • "new":新的抽取資料。
  • 點選"Properties"頁籤,配置PutHiveQL的連接配接資訊。
    • "Database Connection Pooling Service":選擇一個已經配置好的連接配接池。
    • "Hive Database Name":要導入資料的資料庫名。
    • "Table Name":要導入資料的表名。

(3)配置PutHiveQL元件:

  • 點選PutHiveQL元件,打開配置面闆。
  • 在面闆中,點選"Properties"頁籤,配置Hive的連接配接資訊。
  • 點選"Relationships"頁籤,配置輸出關系。
    • "failure":導入失敗。
    • "original":原始資料。
    • "new":新的導入資料。

(4)運作資料流程。

  • 點選Nifi頁面右上角的"Start"按鈕,啟動資料流程。
  • 等待資料抽取和導入完成。

(5)在Hive中查詢導入的表,檢查資料是否正确。

SELECT * FROM employees;           

檢查方式:檢查查詢結果是否正确。

需要注意的是,Nifi的使用需要一定的配置和開發經驗,适合處理較為複雜的資料處理場景。在實際應用中,需要根據具體情況進行選擇和調整。

繼續閱讀