You need to enable JavaScript to run this app.
导航
Hive 外表
最近更新时间:2025.07.01 15:11:05首次发布时间:2024.11.06 13:58:49
我的收藏
有用
有用
无用
无用

CnchHive 为 Bytehouse 团队提供的一种表引擎,支持使用外表的方式进行联邦查询,用户无需通过数据导入,可以直接查询 Hive 外表中的数据,提升数据处理的灵活性和方便性。本文将介绍如何创建、查询和写入外表。

背景信息

外表的功能旨在提供除 ByteHouse 内部表以外的其他数据的处理能力。通过一条简单的 DDL 语句,即可在 ByteHouse 上创建一张外表,建立 ByteHouse 表与外部数据源的关联。

  • 外表在 ByteHouse 侧只会产生计算费用,遵循 ByteHouse 计算资源计费规则,详情请参见计算资源
  • 使用外表功能时,外表的数据不会复制一份存储在 ByteHouse 上并产生存储费用。存储费用请关注外部数据源存储侧计费规则。
  • 使用 ByteHouse 外表访问外部数据源时,外部数据源可能会产生计算、访问、数据传输等费用,具体以外部数据源计费方式为准,请关注相应产品的说明。

使用限制
  • 当前仅支持 Parquet/Orc/CSV/Text 格式的数据。
  • 当前仅支持对 Hive 外表的 select、insert 操作,暂不支持 alert;且当前仅支持 Hive 表,不支持视图 View。
  • 当外部数据源的 Hive 表 schema 变更时,当前不支持自动同步至 ByteHouse 外表,您需要在 ByteHouse 中重新创建 Hive 外表。

前提条件

在开始操作前,请确保您已经具备以下必要的权限和信息:

条件细分

说明

数据访问权限

需获取 Hive 外表元数据及其使用的 S3 存储服务的访问权限。

访问密钥

需获取 Hive 外表元数据及其使用的 S3 存储服务的访问密钥。

地域及 endpoint 信息

需获取 Hive 外表元数据及其使用的 S3 存储服务的地域及 endpoint 信息。

Hive 外表元数据信息

需获取 Hive 外表的 catalog、数据库、表的名称。

创建外表

通过创建 ByteHouse 外表,把 Hive 外表数据的描述引入到 ByteHouse,即可实现对 Hive 数据的处理。
创建 Hive 外表时,您需指定关联的 Hive 外表的库表信息,当前支持通过以下两种方式设置:

方式一:(推荐)创建外部 Catalog 及外表

此方式引入了外部 Catalog,需要先创建一个外部 Catalog 并保存好对应连接参数,创建外表时只需指定引擎及计算组信息,后续访问外表时,可直接通过三段式 catalog.db.table 访问。
本章节创建的外部 Catalog 及外表使用火山引擎 AI 数据湖服务 LAS(Lake AI Service)为例,存储服务使用火山引擎对象存储 TOS( Torch Object Storage)为例。您可根据实际使用的存储介质和 Hive 外表信息替换示例中的参数。

说明

更多关于在 ByteHouse 中通过外表访问 LAS Catalog 的介绍请参见最佳实践:集成LAS Catalog数据

创建 External Catalog。系统将自动映射其中的表。

CREATE EXTERNAL CATALOG `las_catalog` PROPERTIES 
    aws.s3.endpoint='tos-s3-{REGION}.ivolces.com', 
    aws.s3.access_key='AKLTMjNkMDRlMXXXXXXXXXXWUzZ******', 
    aws.s3.secret_key='WVXXXXXXXXXXXXXXXXXX******', 
    lf_metastore_ak_id='AKLTMjNkMDRlMXXXXXXXXXXWUzZ******',
    lf_metastore_ak_secret='WVXXXXXXXXXXXXXXXXXX******', 
    lf_metastore_catalog='benchmark', 
    lf_metastore_region='{REGION}', 
    lf_metastore_url = 'thrift://lakeformation.las.{REGION}.ivolces.com:48869',
    type='lf';

参数

配置说明

创建外部 catalog

自定义 ByteHouse 中显示的外部 catalog 名称。

PROPERTIES 参数

定义了数据存储和元数据的连接信息。

  • aws.s3.endpoint:修改为存储服务的 endpoint 地址,以火山引擎 TOS 为例,详情请参见地域和访问域名(Endpoint)中 S3 Endpoint 列的信息。
  • aws.s3.access_keyaws.s3.secret_key:修改为存储服务的 Access Key ID/Secret Access Key,以火山引擎 TOS 为例,获取方式请参见 AccessKey(密钥)管理
  • lf_metastore_ak_idlf_metastore_ak_secret:修改为外部 catalog 的 Access Key ID/Secret Access Key,以火山引擎 LAS 为例,获取方式请参见 AccessKey(密钥)管理
  • lf_metastore_catalog:表示创建的外表映射到 LAS 中名为 benchmark 的 catalog。使用时请修改为外部 catalog 的名称,以火山引擎 LAS 为例,您可登录 LAS 控制台,在左侧导航栏中选择数据湖 > 元数据管理,查看并获取所需的 catalog 名称。
  • lf_metastore_region:修改为外部 catalog 的地域信息,以火山引擎 LAS 为例,详情请参见地域和可用区选型
  • lf_metastore_url:指定 LAS 所在可用地域的连接地址,您可根据您使用的地域,参考以下内容进行修改参考:
    • cn-beijing:thrift://lakeformation.las.cn-beijing.ivolces.com:48869
    • cn-shanghai:thrift://lakeformation.las.cn-shanghai.ivolces.com:48869
    • cn-guangzhou:thrift://lakeformation.las.cn-guangzhou.ivolces.com:48869
  • type:固定为 lf。

方式二:在通用建表 DDL 中直接指定 Hive 外表

本章节的示例使用 TOS 为存储介质,在通用建表 DDL 中直接指定 LAS 作为 Hive 外表,您可根据实际使用的存储服务和 Hive 外表信息替换示例中的参数。

CREATE DATABASE IF NOT EXISTS ext

CREATE TABLE ext.las
ENGINE = CnchHive('thrift://lakeformation.las.{REGION}.ivolces.com:48869', 'ssb100parquet', 'lineorder_flat')
SETTINGS 
    meta_type = 'lf',
    lf_metastore_catalog = 'benchmark', 
    lf_metastore_region = '{REGION}', 
    lf_metastore_ak_id = 'AKLTMjNkMDRlMXXXXXXXXXXWUzZ******',
    lf_metastore_ak_secret='WVXXXXXXXXXXXXXXXXXX******', 
    lf_metastore_url = 'thrift://lakeformation.las.{REGION}.ivolces.com:48869',
    endpoint = 'tos-s3-{REGION}.ivolces.com', 
    ak_id = 'AKLTMjNkMDRlMXXXXXXXXXXWUz******', 
    ak_secret='WVXXXXXXXXXXXXXXXXXX******';

参数

配置说明

建表描述

Hive 表的列名和类型以及 Partition By key, Cluster By key 等信息将会在建表的时候自动推导建立。列默认建立 Nullable 类型, 列类型映射规则见下文的通用参考:列类型映射章节。

引擎参数(Engine)

  • thrift://lakeformation.las.{REGION}.ivolces.com:48869:指定 LAS 所在可用地域的连接地址,您可根据您使用的地域,参考以下内容进行修改参考:
    • cn-beijing:thrift://lakeformation.las.cn-beijing.ivolces.com:48869
    • cn-shanghai:thrift://lakeformation.las.cn-shanghai.ivolces.com:48869
    • cn-guangzhou:thrift://lakeformation.las.cn-guangzhou.ivolces.com:48869
  • ssb100parquet, lineorder_flat:表示创建的外表映射到 LAS 中的 ssb100parquet.lineorder_flat 表。

设置参数(SETTINGS)

  • meta_type:固定为 lf,标识创建的外表是映射到 LAS 的 Catalog 中。
  • LAS 的认证参数:
    • lf_metastore_catalog = 'benchmark':表示创建的外表映射到 LAS 中名为 benchmark 的 catalog。使用时请修改为外部 catalog 的名称,以火山引擎 LAS 为例,您可登录 LAS 控制台,在左侧导航栏中选择数据湖 > 元数据管理,查看并获取所需的 catalog 名称。
    • lf_metastore_region:LAS 所处的地域,获取方式请参见地域和可用区选型
    • lf_metastore_ak_id:LAS 的 Access Key ID,获取方式请参见 AccessKey(密钥)管理
    • lf_metastore_ak_secret:LAS 的 Secret Access Key,获取方式请参见 AccessKey(密钥)管理
  • LAS 的数据存储 TOS 信息:

查询外表

Hive 外表的查询和普通表的查询操作基本一致。例如:

  • Catalog 方式

    select * from  las_catalog.db.table where xxx;
    
  • 通用方式

    select * from  t where xxx;
    

查询加速:开启 Disk Cache

  1. 申请开启 Disk Cache 功能。
    ByteHouse 为您提供硬盘缓存能力,可将部分数据缓存在您的本地硬盘中,以提高查询效率。此功能默认关闭,如果您希望使用此功能,可联系技术支持人员开启功能。
  2. 功能开启后,在查询外表数据时,默认会使用硬盘缓存功能。

    说明

    如果您希望某次查询时关闭硬盘缓存,可在创建外表时设置 SETTINGS 参数,disk_cache_mode = 'SKIP_DISK_CACHE'

开启 BSP 模式

BSP 模式可以进行任务级别的容错和更细粒度的调度,当 query 运行中遇到错误时,可以自动重试当前的任务,而不是从头进行重试,减少重试成本。同时,当 query 需要的内存巨大,甚至大于单机的内存时,可以通过增加并行度来减少单位时间内内存的占用。
您可以在查询时指定 settings 参数启用 BSP 模式,settings 参数说明如下:

参数名称

类型

默认值

说明

bsp_mode

Bool

0(关闭)

设置为 1 表示启用 BSP 模式。启用 BSP 模式后,查询会分阶段执行。阶段之间会使用 shuffle 连接。在失败时会进行任务级别的重试。

distributed_max_parallel_size

UInt64

等于 worker 数量

当单个查询占用内存较大时,通过调大此参数可以增加算子的并行度,减少单个并行度处理数据的数量,减少单位时间内存使用量。必须在启用 bsp_mode 时,distributed_max_parallel_size 的值才能超出 worker 的数量。建议设置为 worker 个数的倍数。

bsp_max_retry_num

UInt64

3

任务最大的重试次数。ByteHouse 从 2.0.4 版本开始支持设置 bsp_max_retry_num 参数。不同版本的默认值如下:
ByteHouse 2.0.4/2.1 版本中以 query 粒度记,默认为 5 次。ByteHouse 2.2 版本中以 segment 粒度记,默认为 3 次。
您可通过 ByteHouse 控制台>租户管理>基本信息路径,查看当前 ByteHouse 的版本。

示例:

select * from  t SETTINGS bsp_mode = 1, distributed_max_parallel_size = 4;

写入外表

Hive 外表的写入和普通表的写入操作基本一致。以创建 LAS Catalog 后,向 LAS 外表写入数据为例:

注意

写入 LAS Formation 表前请确认:

  • 拥有 LAS Formation 访问权限
  • 拥有 TOS 访问权限
  • TOS 开通 HNS(分层桶)功能

目前 CDW 不支持未开通的 HNS 的 TOS Bucket 写入,更多关于 TOS Bucket 的 HNS 的介绍请参见 TOS 帮助文档

  • Catalog 方式

    insert into/overwrite las_catalog.db.table values (xxx);
    insert into/overwrite las_catalog.db.table select * from xxx settings enable_optimizer =1;
    
  • 通用方式

    insert into/overwrite db.t values (xxx);
    

向外表写入数据时,ByteHouse 也支持开启 BSP 模式,操作详情请参见开启 BSP 模式

通用参考:列类型映射

Hive 列类型

CnchHive 列类型

描述

INT/INTERGER

Nullable INT/INTERGER

BIGINT

Nullable BIGINT

TIMESTAMP

Nullable DateTime

STRING

Nullable String

VARCHAR

Nullable FixedString

内部转换为 FixedString

CHAR

Nullable FixedString

内部转换为 FixedString

DOUBLE

Nullable DOUBLE

FLOAT

Nullable FLOAT

DECIMAL

Nullable DECIMAL

MAP

Nullable Map

ARRAY

Nullable Array