一种读取亿级doris数据库的方法 | 京东云技术团队

  1. 工作中,常常需要将线上doris同步至集市。读取doris数据同读取常规mysql基本相同。如果数据行小于千万,比较简单的方式直接单节点连接、读取和存储。Python示例如下:
1def get_data(sql,host='',port=2000,user='',password='',db=''): 2 # 支持doris 3 import pymysql 4 connect = pymysql.connect(host=host,port=port,user=user,password=password,db=db,charset='utf8') 5 cursor = connect.cursor() 6 cursor.execute('SET query_timeout = 216000;') #单位秒 7 cursor.execute(sql) 8 result = cursor.fetchall() 9 for row in result: 10 pass # 存储格式可以自行控制 11 cursor.close() 12 connect.close() 13 return result
  1. 如果数据量比较大,超过千万,甚至过亿,单节点读取会遇到超时以及时效过低的问题。可以使用spark.read.jdbc分布式多节点并发读取。spark读取支持两种方式。

主要参数介绍:

read.jdbc(url=url,table=remote_table,column='item_sku_id',numPartitions=50,lowerBound=lowerBound, upperBound=upperBound,properties=prop)

url:格式如'jdbc:mysql://**.jd.com:2000/数据库名?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai'

table:可以是表名,也可以是查询sql(也即支持条件查询),如果是sql,格式如"(SELECT count(*) sku FROM rule_price_result where dt='2023-05-10') AS tmp"

numPartitions:控制并发节点个数

lowerBound+upperBound和properties二选一,控制每个节点读取的数据范围。

lowerBound+upperBound方式:指定读取最低和最高值,spark会结合分区个数和最低最高边界机械做分割。

如果数据分布有倾斜,可以通过predicates列表自行控制范围。

作者:京东零售 赵奇猛

来源:京东云开发者社区

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

AWS国庆双重礼,仅限7天

自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。,仅限7天$20

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

mysql和redis双写一致性策略分析

mysql和redis双写一致性策略分析一.什么是双写一致性当我们更新了mysql中的数据后也可以同时保证redis中的数据同步更新;数据读取的流程:1.读取redis,如果value!null,直接返回;2.如果redis中valuenull,读取mysql中数据对应的val

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.