You need to enable JavaScript to run this app.
ByteHouse云数仓版

ByteHouse云数仓版

复制全文
外表
Hive 外表
复制全文
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 INTOINSERT 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
这个页面对您有帮助吗?
有用
有用
无用
无用