赞
踩
需求:使用sqoop从mysql抽数,由于表数据量比较大,超过1亿条,需要使用类似oracle自带的rownum字段来做切分,
mysql没有自带的rownum字段
#执行sqoop命令 ${sqoop_home}/sqoop import \ -Dorg.apache.sqoop.splitter.allow_text_splitter=true \ --connect jdbc:mysql://10.33.44.55:2883/testdb \ --username test \ --password 'test%2022' \ --fields-terminated-by '|' \ --null-string '\\N' \ --null-non-string '\\N' \ --hive-delims-replacement ' ' \ --outdir /tpdata/data/sqoopcode \ --delete-target-dir \ --fetch-size 200 \ --map-column-hive ID=String,JOB_NO=String,SERIAL_NO=String,USER_ACCOUNT=String,TYPE=String,DOCUMENT_TYPE=String,TOTAL_NUM=String,STATUS=String,INTERNAL_URL=String,EXTERNAL_URL=String,REMARK=String,CREATOR=String,MODIFIER=String,GMT_CREATED=String,GMT_MODIFIED=String,IS_DELETED=String,ASYNC_SERIAL_NO=String,FAIL_POLICYS=String \ --target-dir /user/hive/warehouse/test/table_01/etl_date=${etldate} \ --query "select * from test.table_01 t1 where \$CONDITIONS" \ -m 1 >> ${sqoop_error_file} 2>&1
此时可以使用以下两种方式来生成行号:
第一种方式:使用自定义变量来生成行号
--@rownum是用户自定义的会话变量,可以用来在查询中生成行号
select t.col,(@rownum:=@rownum+1) as rowkey
from mysql.table t1,(select @rownum:=0) t2
where t2.rowkey>='10000000' and t2.rowkey<'20000000'
第二种方式:使用row_number窗口函数来生成行号(Mysql8.0版本)
select t.col ,row_number() over(order by t.col) as rn
from mysql.table t1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。