sqoop从oracle抽取数据到hive时候分隔符有关问题
sqoop从oracle抽取数据到hive时候分隔符问题
oracle表字段默认使用,间隔,因此导出的时候,sqoop写法如下 注意分隔符为,:
sqoop import \ --connect $ORCL_CONNECTOR \ --username $ORCL_USERNAME \ --password $ORCL_PASSWORD \ --table $TABLENAME \ --target-dir $HDFSPATH \ --m $MAP \ --columns $COLUMNS \ --fields-terminated-by ',' \ --jar-file ../../lib/sqoop-import.jar \ --class-name com.chinadaas.gsinfo.sqoop.oracle.$TABLENAME
导出到hdfs后,通过hive创建外表关联hdfs的写法如下:
drop table if exists F_LIUCHENG_TMP_HDFS_EXT_20150717; create external table F_LIUCHENG_TMP_HDFS_EXT_20150717 ( MARKCODE string, MARKCODE_KEY string, UNIONTYPECODE string, XIANGMU string, LIUCHENGDATE string, CREATEDATE string, ISDELITEM string, REMARK string, HASDOWN string, FLIUC_IDT string, FLIUC_UDT string, FLIUC_STATUS string, FLIUC_ID string, FLIUC_SID string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/tmp/oracle_20150717/F_LIUCHENG_TMP';
这样,sqoop导出的字段就和hive的字段关联起来,数值也会一一对应,否则,对应的数据会都放在hive的第一个字段里并且以,间隔,hive的其余字段都为Null。
这是工作总遇到的问题的总结。