Sqoop將MySQL資料庫中的數據導入到Hive表中(實例)

問題導讀:

1、–hive-import、–hive-overwrite的作用?

2、如何處理關系型資料庫字段中字符串含有分隔符問題?

3、使用–hive-import默認字段分隔符是?一行記錄分隔符是?

4、NULL值是怎麼處理的?–null-string和–null-string的作用?

5、–hive-partition-key作用?分區值類型必須是?

6、–compression-codec作用?

7、Sqoop將關系型資料庫數據導入Hive中,默認導入資料庫是?默認導入路徑是?如何指定某個特定的資料庫?

一、原理及部分參數簡介

1、Sqoop import主要功能是將數據導入到HDFS文件中。但是如果你有與Hadoop集群關聯的Hive元數據服務,Sqoop也可以將數據導入到Hive中,通過創建表語句CREATE TABLE <表名>在Hive中設定數據佈局。導入數據到Hive中很簡單,在Sqoop命令行中,使用–hive-import選項。

2、 如果Hive中表已經存在,你可以使用–hive-overwrite選擇來表明,在Hive中的此表必須被替換。如果你的數據已經被導入到HDFS中或者此步驟被忽略瞭,Sqoop將會產生一個Hive腳本,它包含"CREATE TABLE"操作使用Hive數據類型設定列和“LOAD DATA INPATH” 語句的來將數據文件加載到Hive warehouse目錄中。

3、盡管Hive支持轉義字符,但是它並不處理新行字符的轉義。Hive使用Sqoop導入數據將會出現問題,當你的數據行中包含著含有Hive默認行分隔符(\n or \r)的字符串字段或者列分隔符(\01)。你可以使用–hive-drop-import-delims選項將那些字符刪掉,提供給Hive兼容的文本數據,或者使用–hive-delims-replacement選擇替換掉那些字符以用戶自設定字符串以提供給Hive兼容的文本數據。這些選項僅僅在你使用Hive默認分隔符的時候使用。在已經指定不同分隔符的情況下,不應該使用。

如果你不使用指定的分隔符而使用–hive-import,那麼默認使用^A作為字段分隔符,\n作為一條記錄分隔符。

4、Sqoop默認的會將NULL值以string類型導入,在Hive中默認是使用\N表示NULL。這會導致,在Hive中執行查詢的使用(like IS NULL)不起作用。你可以使用 –null-string和 –null-non-string在導入操作的時候。或者使用–input-null-string和–input-null-non-string在導出的時候來保護NULL值。因為Sqoop將會在生成的代碼中使用這些參數。所以需要將\N變為\\N。如:$ sqoop import … –null-string '\\N' –null-non-string '\\N'。

5、使用–hive-table 修改輸出表名

6、Hive可以將數據分區導入以便提高查詢性能。你可以使用–hive-partition-key或者 –hive-partition-value參數告訴Sqoop job以指定分區形式導入Hive中。分區值必須是個字符串。

7、使用–compression-codec如後面接"com.hadoop.compression.lzo.LzopCodec"可以實現壓縮。

sqoop import –hive-import –connect jdbc:mysql://Hadoop.slave2:3306/check_data –username hadoop –password hadoop –table t_check_account_job –hive-table check_data.check_account_job

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *