当前位置:   article > 正文

如何在mysql中生成类似oracle中的rownum行号?

如何在mysql中生成类似oracle中的rownum行号?

需求:使用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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

此时可以使用以下两种方式来生成行号:
第一种方式:使用自定义变量来生成行号

--@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'
  • 1
  • 2
  • 3
  • 4

第二种方式:使用row_number窗口函数来生成行号(Mysql8.0版本)

select t.col ,row_number() over(order by t.col) as rn
from mysql.table t1 
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/389574
推荐阅读
相关标签
  

闽ICP备14008679号