You need to enable JavaScript to run this app.
导航

批式导入

最近更新时间2023.05.29 10:13:50

首次发布时间2022.12.19 15:10:59

概述

ByteHouse 支持外置计算引擎的批式导入。

相比通过引擎进行Insert数据,批式导入功能具有以下特点:

  • 支持多线程并行导入,导入大文件的速度更快。

  • 导入时直接写 Part 文件,不经过引擎;且通过 Spark/Flink,采用外部计算资源导入,对查询性能的影响更低。

  • 完成完整的 Part 文件后挂载,不会出现 Insert 导致的 Part 过多,合并慢的情况。

支持数据源

  • 对象存储(Object Storage):从标准对象存储服务导入文件数据,包括火山引擎的 TOS,阿里的 OSS,AWS 的 S3 服务,或自建的 Minio 等。支持的文件类型包括:csv,json,Parquet。
  • Hive:从 Hive 表导入数据。
  • ClickHouse:从 ClickHouse/ByteHouse 表导入数据。
  • LAS:支持从火山引擎湖仓一体分析服务 LAS 导入数据。

操作详情

新增数据源

数据导入 -> 新建数据源 -> 源类型选择(对象存储/Hive/ClickHouse/LAS);

按照对应数据源的配置表单,填写数据源连接信息。

说明

请确保数据源和 ByteHouse 集群在网络上是互通的,且所提供的数据源的访问账号(例如对象存储的 ak/sk)有对应路径/库表的访问权限。

创建任务

前置准备:

  • 建完目标表。

  • 建完数据源。

创建步骤:

  1. 数据导入 -> 新建导入任务

  2. 填写作业名称,描述。请注意作业名称不可与其他作业名重名。

  3. 根据源类型,填写相关的路径或库表信息。

  4. 选择目标数据表(需要目标数据表已经建完)

  5. 进行数据源中的列和表中的列的匹配。

此处,部分数据源(如对象存储)可通过选择 “数据映射”,可以从之前选择的 bucket/path/ 中选择一个 Schema 描述文件,提取描述文件的信息,自动生成源列。

注意

注意,目前离线导入不支持 Expression 进行简单的数据转换,需要确保源数据和目标数据的数据格式是一致的)。

  1. 选择冲突解决方式。此处需要补充解释分区的定义:

分区 Partition:分区为 ClickHouse 中表内的逻辑单元,由分区键(Partition Key)作为分隔依据。使用离线导入功能,最小导入单位为一个完整分区,不是行(Row)。因此,2 次导入中若出现分区字段值重复,就会出现分区冲突。例如,第一次导入产生了 '2022-2-2' 分区,第二次导入中部分行的分区键值也是 '2022-2-2',导入过程中生成了新的 '2022-2-2' 分区,因此冲突。

可以选择以下四种模式处理分区冲突:

  • 增量合并(推荐):新导入的分区数据合并入旧分区。
  • 覆盖分区:新分区覆盖旧的同名分区。
  • 忽略冲突:新分区如果和旧分区重名,则不导入。
  • 后续处理:导入后如果出现分区冲突(任务状态变为 “Confilcted”),再依据新老分区的行数大小,选择保留新分区还是旧分区。
  1. 选择“提交”,完成创建。

开始导入

  1. 在“数据导入”模块下找到之前创建的导入任务,选择“开始”。

  2. 开始导入时,不同数据源有不同的导入参数需要填写:

    • 对于对象存储,需要选择文件。
    • 对于 Hive,需要选择导入的数据表与导入并行度(默认为1,并行度越高导入速度越快)。
    • 对于 ClickHouse,需要输入待导入数据的 select query。

    说明

    对于文件系统类数据源,有以下限制:

    • 导入文件数量上限为:10个。
    • 单个文件的上限容量为:2 GB。

任务跟踪

在开启任务后,会生成对应的执行记录。通过导入任务,可查看该任务所有的执行记录与执行状态。

  • 若执行状态是“已停止”,表明当前任务已经成功;
  • 若执行状态是“失败”,则可以鼠标 Hover “失败”,找到 “查看更多”,查看出错记录。
  • 若执行状态是“冲突”,可选择对应任务的“恢复”操作,进入“处理冲突”步骤。

处理冲突

对于每个冲突,可以选择以下两种处理类型:

  • 覆盖,保留新分区,老分区的数据完全丢弃。

  • 不覆盖,保留老分区,丢弃新导入的分区。

冲突处理完成后,导入任务即会完成。进入“已停止”状态,即代表导入成功。