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

需求:使用sqoop从mysql抽数,由于表数据量比较大,超过1亿条,需要使用类似oracle自带的rownum字段来做切分,

mysql没有自带的rownum字段

powershell 复制代码
#执行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

此时可以使用以下两种方式来生成行号:

第一种方式:使用自定义变量来生成行号

sql 复制代码
--@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版本)

sql 复制代码
select t.col ,row_number() over(order by t.col) as rn
from mysql.table t1 
相关推荐
最贪吃的虎8 分钟前
Git: rebase vs merge
java·运维·git·后端·mysql
QQ142207844918 分钟前
没有这个数据库账户,难道受到了sql注入式攻击?
数据库·sql
残 风41 分钟前
pg兼容mysql框架之语法解析层(openHalo开源项目解析)
数据库·mysql·开源
勇往直前plus42 分钟前
MyBatis/MyBatis-Plus类型转换器深度解析:从基础原理到自定义实践
数据库·oracle·mybatis
cyhysr1 小时前
sql将表字段不相关的内容关联到一起
数据库·sql
九皇叔叔1 小时前
MySQL 数据库 MVCC 机制
数据库·mysql
此生只爱蛋1 小时前
【Redis】Set 集合
数据库·redis·缓存
bjzhang751 小时前
C#操作SQLite数据库
数据库·sqlite·c#
hans汉斯2 小时前
嵌入式操作系统技术发展趋势
大数据·数据库·物联网·rust·云计算·嵌入式实时数据库·汉斯出版社
Coder_Boy_2 小时前
Spring 核心思想与企业级最佳特性(实践级)事务相关
java·数据库·spring