ByteHouse 云数仓版支持接入 Hive Catalog,您无需手动创建外部数据库、表,可通过 Hive Catalog 查询 Hive 中的数据。本文将介绍如何创建和使用 Hive Catalog。
ByteHouse 访问 Hive 集群时,需具备对 Hive 元数据存储(metastore)服务的访问权限。当前 ByteHouse 支持的元数据存储服务包括:
Hive Catalog 的创建方式随使用的元数据存储服务不同而有所差异,您可根据实际使用的服务选择对应的创建方式。此外,ByteHouse 也试验性地支持了AWS Glue Datacatalog,您也可按需创建。
请根据您的 Hive 使用的元数据存储类型获取以下权限和连接信息。
元数据存储服务类型 | 所需权限和连接信息 |
|---|---|
S3 兼容对象存储服务 |
|
LAS |
|
如果您需要创建 AWS Glue Catalog,请提前获取以下信息:
Hive 使用的元数据服务不同,对应的参数配置也会不同。本节将按元数据服务的类型,介绍 Hive Catalog 的创建方法。
数据在 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 描述 |
|
Catalog 参数 |
|
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 描述 |
|
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 描述 |
|
Catalog 参数 |
|
查看所有 Catalog。
SHOW EXTERNAL CATALOGS;
查看某个 Catalog 的 Schema 信息。
SHOW CREATE EXTERNAL CATALOG catalog_name;
假设您已经创建了一个名为 hive_s3 的外部 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,您可以直接将 Hive 外表和 ByteHouse 的 CnchMergeTree 表做 join。
SELECT * FROM hive_s3.hive_db.hive_table UNION ALL SELECT (1) FROM cnch.cnch_db.cnch_table;
列出 Catalog 中的数据库名。
SHOW DATABASES FROM catalog_name;
列出数据库中的表名。
SHOW TABLES FROM catalog_name.database_name;
获取表的创建语句。
SHOW CREATE TABLE catalog_name.database_name.table_name;
您可以使用如下 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;
您可通过 currentCatalog() 函数查询当前 Catalog。
SELECT currentCatalog();
您可通过以下语句查询 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。
DROP EXTERNAL CATALOG [IF EXISTS] catalog_name;
ByteHouse 云数仓版也支持通过 ByteHouse 云数仓版控制台创建和使用 Hive Catalog,详情请参见管理外部 Catalog。
除了通过 Hive Catalog 访问 Hive 数据外,ByteHouse 也支持通过外表方式查询、写入 Hive 数据,详情请参见 Hive 外表。