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

ByteHouse云数仓版

复制全文
外部 Catalog
Hive Catalog
复制全文
Hive Catalog

ByteHouse 云数仓版支持接入 Hive Catalog,您无需手动创建外部数据库、表,可通过 Hive Catalog 查询 Hive 中的数据。本文将介绍如何创建和使用 Hive Catalog。

背景信息

ByteHouse 访问 Hive 集群时,需具备对 Hive 元数据存储(metastore)服务的访问权限。当前 ByteHouse 支持的元数据存储服务包括:

  • 标准的 Hive metastore
  • 火山引擎 AI 数据湖服务 LAS 的 LAS Formation

Hive Catalog 的创建方式随使用的元数据存储服务不同而有所差异,您可根据实际使用的服务选择对应的创建方式。此外,ByteHouse 也试验性地支持了AWS Glue Datacatalog,您也可按需创建。

前提条件

请根据您的 Hive 使用的元数据存储类型获取以下权限和连接信息。

元数据存储服务类型

所需权限和连接信息

S3 兼容对象存储服务

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

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 的元数据存储服务地址,常用地域对应的地址请参见链接地址

如果您需要创建 AWS Glue Catalog,请提前获取以下信息:

  • Glue 服务端点。
  • Glue 所在的地域。
  • Glue Catalog ID,该值为一个 12 位数字的 AWS 账号名,具体可以参考 AWS Account ID 文档
  • 具有 Glue 访问权限的密钥。
  • AWS S3 存储桶所属地域。
  • AWS S3 服务端点。
  • 具有 AWS S3 访问权限的密钥 AK/SK。

创建 Hive Catalog

Hive 使用的元数据服务不同,对应的参数配置也会不同。本节将按元数据服务的类型,介绍 Hive Catalog 的创建方法。

S3

数据在 S3 兼容对象存储上存储时,可使用以下命令:

CREATE EXTERNAL CATALOG `{catalogName}`
properties
  type='hive',
  metastore_type='hive',
  hive_metastore_uri = 'thrift://hive_thrift_server_ip:port',
  endpoint = 's3_endpoint',
  ak_id = 's3_ak',
  ak_secret = 's3_sk';

参数

配置说明

创建 Catalog 描述

{catalogName} 替换为您自定义的 Catalog 名称。

Catalog 参数

  • type='hive':固定为 hive。
  • metastore_type:固定为 hive。
  • hive_metastore_uri:Hive Metastore 服务的连接地址,填写格式及示例如下:
    • 格式:thrift://hive_thrift_server_ip:port,其中 <hive_thrift_server_ip> 为 Hive Thrift 服务器的 IP 地址,<port> 为端口号,您可参考您使用的 Hive 服务的官方文档获取连接地址信息。
    • 示例:thrift://101.1xx.xx.xxx:9083
  • endpoint:外部数据源的连接地址,例如,如果您使用的是火山引擎对象存储服务 TOS,可登录 TOS 控制台,通过桶列表 > 桶名称 > 概览 > 访问域名路径,查看所需 endpoint,如下图所示,endpoint 为tos-s3-cn-beijing.volces.com。常用 endpoint 列表请参见地域和访问域名(Endpoint)
    Image
  • ak_id/ak_secrent:具有 S3 访问权限的密钥。如果您使用的是火山引擎对象存储服务 TOS,获取方式请参见 Access Key(密钥)管理

LAS

CREATE EXTERNAL CATALOG `{your_catalog_name}` 
PROPERTIES 
type='hive',
metastore_type='lf',
endpoint='tos-s3-{REGION}.ivolces.com',
ak_id='xxx',
ak_secret='xxx==',
lf_metastore_ak_id='xxx',
lf_metastore_ak_secret='xxx==',
lf_metastore_catalog='catalogName',
lf_metastore_region='region',
lf_metastore_url = 'thrift://lf_thrift_server_ip:port';

参数

配置说明

创建 Catalog 描述

{your_catalog_name} 替换为您自定义的 Catalog 名称。

Catalog 参数

  • type='hive':固定为 hive。
  • metastore_type='lf':固定为 lf。
  • endpoint:LAS 使用的火山引擎对象存储服务 TOS 的 endpoint。您可登录 TOS 控制台,通过桶列表 > 桶名称 > 概览 > 访问域名路径,查看所需 endpoint,如下图所示,endpoint 为tos-s3-cn-beijing.volces.com。常用 endpoint 列表请参见地域和访问域名(Endpoint)
    Image
  • ak_id/ak_secrent:配置为具有访问权限的 TOS 密钥,获取方式请参见 Access Key(密钥)管理
  • lf_metastore_ak_id/lf_metastore_ak_secret:配置为具有访问权限的 LAS 密钥,获取方式请参见 Access Key(密钥)管理
  • lf_metastore_catalog:请在此处填写您希望连接的、在 LAS 中已存在的 Catalog 的名称,以便 ByteHouse 能够定位到正确的外部数据目录。您可登录 LAS 控制台,在左侧导航栏中,单击数据库 > 元数据管理,查看 Catalog 名称。
  • lf_metastore_region:配置为 LAS 使用的 TOS 存储服务的物理数据中心所在地域,常用地域名请参见地域及访问域名
  • lf_metastore_url:配置为 LAS 的元数据存储服务地址,填写为 LAS 所在可用地域的连接地址thrift://lakeformation.las.{REGION}.ivolces.com:48869。常用地域对应的地址如下:
    • 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
    • ap-southeast-1:thrift://lakeformation.las.ap-southeast-1.ivolces.com:48869

AWS Glue Catalog

ByteHouse 也试验性地支持了AWS Glue Datacatalog。

CREATE EXTERNAL CATALOG `{your_glue_catalog_name}` 
PROPERTIES
type='glue',
    aws_glue_endpoint = 'glue_endpoint',
    aws_glue_region='glue_region',
    aws_glue_catalog_id='glue_catalog_id',
    aws_glue_ak_id = 'glue_ak',
    aws_glue_ak_secret = 'glue_sk',
    region= 's3_region',
    endpoint = 's3_endpoint',
    ak_id = 's3_ak',
    ak_secret = 's3_sk';

参数

配置说明

创建 Catalog 描述

{your_glue_catalog_name} 替换为您自定义的 Catalog 名称。

Catalog 参数

  • type='glue':固定为 glue。
  • aws_glue_endpoint:Glue 服务端点。
  • aws_glue_region:Glue 所在的地域。
  • aws_glue_catalog_id:Glue Catalog ID,该值为一个 12 位数字的 AWS 账号名,具体可以参考 AWS Account ID 文档
  • aws.glue.ak_id/aws.glue.ak_secret:具有 Glue 访问权限的密钥。
  • region:S3 存储桶所属地域。
  • endpoint:S3 服务端点。
  • ak_id/ak_secret:具有 S3 访问权限的密钥。

查看 Hive Catalog

查看所有 Catalog。

SHOW EXTERNAL CATALOGS;

查看某个 Catalog 的 Schema 信息。

SHOW CREATE EXTERNAL CATALOG catalog_name;

使用 Hive Catalog

假设您已经创建了一个名为 hive_s3 的外部 Catalog。

查询 Hive Catalog 中的表

用户可以通过 catalog_name.db_name.table_name 这种三段式命名方式直接访问 Hive Catalog 中的表,例如

SELECT * FROM hive_s3.hive_db_name.hive_table_name;

ByteHouse 原生的 CnchMergeTree 表也可以用如下 SQL 访问。其中,cnch(cloud-native-clickhouse的缩写)被用作了 Bytehouse CDW 默认 Catalog 的名字。

SELECT * FROM cnch.cnch_db_name.cnch_db_name;
-- 等同于 SELECT * FROM cnch_db_name.cnch_db_name; 

跨 Catalog 查询

利用外部 Catalog,您可以直接将 Hive 外表和 ByteHouse 的 CnchMergeTree 表做 join。

SELECT * FROM hive_s3.hive_db.hive_table 
UNION ALL 
SELECT (1) FROM cnch.cnch_db.cnch_table;

列出 Hive Catalog 中的数据库、表

列出 Catalog 中的数据库名。

SHOW DATABASES FROM catalog_name;

列出数据库中的表名。

SHOW TABLES FROM catalog_name.database_name;

获取表的创建语句。

SHOW CREATE TABLE catalog_name.database_name.table_name;

切换 Catalog

您可以使用如下 SQL 来改变默认的 Catalog:

SWITCH CATALOG catalog_name;

此时再运行查询语句,ByteHouse 会从 Hive Catalog 下的指定的数据库、表中读取数据。

SELECT * FROM hive_db.hive_table;

如果需切换回 ByteHouse 默认的 Catalog,您可以使用以下任意一条命令:

# 方式 1
SWITCH CATALOG default;

# 方式 2
SWITCH CATALOG cnch;

您也可以使用以下命令,直接将默认的数据库切换到 Hive Catalog 下的指定数据库:

USE hive_s3.hive_db;

如需切换回 ByteHouse 内表,可使用以下命令:

USE cnch.cnch_database_name;

查询当前使用的 Catalog

您可通过 currentCatalog() 函数查询当前 Catalog。

SELECT currentCatalog();

查询 Hive Catalog 元信息

您可通过以下语句查询 Hive Catalog 中的数据库、表、分区的元信息,包括数据库名称、存储路径、属性等信息。

  • 查询 Hive Catalog 中数据库的元信息

    SELECT * FROM catalog_name.database_name.__properties__
    
  • 查询 Hive Catalog 中数据库表的元信息

    SELECT * FROM catalog_name.database_name.table_name$metadata$properties
    
  • 查询 Hive Catalog 中数据表的分区的元信息

    SELECT * FROM {catalog_name.}database_name.table_name$metadata$partitions
    

删除 Hive Catalog

您可以使用如下命令删除 Hive Catalog。

DROP EXTERNAL CATALOG [IF EXISTS] catalog_name;

相关文档

通过 ByteHouse 云数仓版控制台使用 Hive Catalog

ByteHouse 云数仓版也支持通过 ByteHouse 云数仓版控制台创建和使用 Hive Catalog,详情请参见管理外部 Catalog

使用 Hive 外表

除了通过 Hive Catalog 访问 Hive 数据外,ByteHouse 也支持通过外表方式查询、写入 Hive 数据,详情请参见 Hive 外表

最近更新时间:2026.01.08 15:44:03
这个页面对您有帮助吗?
有用
有用
无用
无用