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

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

背景信息

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

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

使用限制
  • 当前仅支持 Parquet/Orc 格式的数据。
  • 当前仅支持对 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数据

  1. 创建 External Catalog。

    CREATE EXTERNAL CATALOG `las_catalog` PROPERTIES 
    aws.s3.access_key='AK', 
    aws.s3.endpoint='tos-s3-cn-beijing.ivolces.com', 
    aws.s3.secret_key='SK', 
    lf_metastore_ak_id='AK',
    lf_metastore_ak_secret='SK', 
    lf_metastore_catalog='LF_CATALOG_NAME', 
    lf_metastore_region='cn-beijing', 
    lf_metastore_url = 'thrift://las_formation_endpoint', type='lf';
    

    参数

    配置说明

    创建外部 catalog

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

    PROPERTIES 参数

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

    • aws.s3.access_keyaws.s3.secret_key:修改为存储服务的 AK/SK,以火山引擎 TOS 为例,获取方式请参见 AccessKey(密钥)管理
    • aws.s3.endpoint:修改为存储服务的 endpoint 地址,以火山引擎 TOS 为例,详情请参见地域和访问域名(Endpoint)中 S3 Endpoint 列的信息。
    • lf_metastore_ak_idlf_metastore_ak_secret:修改为外部 catalog 的 AK/SK,以火山引擎 LAS 为例,获取方式请参见 AccessKey(密钥)管理
    • lf_metastore_catalog:修改为外部 catalog 的名称,以火山引擎 LAS 为例,您可登录 LAS 控制台,在左侧导航栏中选择数据湖>元数据管理,查看并获取所需的 catalog 名称。
    • lf_metastore_region:修改为外部 catalog 的地域信息,以火山引擎 LAS 为例,详情请参见地域和可用区选型
    • lf_metastore_url:修改为外部 catalog 的 endpoint 地址,以火山引擎 LAS 为例,详情请参见 LAS 连接地址帮助文档
  2. 创建外表。

    CREATE TABLE t 
    Engine = CnchHive('thrift://host:port', 'hive_database_name', 'hive_table_name')
    SETTINGS cnch_vw_default ='your_vw';
    DESCRIBE TABLE t;
    

    参数说明如下:

    参数

    配置说明

    建表描述

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

    引擎参数(Engine)

    • thrift://host:port: Hive 外表的服务地址,以火山引擎 LAS 为例,详情请参见 LAS 连接地址帮助文档
    • hive_database_namehive_table_name:指定需关联的 Hive 外表,以火山引擎 LAS 为例,您可登录 LAS 控制台,在左侧导航栏中选择数据湖>元数据管理,单击已关联的 catalog 名称,查看并获取所需的数据库、表名称。

    设置参数(SETTINGS)

    cnch_vw_default:用于指定计算组。您可以在 ByteHouse 控制台的计算组页面查看可用的计算组列表并复制计算组 ID。如果该参数值未配置,将使用您在 ByteHouse 中配置的默认计算组。

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

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

CREATE TABLE t 
Engin = CnchHive('thrift://hive_metastore:port', 'hive_database_name', 'hive_table_name')
SETTINGS endpoint = 'thrift://lakeformation.las.cn-beijing.ivolces.com:48869',
         region = 'cn-beijing',
         ak_id = 'AKLTMjU3ZTYzOG********yMGE0ZmJiZjc2ODkxZWMxY2Q',
         ak_secret = 'WlRkak56Ump**********sT0RCaU9UQm1NREV4WkRWaU1HWQ==',
         cnch_vw_default ='your_vw';
DESCRIBE TABLE t;

参数

配置说明

建表描述

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

引擎参数(Engine)

  • thrift://hive_metastore:port:指定 Hive Metastore 服务地址,以火山引擎 LAS 为例,请参见 LAS 连接地址帮助文档
  • hive_database_namehive_table_name:指定 Hive 中的数据库,以火山引擎 LAS 为例,您可登录 LAS 控制台,在左侧导航栏中选择数据湖>元数据管理,单击已关联的 catalog 名称,查看并获取所需的数据库、表名称。

设置参数(SETTINGS)

  • endpoint:外部数据源的连接地址。以火山引擎 LAS 为例,获取方式请参见 LAS 连接地址帮助文档
  • region :外部数据源服务地域,如果服务商未提供则留空。以火山引擎 LAS 为例,获取方式请参见地域和可用区选型
  • ak_id/ak_secret:具有 Hive 访问权限(包含 Hive Metastore 以及对应的对象存储)的密钥,您可联系管理员获取。以火山引擎 LAS 为例,获取方式请参见 AccessKey(密钥)管理
  • cnch_vw_default:用于指定计算组。您可以在 ByteHouse 控制台的计算组页面查看可用的计算组列表并复制计算组 ID。如果该参数值未配置,将使用您在 ByteHouse 中配置的默认计算组。

查询外表

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'

写入外表

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);
    

通用参考:列类型映射

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