一、背景介紹
最近幾天,接到公司的一個將當前大數據平台數據全部遷移到阿里雲ODPS平台上的任務。而申請的這個ODPS平台是屬於政務內網的,因考慮到安全問題當前的大數據平台與阿里雲ODPS的網絡是不通的,所以不能使用數據采集工作流模板。
然而,考慮到原大數據平台數據量並不是很大,可以通過將原大數據平台數據導出到CSV文件,然后再將CSV文件導入到ODPS平台。在這個過程中踩的坑有點多,所以想寫篇文檔作為記錄。
二、大數據平台Hive數據導出到本地
編寫export_data.sh腳本如下:
#!/bin/bash # #導出數據 hive -e "use swt_ods; show tables;" > /root/hive_data/table_names.txt for table_name in `cat /root/hive_data/table_names.txt` do hive -e "select * from swt_ods.$table_name;" > /root/hive_data/export_data/$table_name".csv" sed -i 's/\t/,/g' /root/hive_data/export_data/$table_name".csv" done
執行腳本,並將數據/root/hive_data/export_data/目錄下載到本地。
三、ODPS平台創建對應表
3.1 導出原大數據平台Hive建表語句
編寫export_create_table_sql.sh腳本如下:
#!/bin/bash # #導出DDL hive -e "use swt_ods; show tables;" > /root/hive_data/table_names.txt for table_name in `cat /root/hive_data/table_names.txt` do hive -e "show create table swt_ods.$table_name;" > /root/hive_data/export_create_table_sql/$table_name tac $table_name| sed 1,14d| tac > /root/hive_data/export_create_table_sql/$table_name".sql" rm -f $table_name echo ";" >> /root/hive_data/export_create_table_sql/$table_name".sql" cat /root/hive_data/export_create_table_sql/$table_name".sql" >> /root/hive_data/export_create_table_sql/all.sql done
執行腳本,並將/root/hive_data/export_create_table_sql/all.sql下載到本地。
3.2 在ODPS中創建對應的表
3.2.1 下載並配置MaxCompute 命令行工具
點擊壓縮包鏈接下載

在Windows中,解壓即安裝。在解壓目錄中配置odps_config.ini文件
在解壓目錄odpscmd_public\bin目錄下,雙擊運行odpscmd.bat。
3.2.2 使用命令行創建表
將all.sql中的建表語句粘貼到命令行執行即可創建表。
3.2.3 建表過程遇到的問題
主要問題:
一是,hive中建表的屬性的數據類型和MaxCompute的數據類型不對應。可以參考數據類型說明文檔,
https://help.aliyun.com/document_detail/27821.html?spm=a2c4g.11186623.2.5.X8fmyl
。例如:decimal類型不需要添加精度,如果寫成decimal(a,b)則會報錯;MaxCompute沒有date類型,只有datetime類型;沒有char類型。所以要根據MaxCompute的數據類型,對hive的建表語句進行調整。
二是,涉及到新數據類型(TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP BINARY),需在SQL語句前加語句set odps.sql.type.system.odps2=true;,執行時set語句和SQL語句一起提交執行。
在解決完上述兩個問題后,在重復步驟二,在命令行中批量執行建表語句。
四、本地數據導入到ODPS平台
4.1 命令行使用tunnel命令導入數據
使用命令行的方式批量導入數據到對應的表中。
tunnel上傳數據的命令為:tunnel upload [options] <path> <[project.]table[/partition]>。詳見:
https://help.aliyun.com/document_detail/27833.html?spm=a2c4g.11186623.2.1.rLlM5i
例如:tunnel upload C:\PATH\table_name.csv project_name.table_name;
4.2 導入數據遇到的主要問題
4.2.1 decimal類型數據無法插入空值
問題描述:
在導入數據時報format error, decimal nullcontent錯誤。
可能需要加什么選項或者參數可以解決,但是在查看tunnel upload命令的詳細介紹后也沒有找到使用命令行來解決這個問題的方法。
解決方法:
使用MaxCompute Studio 導入數據可以解決上述問題。MaxCompute Studio安裝及介紹可參看文檔,
https://help.aliyun.com/document_detail/50889.html?spm=a2c4g.11186623.6.745.ZVGpPm

4.2.2 原始數據存在的問題
問題描述:
在導入數據時報column missmatch錯誤。
解決方法:
經檢查原始數據,可以發現數據中存在列,該列的值中含有逗號。而數據導入按逗號作為列分隔符,所以會出現數據列數大於表的列數。因為這樣的表比較少,所以直接修改數據中那一列中的逗號為其他符號,然后再導入。