大數據採坑集-導入數據到hive的換行符問題

問題描述

我們通常在遷移數據到大數據環境中,會使用,sqoop、datax之類的etl工具,從數據庫中遷移到hive或hdfs。數據庫中的原始數據中的文本類數據難免會有特殊字符,比如換行符,會對導入Hive後的數據產生影響。下面是從mysql導入hive的數據,其中,hive表是textfile格式存儲特殊字符沒做處理:
在這裏插入圖片描述

發現有兩個字段沒了,於是再看看hive表在hdfs上的文件:
在這裏插入圖片描述
發現原本一行的數據,變成多行了,文本中有‘\n’換行符,導致位置錯亂,所以hive查出來有兩個字段沒了

解決方法一

把換行符替換成空字符串,sqoop中有替換的參數,但是datax中沒有。有些場景中,爲了保留數據的完整性,必須保留換行符怎麼辦呢?

解決方法二

用orc存儲hive表
ORC的全稱是(Optimized Row Columnar),ORC文件格式是一種Hadoop生態圈中的列式存儲格式,它的產生早在2013年初,最初產生自Apache Hive,用於降低Hadoop數據存儲空間和加速Hive查詢速度。和Parquet類似,它並不是一個單純的列式存儲格式,仍然是首先根據行組分割整個表,在每一個行組內進行按列存儲。ORC文件是自描述的,它的元數據使用Protocol Buffers序列化,並且文件中的數據儘可能的壓縮以降低存儲空間的消耗,目前也被Spark SQL、Presto等查詢引擎支持
因爲是列式存儲,所以不存在某字段的換行符的原因導致數據錯亂

用orc存儲後的表,全表查詢:
在這裏插入圖片描述
咦?怎麼還是空的?下面幾行怎麼全是null?列式存儲不應該出現這種情況啊!
別急, 你看到的不一定是真實的
增加過濾條件指定這行的id試試
在這裏插入圖片描述
咦?怎麼又有了?
解釋:我用的是ambari自帶的hive查詢界面,這可能是ambari本身顯示的bug,它把文本數據裏面的換行符也展示出來了,所以頁面上看到還是亂的,but,實際數據並沒有亂,你執行任何查詢都不會有問題,頁面展示的問題,不再是數據的問題!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章