如何在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 
相关推荐
填满你的记忆5 分钟前
《为什么 MySQL 不适合做 AI 检索?》
数据库·人工智能·mysql·ai·向量数据库
map1e_zjc6 分钟前
Redis入门笔记
数据库·redis·缓存
步十人16 分钟前
【Redis】高可用集群架构
数据库·redis·架构
霸道流氓气质18 分钟前
批量异步处理 + MQ + Redis 进度追踪实战指南
数据库·redis·状态模式
smart199818 分钟前
数据备份解决方案,适合金融等关键业务需求
数据库·科技·存储
拾起零碎21 分钟前
U8/固定资产反结账报错
数据库·oracle
念恒1230628 分钟前
MySQL connect 访问
数据库·mysql
六月雨滴29 分钟前
Oracle 归档日志性能优化
数据库·oracle·性能优化
码不停蹄的玄黓29 分钟前
MySQL 死锁:已产生死锁的解决方法 + 永久避免方案
数据库·mysql
Leon-Ning Liu35 分钟前
【真实经验分享】ORA-600 [4187]发生在回滚段(undo segment)的 wrap# 接近最大值时
数据库·oracle