這裏使用oracle的emp表
加載本地數據到hive表
執行查詢
發現報錯
emp使用parquet格式存儲,其中imputFormat和outputFormat都是parquet的相關的,也就是我的imputFormat是parquent的,但是妳傳過來的是text,我不認識
我們看壹下emp的相關信息,可以看到這裏的都是parquet的format的,這是導致這次錯誤的原因。
這就導致了我們需要每次都先把text文件轉化為parquet的文件,然後parquent表進行加載才可以,下面介紹官方推薦的使用方法。
查看emp_tmp的表的信息,這裏可以看到,默認的是TextImputFormat和TextOutputFormat的。
然後加載數據到emp_tmp,查看數據,是正常顯示的
然後現在把之前的emp裏面的數據給刪除
然後把emp_tmp表裏面的數據加載到emp
查詢壹下,數據正常顯示,這個方式使用起來還行,就是每次都需要對臨時表進行操作,還是比較麻煩的。
感覺這個問題是經常出現,為什麽會這樣呢。這個和hive的版本有壹定的關系。
可以看出hive官方將inputformat和outputformat進行了整合,這樣使用起來也是比較方便的。
但是可能有人想,那我修改inputformat不就行了,下面我介紹壹下,看是否可以
創建emp2表,是parquet的存儲格式的
修改inputformat 和serde,這裏inputFormat是TextInputFormat,SEDE使用的是LazySimpleSerDe,Outputformat任然是Parquet的,這裏需要帶上。
查看emp2表的信息,如下圖表示修改成功
加載數據到emp2
查詢數據,執行成功
到這裏,修改inputformat和serde的方法也介紹完成了,我們以為成功了,但是上hdfs上壹看,文件還是txt格式的,所以通過修改inputformat和serde的方法不行。
肯定有人想使用這個方法
這個方法我也嘗試了,但是返回的值全都是null
?在僅僅使用hive的時候,如果想把txt文件裏面的數據保存到parquet表裏面的話,可以使用建立臨時表的方法,這個方法也是比較好操作的。
?但是其實如果使用spark,flink等分布式計算引擎的話,是可以直接的讀取txt數據保存到parquet表裏面的,框架幫我們做了轉化。這種方式也是我們在工作中經常使用的。
?上面也介紹了修改inputformat和ser的方式,秀給inputformat是可以讓txt文件裏面的數據被讀進來的,如果同時還修改了serde為lazysimpleserde的話,這個是把數據保存為text格式的,已經完全和parquet沒有關系了,保存的文件還是txt格式的。僅修改inputformat,但是使用的serde是parquet的,但是數據進出不壹致,也是有問題的。