最近在实用doris导入数据时,特别是导入百万级别以上的数据,使用FEweb端导入会遇到导入异常,使用Navicate导入sql也会出现异常,特别是max_tablet_version_num参数导致无法高并发执行插入,试过很多方法都不行,发现python有工具包,可以解决问题,现将方法发出来,之后再整合成工具类。
安装依赖包
pip install pydoris
pip install pydoris-client
注意:我使用python3.7无法找到以上安装包,但是使用python311可以,其他版本暂时没有尝试。
以下的上传代码:
from pydoris.doris_client import DorisClient
import requests
import pandas as pd
client = DorisClient()
fe_host = '127.0.0.1'
username = 'root'
passwd = '123456'
fe_http_port = "8030"
fe_query_port = "9030"
database = 'db_name'
table = 'table_name'
doris_client = DorisClient()
doris_client.options.fe_host = fe_host
doris_client.options.fe_http_port = fe_http_port
doris_client.options.fe_query_port = fe_query_port
doris_client.options.username = username
doris_client.options.password = passwd
doris_client.options.db = database
# 设置数据格式为 CSV,并指定列分隔符为 ','
client.options.set_csv_format(',')
# 设置自定义标签
client.options.set_label(table + '_label')
# 启用性能分析
client.options.set_enable_profile()
# 这一步也是很迷茫,需要读csv,然后转为csv类型
df = pd.read_csv('导入数据.csv')
csv = df.to_csv(header=False, index=False)
# 调用 DorisClient 的 write 方法将数据写入表中
doris_client.options.set_csv_format(",").set_auto_uuid_label().set_line_delimiter("\\n")
# table_name 必须的是database.table的形式
success = doris_client.write(database + '.' + table, csv)
if success:
print("数据写入成功!")
else:
print("数据写入失败。")
当上传成功后,会有对应的接口回调返回的内容。