写点什么

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

  • 2023-06-27
    北京
  • 本文字数:779 字

    阅读完需:约 3 分钟

一种读取亿级doris数据库的方法 | 京东云技术团队
  1. 工作中,常常需要将线上 doris 同步至集市。读取 doris 数据同读取常规 mysql 基本相同。如果数据行小于千万,比较简单的方式直接单节点连接、读取和存储。Python 示例如下:


def get_data(sql,host='',port=2000,user='',password='',db=''):    # 支持doris    import pymysql    connect = pymysql.connect(host=host,port=port,user=user,password=password,db=db,charset='utf8')    cursor = connect.cursor()    cursor.execute('SET query_timeout = 216000;') #单位秒    cursor.execute(sql)    result = cursor.fetchall()    for row in result:        pass # 存储格式可以自行控制     cursor.close()    connect.close()    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 列表自行控制范围。


作者:京东零售 赵奇猛

来源:京东云开发者社区

发布于: 刚刚阅读数: 3
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
一种读取亿级doris数据库的方法 | 京东云技术团队_MySQL_京东科技开发者_InfoQ写作社区