一种读取亿级doris数据库的方法

一种,读取,doris,数据库,方法 · 浏览次数 : 31

小编点评

**Spark读取doris数据** ```python import pyspark.sql # 连接到doris数据库 spark_client = pyspark.sql.SQLContext.builder.getOrCreate() df = spark_client.read.jdbc( url="jdbc:mysql://localhost:2000/doris_db", table="doris_table", column="item_sku_id", numPartitions=50, ) # 打印数据 print(df) # 关闭连接 spark_client.stop() ``` **参数介绍** * `url`:连接到doris数据库的连接字符串。 * `table`:要读取的doris表的名称。 * `column`:要读取的数据列名。 * `numPartitions`:读取的分区数量。 * `lowerBound`和`upperBound`:指定读取的最小和最大值。 * `properties`:其他连接参数。 **注意** * `doris_db` 是一个用于存储doris数据的数据库名称。 * `doris_table` 是doris数据表的名字。 * `item_sku_id` 是doris数据中的要读取的数据列名。 * `spark_client` 是Spark SQL上下文的实例。

正文

  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列表自行控制范围。

作者:京东零售 赵奇猛

来源:京东云开发者社区

与一种读取亿级doris数据库的方法相似的内容:

一种读取亿级doris数据库的方法

工作中,常常需要将线上doris同步至集市。读取doris数据同读取常规mysql基本相同。如果数据行小于千万,比较简单的方式直接单节点连接、读取和存储。

Aveva Marine VBNET 编程系列====>读取drawing explorer的第2层级 Sub views

接上期的内容,此次读取view的下一层几subview 主要用到下面的方法获取view的第一个子级 一个封装的类 Public Class DrawingExpolrerEx Public Shared Function DrawingHasViews(draftApp As MarDrafting

StampedLock:JDK1.8中新增,比ReadWriteLock还快的锁

摘要:StampedLock是一种在读取共享变量的过程中,允许后面的一个线程获取写锁对共享变量进行写操作,使用乐观读避免数据不一致的问题,并且在读多写少的高并发环境下,比ReadWriteLock更快的一种锁。 本文分享自华为云社区《一文彻底理解并发编程中非常重要的票据锁——StampedLock》

MapReduce和Spark读取HBase快照表

1.概述 随着大数据技术的不断发展,处理海量数据的需求变得愈发迫切。MapReduce作为一种分布式计算模型,为处理大规模数据提供了有效的解决方案。在这篇博客中,我们将探讨如何使用MapReduce框架读取快照表(Snapshot Table)的数据。快照表是一种记录某一时刻系统状态的表格,通过Ma

[转帖]db file sequential read-数据文件顺序读取

https://www.cnblogs.com/xibuhaohao/p/9959593.html 等待事件: "db file sequential read" Reference Note (文档 ID 34559.1) 这种等待事件是一种IO读请求相关的等待。与”db file scatter

用STM32F4的DMA实现高速、实时的同步并行通信——以读取高速ADC为例[原创www.cnblogs.com/helesheng]

本文给出了一种利用STM32F4系列MCU的DMA功能,实现10MSPS数量级的同步并行数据通信的方法。并用控制高速流水线型的模数转换器AD9200读取作为实例,展示了该通行方法。本文最后总结了该方法的优点和问题,以及克服这些问题的思路。

7.7 实现进程内存读写

内存进程读写可以让我们访问其他进程的内存空间并读取或修改其中的数据。这种技术通常用于各种调试工具、进程监控工具和反作弊系统等场景。在`Windows`系统中,内存进程读写可以通过一些`API`函数来实现,如`OpenProcess`、`ReadProcessMemory`和`WriteProcessMemory`等。这些函数提供了一种通用的方式来访问其他进程的内存,并且可以用来读取或写入不同类型的

StampedLock:高并发场景下一种比读写锁更快的锁

摘要:在读多写少的环境中,有没有一种比ReadWriteLock更快的锁呢?有,那就是JDK1.8中新增的StampedLock! 本文分享自华为云社区《【高并发】高并发场景下一种比读写锁更快的锁》,作者: 冰 河。 什么是StampedLock? ReadWriteLock锁允许多个线程同时读取共

安装、学习protobuf

Protobuf是什么? 类似于json的一种数据格式,独立于语言,而且是二进制方式,所以比json更快,而且还可以直接存储一些图、树 序列化和反序列化 持久化(存到磁盘硬盘)领域中,数据存到磁盘叫序列化,从磁盘读取出来叫反序列化 网络传输领域中,数据块转字符串叫序列化,对端把字符串解析为数据块叫反

可插拔组件设计机制—SPI

SPI 的全称是Service Provider Interface,即提供服务接口;是一种服务发现机制,SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。本篇文章聚焦SPI的使用场景及使用介绍。