如何在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 
相关推荐
渣渣灰飞4 分钟前
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第二章:RBAC 权限系统设计
android·学习·mysql
罗政1 小时前
PDF 批量合并工具:本地 AI 自动排序、识别正文日期与合同编号
数据库·pdf·php
SelectDB1 小时前
宽表元数据膨胀怎么解?Doris Segment V3 对比 Parquet、Lance
大数据·数据库·数据分析
曹牧2 小时前
Oracle:快速定位最新数据
数据库·oracle
AskHarries2 小时前
PostgreSQL 还是 MySQL
mysql·postgrel
Zhu7582 小时前
在Docker环境部署ApacheGuacamole,对接PG数据库
数据库·docker·容器
Leighteen3 小时前
Redis与MySQL双写一致性:从问题根源到工程落地
数据库·redis·mysql
AI-好学者3 小时前
阶段二-Cypher查询语言详解
数据库·rag·graphrag
龙仔7254 小时前
SQL Server 批量多库只读账号一键脚本(带逐行注释完整脚本 + 分段逐句详细解释)
服务器·数据库·sql·sqlserver·dba