如何在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 
相关推荐
坐吃山猪1 分钟前
ChromaDB02-代码实战
数据库·向量数据库·chromadb
摇滚侠3 分钟前
MySQL 中 utf8mb4 字符集,字母a占几个字节,一个汉字占几个字节 / MySQL 中 utf8mb3 字符集,字母a占几个字节,一个汉字占几个字节
数据库·mysql
ChineHe9 分钟前
Redis数据类型篇001_数据类型梳理与选择指南
数据库·redis·缓存
Antoine-zxt13 分钟前
MySQL CPU飙升至500%的深度排查与优化实践
数据库·mysql
Awkwardx17 分钟前
MySQL数据库—MySQL基本查询
数据库·mysql
夜流冰17 分钟前
Excel - MS Support for Excel: 2 Collaborate
数据库·windows·excel
轻微的风格艾丝凡24 分钟前
嵌入式定时器计时技巧:用有符号数省略溢出判断的底层逻辑与实践
数据库·算法·dsp开发·嵌入式软件
让你三行代码QAQ26 分钟前
MySQL全方位优化方案
mysql
Lonely丶墨轩1 小时前
从登录入口窥见架构:一个企业级双Token认证系统的深度拆解
java·数据库·sql
收获不止数据库1 小时前
黄仁勋2026CES演讲复盘:旧世界,裂开了!
大数据·数据库·人工智能·职场和发展