批式导入适用于希望将已准备好的数据一次性加载到 ByteHouse 的场景,当前支持 S3 协议对象存储、Hive、ClickHouse 等数据源。本文将介绍批式导入的功能及如何将不同数据源的数据导入至 ByteHouse。
ByteHouse 支持外置计算引擎的批式导入。相比通过引擎通过 INSERT 插入数据,批式导入功能具有以下特点:
INSERT 导致的 Part 过多,合并慢的情况。创建批式导入任务后,ByteHouse 支持设置为立即执行或创建定时导入任务,支持编辑、克隆、删除任务,支持查看任务状态和详情。如果导入任务执行过程中出现冲突,ByteHouse 支持您手动解决冲突并恢复任务。
使用 ByteHouse 批式导入功能时,最小导入单位为一个完整分区(Partition),而不是行(Row)。分区是 ByteHouse 中表内的逻辑单元,由分区键(Partition Key)作为分隔依据。当前后两次导入中若出现分区字段值重复,就会出现分区冲突。例如,第一次导入产生了 '2022-02-02' 分区,第二次导入中部分行的分区键值也是 '2022-02-02',导入过程中生成了新的 '2022-02-02' 分区,因此将会产生冲突。
为处理导入时可能存在的冲突,ByteHouse 提供了增量合并、覆盖分区、后续处理、忽略冲突四种加载模式,您可在创建导入任务时通过冲突解决方式参数设置:
ByteHouse 企业版支持以下数据源:
添加数据源前,请确保您已经具备以下必要权限的和信息:
在 ByteHouse 企业版中创建目标数据库、表,创建操作请参考新建数据库/表。不同数据源可导入的目标表引擎支持情况不同,说明如下:
数据源类型 | 支持的目标表引擎 |
|---|---|
对象存储 | HaMergeTree/HaUniqueMergeTree |
Hive | |
ClickHouse | HaMergeTree/HaUniqueMergeTree/MergeTree/ReplacingMergeTree/ReplicatedMergeTree |
创建数据源是为了建立 ByteHouse 与外部数据存储(如对象存储、Hive 等)的连接,为后续导入任务提供数据来源的访问能力。
登录 ByteHouse 企业版控制台,单击顶部数据导入,在右上角切换至目标集群,单击数据源,进入新建数据源界面,单击添加一个新的数据源 >。
在右侧新建数据源界面,配置数据源连接信息。不同数据源类型需配置的参数不同,详情请参见以下参数说明。
对象存储
参数项 | 配置说明 |
|---|---|
源类型 | 选择为 S3。 |
源名称 | 自定义源名称。 |
Endpoint | 配置为数据源的访问域名。 |
Region | 配置为数据源所在的区域。 |
访问密钥 | 配置为数据源的访问密钥(Access Key,AK)。 |
密钥 | 配置为数据源的密钥(Secret Key,SK)。 |
源对象存储为 MinIO | 如果您的数据源为 MinIO,请勾选该选项。 |
ClickHouse
参数项 | 配置说明 |
|---|---|
源类型 | 选择为 ClickHouse。 |
源名称 | 自定义源名称。 |
Clickhouse 主机 | 配置为您使用的 ClickHouse 服务的主机地址,如果有多个主机地址,请使用逗号( |
Clickhouse 用户名 | 配置为您使用的 ClickHouse 服务的用户名。 |
Clickhouse 密码 | 配置为您使用的 ClickHouse 服务的密码。 |
Hive
参数项 | 配置说明 |
|---|---|
源类型 | 选择为 Hive。 |
源名称 | 自定义源名称。 |
Hive Metastore Uri | 配置为 Hive Metastore 服务的访问地址,用于 ByteHouse 获取 Hive 表的元数据。示例: |
hdfs-site.xml 的内容 | 配置为 Hive 集群中实际使用的 |
配置完成后,单击确定,完成数据源的创建。
对象存储
源类型选择为 s3,数据源选择为您创建的目标数据源,配置数据源的详细信息,包括存储桶(Bucket)名称、源文件所在的路径、格式等。
如果您的数据源文件格式为 CSV 或 JSON,需为源文件配置对应的格式参数。
格式 | 配置项 | 配置说明 |
|---|---|---|
CSV | 字段分隔符 | 设置数据源文件中不同字段的分隔方式。 |
编码 | 设置数据源文件的编码格式。 | |
引用字符 | 设置数据源文件使用的包裹特殊字符时使用的符号。 | |
转义字符 | 设置数据源文件中取消“引用字符”原本含义使用的符号。 | |
跳过第一行 | 设置是否忽略数据源文件的第一行内容。 | |
第一行包含列标题 | 设置数据源文件是否包含表头。
| |
1 条记录跨多行 | 设置是否允许一条记录可以包含多行。 | |
忽略首尾空格 | 设置是否忽略源文件每个字段值首尾的空格。 | |
JSON | 1 条记录跨多行 | 设置是否允许一条记录可以包含多行。 |
允许评论 | 设置是否允许在文件中添加注释,用于兼容 JSON 文件中存在注释的情况。 |
ClickHouse
选择数据源类型为 clickhouse,数据源选择为您创建的目标数据源,ClickHouse 数据库选择为待导入的数据库。
Hive
选择数据源类型为 Hive,数据源选择为您创建的目标数据源。
说明
仅对象存储支持通过数据映射调整映射关系。
注意
注意,目前批式导入不支持表达式(expression)进行简单的数据转换,需要确保源数据和目标数据的数据格式是一致的。
创建完成后,ByteHouse 将跳转至开始任务界面,您可配置任务并开始导入,支持配置为立即执行任务和定时任务。定时任务支持设置为周期性或一次性任务,您可按需设置任务执行时间。
您也可在数据导入数据导入页签下,单击目标数据源名称,单击导入任务名称,进入任务详情页面,单击开始,进入开始任务界面。
S3 协议对象存储:选择待导入的文件,支持通过选择文件和输入表达式方式。
选择方式 | 配置说明 |
|---|---|
文件 | 从下拉列表中选择文件。该方式支持最多选择 10 个文件,单个文件的上限容量为 2 GB。 |
表达式 | 使用表达式选择文件,适用于需批量选择文件的场景。可使用如下通配符:
填写示例:
|
ClickHouse:需要输入待导入数据的 SELECT 语句。
Hive:需要设置数据源并行度,并输入待导入的 Hive 数据表名称。并行度默认为 1,并行度的值越高,导入速度越快。
说明
当前仅对象存储导入支持通过定时任务导入。
data?.json:筛选前缀为 data、后缀为 .json,且中间仅 1 位字符不同的文件。data[0-100].json:导入文件名称为 data0.json 到 data100.json 的文件。开启任务后,您可在任务详情页面,查看当前执行的导入任务,查看任务状态、执行时间、数据源信息、目标数据表、导入信息等。
冲突处理完成后,导入任务即会完成,任务进入“已停止”状态,即代表导入成功。
任务创建完成后,您可通过编辑任务调整任务配置信息,当前支持编辑任务名称、描述、目标表 Schema 配置、冲突解决方式。
您可基于已有任务克隆任务,并按需调整。克隆任务时,数据源类型不可修改。
如果您不再需要某任务,可删除该任务。