You need to enable JavaScript to run this app.
文档中心
ByteHouse云数仓版

ByteHouse云数仓版

复制全文
下载 pdf
外表
Hive 外表
复制全文
下载 pdf
Hive 外表

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

背景信息

Hive 数据映射方式

对于 Hive 数据表,当前 ByteHouse 支持创建 Hive 外表、创建 Hive 外部数据库、创建 Hive 外部 Catalog 三种方式实现 ByteHouse 与 Hive 的数据映射。

数据映射方式

数据映射说明

创建 Hive 外部表

在表(Table)维度建立 ByteHouse 表到 Hive 表的映射。源表 schema 变更不会直接同步,如果有变更,需删除 ByteHouse 中的外表重新创建一个外表。

创建 Hive 外部数据库

在数据库(Database)维度建立 ByteHouse Database 到 Hive Database 的映射。建立库映射之后不需要再手动建立表映射,可自动同步数据库下的表映射,可以感知 Hive 表的新增和删除,源表 schema 变更可直接同步至 ByteHouse 中。

创建 Hive 外部 Catalog

在数据目录(Catalog)维度建立 ByteHouse Catalog 到 Hive Catalog 的映射。建立 Catalog 映射之后不需要再手动建立库、表映射,可自动同步 Catalog 下的库、表映射,可以感知 Hive 库、表的新增和删除,源表 schema 变更可直接同步至 ByteHouse 中。创建 Hive 外部 Catalog 的操作详情请参见 Hive Catalog。

费用说明

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

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

前提条件
  • ByteHouse 的 Hive 外部表支持两种数据读取场景:一是读取 Hive 本身存储的数据,二是读取存储在火山引擎 AI 数据湖服务(LAS)中的 Hive 数据。以下具体介绍这两种场景下创建 Hive 外表前,您需要获取的权限和信息:

    数据读取场景

    所需权限和连接信息

    Hive on Hive

    • 获取 Hive 使用的 S3 兼容对象存储服务的访问权限。
    • Hive 元数据存储的连接地址。
    • 具有 S3 兼容对象存储服务访问权限的密钥 Access Key ID(AK)/Secret Access Key(SK)。如果您使用的是火山引擎对象存储服务 TOS,获取方式请参见 Access Key(密钥)管理。
    • S3 兼容对象存储服务的 endpoint。如果您使用的是火山引擎对象存储服务 TOS,获取方式请参见地域和访问域名(Endpoint)。

    Hive on LAS

    • LAS Catalog 的访问权限,以及库表级别读写权限,配置详情请参见 LAS 权限管理。
    • 连接信息:
      • LAS 使用的 TOS 服务的 endpoint、访问密钥 Access Key ID(AK)/Secret Access Key(SK)。
      • LAS 使用的火山引擎对象存储服务 TOS 的物理数据中心所在地域,常用地域列表请参见地域及访问域名。
      • LAS 访问密钥 AK/SK,获取方式请参见 Access Key(密钥)管理。
      • LAS Catalog 名称。您可登录 LAS 控制台,在左侧导航栏中选择数据湖 > 元数据管理,查看并获取所需的 Catalog 名称。
      • LAS 的元数据存储服务地址,常用地域对应的地址请参见链接地址。
  • 如需向 Hive on LAS 外表中写入数据,请确认您使用的账号已开通 TOS 的 HNS(分层桶)功能。

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

创建 Hive 外部表

通过创建 ByteHouse 外部表,在表维度建立 ByteHouse 表到 Hive 表的映射。ByteHouse 的 Hive 外部表支持两种数据读取场景:一是读取 Hive 本身存储的数据,二是读取存储在火山引擎 AI 数据湖服务(LAS)中的 Hive 数据。以下具体介绍这两种场景下,ByteHouse 对接 Hive 外部表的建表语句:

Hive on Hive

以下 CREATE 命令执行成功后,您可以在 ByteHouse 的 demo_db 数据库下看到新创建的 hive_table 外表。

CREATE TABLE demo_db.hive_table
Engine = CnchHive('thrift://hive_thrift_server_ip:port', 'default', 'test_table')
SETTINGS 
    meta_type = 'hive',
    endpoint = 's3_endpoint',
    ak_id = 's3_ak',
    ak_secret = 's3_sk';

参数

配置说明

建表描述

demo_db.hive_table:在 ByteHouse 的指定数据库中创建 Hive 外表,支持自定义表名。
建表时,系统将自动退到并创建 Hive 表的列名和类型以及 Partition By key, Cluster By key 等信息。列默认建立 Nullable 类型, 列类型映射规则见下文的通用参考:列类型映射章节。

引擎参数(Engine)

  • 引擎类型固定为 CnchHive。
  • thrift://hive_thrift_server_ip:port:Hive Metastore 服务的连接地址,其中 <hive_thrift_server_ip> 为 Hive Thrift 服务器的 IP 地址,<port> 为端口号,您可参考您使用的 Hive 服务的官方文档获取连接地址信息。示例:thrift://101.xxx.xx.xxx:9083。
  • default:指定当前创建的外表映射到 Hive 中的源数据库名称。
  • test_table:指定当前创建的外表映射到 Hive 中的源表名称。

设置参数(SETTINGS)

  • meta_type:固定为 hive。
  • Hive 使用的 S3 兼容对象存储服务的信息:
    • endpoint:S3 兼容对象存储的 endpoint。
    • ak_id:S3 兼容对象存储的 Access Key ID。
    • ak_secret:S3 兼容对象存储的 Secret Access Key。

Hive on LAS

以下 CREATE 命令执行成功后,您可以在 ByteHouse 的 demo_db 数据库下看到新创建的 hive_las_table 外表。

CREATE TABLE demo_db.hive_las_table
Engine = CnchHive('thrift://lakeformation.las.region.ivolces.com:48869', 'default', 'test_table')
SETTINGS 
    meta_type = 'lf', 
    endpoint = 'tos-s3-region.ivolces.com', 
    ak_id = 'your_access_key_id', 
    ak_secret='your_secret_access_key', 
    lf_metastore_url = 'thrift://lakeformation.las.region.ivolces.com:48869', 
    lf_metastore_region = 'region', 
    lf_metastore_ak_id = 'xxx', 
    lf_metastore_ak_secret = 'xxx==', 
    lf_metastore_catalog = 'hive_catalog';

参数

配置说明

建表描述

demo_db.hive_las_table:在 ByteHouse 的指定数据库中创建 Hive 外表,支持自定义表名。
建表时,系统将自动退到并创建 Hive 表的列名和类型以及 Partition By key, Cluster By key 等信息。列默认建立 Nullable 类型, 列类型映射规则见下文的通用参考:列类型映射章节。

引擎参数(Engine)

  • 引擎类型固定为 CnchHive。
  • thrift://lakeformation.las.region.ivolces.com:48869:指定您使用的 LAS 所在地域的访问域名。您可根据您所在的地域,使用链接地址中 Endpoint 列的内容填写该参数。
  • default:指定当前创建的外表映射到 Hive 中的源数据库名称。
  • test_table:指定当前创建的外表映射到 Hive 中的源表名称。

设置参数(SETTINGS)

  • meta_type:固定为 lf。
  • LAS 使用的数据存储 TOS 信息:
  • LAS 的认证参数:
    • lf_metastore_url:指定您使用的 LAS 所在地域的访问域名。您可根据您所在的地域,使用链接地址中 Endpoint 列的内容填写该参数。
    • lf_metastore_region:LAS 所处的地域,获取方式请参见地域和可用区选型。
    • lf_metastore_ak_id:LAS 的 Access Key ID,获取方式请参见 AccessKey(密钥)管理。
    • lf_metastore_ak_secret:LAS 的 Secret Access Key,获取方式请参见 AccessKey(密钥)管理。
    • lf_metastore_catalog = 'hive_catalog':表示创建的外表映射到 LAS 中名为 hive_catalog 的数据目录。使用时请修改为Hive 中实际的数据目录的名称,以火山引擎 LAS 为例,您可登录 LAS 控制台,在左侧导航栏中选择数据湖 > 元数据管理,查看并获取所需的数据目录名称。

创建 Hive 外部数据库

通过创建 ByteHouse 外部数据库,在 Database 维度建立 ByteHouse Database 到 Hive Database 的映射。建立库映射之后不需要再手动建立表映射,可自动同步数据库下的表映射。
ByteHouse 的 Hive 外部表支持两种数据读取场景:一是读取 Hive 本身存储的数据,二是读取存储在火山引擎 AI 数据湖服务(LAS)中的 Hive 数据。以下具体介绍这两种场景下,ByteHouse 对接 Hive 外部表的建表语句:

Hive on Hive

以下 CREATE 命令执行成功后,ByteHouse 将新建名为 hive_db 的数据库,并可以在该数据库下查看相应的 Hive 外表。

DROP DATABASE IF EXISTS hive_db;

CREATE DATABASE hive_db
Engine = Hive('thrift://hive_thrift_server_ip:port', 'default')
SETTINGS 
    meta_type = 'hive',
    endpoint = 's3_endpoint',
    ak_id = 's3_ak',
    ak_secret = 's3_sk';

参数

配置说明

DROP 语句

(可选)以下命令用于确保在创建新数据库前,同名的旧数据库已被移除,以避免创建冲突。在生产环境中请谨慎使用此命令。

建库描述

hive_db:在 ByteHouse 中创建 Hive 外部数据库 ,支持自定义库名。

引擎参数(Engine)

  • 引擎类型固定为 Hive。
  • thrift://hive_thrift_server_ip:port:Hive 元数据存储服务(metastore)的连接地址,其中 <hive_thrift_server_ip> 为 Hive Thrift 服务器的 IP 地址,<port> 为端口号,您可参考您使用的 Hive 服务的官方文档获取连接地址信息。示例:thrift://101.xxx.xx.xxx:9083。
  • default:指定当前创建的外部数据库映射到 Hive 中的源数据库名称。

设置参数(SETTINGS)

  • meta_type:固定为 hive。
  • Hive 使用的 S3 兼容对象存储服务的信息:
    • endpoint:S3 兼容对象存储的 endpoint。
    • ak_id:S3 兼容对象存储的 Access Key ID。
    • ak_secret:S3 兼容对象存储的 Secret Access Key。

Hive on LAS

以下 CREATE 命令执行成功后,ByteHouse 将新建名为 hive_db_las 的数据库,并可以在该数据库下查看相应的 Hive 外表。

DROP DATABASE IF EXISTS hive_db_las;

CREATE DATABASE hive_db_las
Engine = Hive('thrift://lakeformation.las.region.ivolces.com:48869', 'default')
SETTINGS 
    meta_type = 'lf', 
    endpoint = 'tos-s3-region.ivolces.com', 
    ak_id = 'xxx', 
    ak_secret= 'xxx==', 
    lf_metastore_url = 'thrift://lakeformation.las.region.ivolces.com:48869', 
    lf_metastore_region = 'region', 
    lf_metastore_ak_id = 'your_access_key_id',
    lf_metastore_ak_secret = 'your_secret_access_key', 
    lf_metastore_catalog = 'hive_catalog';

参数

配置说明

DROP 语句

(可选)以下命令用于确保在创建新数据库前,同名的旧数据库已被移除,以避免创建冲突。在生产环境中请谨慎使用此命令。

建库描述

hive_db_las:在 ByteHouse 中创建 Hive 外部数据库 ,支持自定义库名。

引擎参数(Engine)

  • 引擎类型固定为 Hive。
  • thrift://lakeformation.las.region.ivolces.com:48869:指定您使用的 LAS 所在地域的访问域名。您可根据您所在的地域,使用链接地址中 Endpoint 列的内容填写该参数。
  • default:指定当前创建的外表映射到 Hive 中的源数据库名称。

设置参数(SETTINGS)

  • meta_type:固定为 lf。
  • LAS 使用的数据存储 TOS (火山引擎对象存储服务)信息:
  • LAS 的认证参数:
    • lf_metastore_url:指定您使用的 LAS 所在地域的访问域名。您可根据您所在的地域,使用链接地址中 Endpoint 列的内容填写该参数。
    • lf_metastore_region:LAS 所处的地域,获取方式请参见地域和可用区选型,请根据您所处的地域填写。
    • lf_metastore_ak_id:LAS 的 Access Key ID,获取方式请参见 AccessKey(密钥)管理。
    • lf_metastore_ak_secret:LAS 的 Secret Access Key,获取方式请参见 AccessKey(密钥)管理。
    • lf_metastore_catalog = 'hive_catalog':表示创建的外部数据库映射到 LAS 中名为 hive_catalog 的数据目录。使用时请修改为Hive 中实际的数据目录的名称,以火山引擎 LAS 为例,您可登录 LAS 控制台,在左侧导航栏中选择数据湖 > 元数据管理,查看并获取所需的数据目录名称。

查询外表

Hive 外表的查询和普通表的查询操作一致。指定数据库时,此处的数据库可以是仅创建 Hive 外部表所在的 ByteHouse 数据库,也可以是 Hive 外部数据库。例如:

SELECT * FROM demo_db.hive_las_table WHERE xxx;

查询外表数据时,ByteHouse 支持开启 BSP 模式,操作详情请参见开启 BSP 模式。

查询加速:开启缓存加载(Disk Cache)

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

    说明

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

写入外表

Hive 外表的写入和普通表的写入操作基本一致,支持通过 INSERT INTO 或 INSERT OVERWRITE 方式写入外部表。

注意

写入 Hive on LAS 外表前请确认您使用的账号拥有以下权限和功能:

  • 拥有火山引擎 AI 数据库服务 LAS 的 LAS Formation 访问权限;
  • 拥有火山引擎对象存储 TOS 的访问权限;
  • TOS 开通 HNS(分层桶)功能。

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

INSERT INTO

您可以使用基础的 INSERT INTO 语句写入数据。

# 方式 1
INSERT INTO database.table VALUES (val1, val2, ...), (val1, val2, ...), ...;

# 方式 2
INSERT INTO database.table SELECT [col1, col2, ... | *] FROM source_db.source_table;

参数

配置说明

数据库及表描述

database.table:指定需查询的数据库和表名称。此处的数据库可以是仅创建 Hive 外部表所在的 ByteHouse 数据库,也可以是 Hive 外部数据库。

写入参数描述

  • VALUES:填写需插入的数值,填写格式为 (val1, val2, ...), (val1, val2, ...),...,示例如下:

    INSERT INTO demo_db.hive_las_table VALUES (1, 'a', '2021-07-27'), (2, 'b', '2021-07-27')
    
  • SELECT:使用 SELECT 查询的结果写入数据,可按照 SELECT 语句的语法填写,示例如下:

    # SELECT 源表中的所有数据插入目标表
    INSERT INTO demo_db.hive_las_table SELECT * FROM example_table
    
    # SELECT 源表中的指定数据插入目标表
    INSERT INTO demo_db.hive_las_table SELECT s,d,n FROM example_table
    

INSERT OVERWRITE

该语句的功能是重写表。

# 方式 1
INSERT OVERWRITE database.table VALUES (val1, val2, ...), (val1, val2, ...), ...;

# 方式 2
INSERT OVERWRITE database.table SELECT [col1, col2, ... | *] FROM source_db.source_table;

参数

配置说明

数据库及表描述

database.table:指定需查询的数据库和表名称。此处的数据库可以是仅创建 Hive 外部表所在的 ByteHouse 数据库,也可以是 Hive 外部数据库。

写入参数描述

  • VALUES:填写需插入的数值,填写格式为 (val1, val2, ...), (val1, val2, ...),...,示例如下:

    INSERT OVERWRITE demo_db.hive_las_table VALUES (1, 'a', '2021-07-27'), (2, 'b', '2021-07-27')
    
  • SELECT:使用 SELECT 查询的结果写入数据,可按照 SELECT 语句的语法填写,示例如下:

    # SELECT 源表中的所有数据插入目标表
    INSERT OVERWRITE demo_db.hive_las_table SELECT * FROM example_table
    
    # SELECT 源表中的指定数据插入目标表
    INSERT OVERWRITE demo_db.hive_las_table SELECT s,d,n FROM example_table
    

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

开启 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

不同版本默认值不同

任务最大的重试次数。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 demo_db.hive_las_table 
SETTINGS bsp_mode = 1, distributed_max_parallel_size = 4;

通用参考:列类型映射

Hive 列类型

CnchHive 列类型

描述

INT/INTEGER

Nullable INT/INTEGER

无

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

无

最近更新时间:2026.03.24 14:28:39
这个页面对您有帮助吗?
有用
有用
无用
无用