當前位置:
首頁 >
sqoop导入hive时间格式问题解决方案
發布時間:2025/3/12
23
豆豆
生活随笔
收集整理的這篇文章主要介紹了
sqoop导入hive时间格式问题解决方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
sqoop導入hive時間格式問題解決方案
從mysql導入數據時,發現時間格式有問題,要么是時間后面多一位零,要么要使用時間戳,還能不能好好玩耍了?!
于是,我就逛論壇,找大神,最終無果,也許這個問題過于簡單吧,居然沒有大牛討論。想了好幾天,也看了sqoop官網,突然靈光一閃,我怎么不去看看mysql官網呢?于是,最終解決方案漸漸揭開了神秘的面紗~~~~~
首先,我們復習一下:
1. mysql 中日期與時間格式
時間日期格式對照表:
時間日期詳情對比表:
2.時間日期轉換格式:
#第一種方法: date_col = CAST(datetime_col AS DATE) #第二種方法: DATE_FORMAT(SYSDATE(),'%Y-%m-%d %H:%i:%s')3.sqoop中抽取數據的兩個命令:
--columns column_name1,column_name2... --query 'select column_name1,column_name2...from table where $CONDITIONS'用法比較:
--columns 后面跟我們需要的屬性名,中間不能有空格,不然會報錯。 --query 后面可以跟一個sql語句,那就自由了,隨便有空格。但是使用時必需要有$CONDITIONS做為條件,沒有其他條件就where $CONDITIONS,有其他條件就用AND連接放在最后面。 另外要說明的是,query后面支持雙引號和單引號,效果相同,但如果是雙引號,where $CONDITIONS會報錯,需要在$前加轉義字符“\”,即where \$CONDITIONS;兩都比較,我們會發現,如果要轉換格式,我們避免不了空格,而且我的需求還是在導入的hive表中添加mysql表中不存在的日期字段。所以只能用--query命令。4.編輯代碼:
sqoop import --hive-import \ --connect jdbc:mysql://xxx.xxx.x.x:3306/pinyougoudb \ --username root \ --password root \ --hive-table tb_name\ --query "SELECT ID,NAME,FIRST_CHAR,DATE_FORMAT(SYSDATE(),'%Y-%m-%d %H:%i:%s') AS CREATION_TIME FROM TB_BRAND WHERE \$CONDITIONS" \ --delete-target-dir \ --target-dir /export/data/sv/bas/tb_brand \ --null-string '' \ --null-non-string ''\--fields-terminated-by '\001' \-m 1;5.查看表格數據如下:
hive> select * from tb_name; OK 1 聯想 L 2019-07-17 00:24:32 2 華為 H 2019-07-17 00:24:32 3 三星 S 2019-07-17 00:24:32 4 小米 X 2019-07-17 00:24:32 5 OPPO O 2019-07-17 00:24:32 6 360 S 2019-07-17 00:24:32 7 中興 Z 2019-07-17 00:24:32 8 魅族 M 2019-07-17 00:24:32 9 蘋果 P 2019-07-17 00:24:32 11 諾基亞 N 2019-07-17 00:24:32 12 錘子 C 2019-07-17 00:24:326.時間格式轉換
字符變量 描述 %a 工作日縮寫名稱(Sun.. Sat) %b 縮寫的月份名稱(Jan.. Dec) %c 月,數字(0.. 12) %D 這個月的一天,英語后綴(0th, 1st,2nd, 3rd,...) %d 每月的某一天,數字(00.. 31) %e 每月的某一天,數字(0.. 31) %f 微秒(000000... 999999) %H 小時(00.. 23) %h 小時(01.. 12) %I 小時(01.. 12) %i 分鐘,數字(00.. 59) %j 一年中的一天(001.. 366) %k 小時(0.. 23) %l 小時(1.. 12) %M 月份名稱(January.. December) %m 月,數字(00.. 12) %p AM 要么 PM %r 時間,12小時(hh:mm:ss其次是 AM或PM) %S 秒(00... 59) %s 秒(00... 59) %T 時間,24小時(hh:mm:ss) %U 周(00.. 53),周日是一周的第一天; WEEK()模式0 %u 周(00.. 53),周一是一周的第一天; WEEK()模式1 %V 周(01.. 53),周日是一周的第一天; WEEK()模式2; 用于 %X %v 周(01.. 53),周一是一周的第一天; WEEK()模式3; 用于 %x %W 工作日名稱(Sunday.. Saturday) %w 星期幾(0=星期日.. 6=星期六) %X 星期日是星期的第一天的星期,數字,四位數; 用于%V %x 一周的年份,星期一是一周的第一天,數字,四位數; 用于%v %Y 年份,數字,四位數 %y 年份,數字(兩位數) %% 文字%字符 %x x,對于上面未列出的任何 “ x”7.orcal時間格式轉換:
TO_CHAR(CLUMNS,'yyyy-MM-dd hh24:mi:ss') TO_CHAR(SYSDATE,'yyyy-MM-dd hh24:mi:ss')什么?你想要時間后面跟更多或更少?好吧,壓箱底兒的寶貝也給你吧:
如還有疑問,請留言,謝謝!
總結
以上是生活随笔為你收集整理的sqoop导入hive时间格式问题解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLite学习手册(命令行工具)
- 下一篇: js 里面令人头疼的 this