ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

StarRocks 外部数据查询实战:使用 External Catalog 无侵入查询 Hive、Iceberg 等外部数据源

StarRocks 外部数据查询实战:使用 External Catalog 无侵入查询 Hive、Iceberg 等外部数据源 StarRocks 外部数据查询实战使用 External Catalog 无侵入查询 Hive、Iceberg 等外部数据源【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks本篇指南围绕 StarRocks 的External Catalog外部目录机制系统讲解如何在不做数据迁移、不手工建表的前提下直接查询存储在 Apache Hive™、Apache Iceberg、Apache Hudi、Delta Lake、JDBC 等外部数据源中的数据。读完本文你将掌握从连接集群、查看目录、切换库、到执行SELECT查询与跨目录联邦查询的完整实操路径并能理解其底层执行原理与权限约束。前置条件先有一个外部目录外部目录External Catalog是建立在外部数据源之上的逻辑映射相当于一条指向外部元数据服务Metastore的通道。在开始查询外部数据之前你必须先基于目标外部数据源创建对应的外部目录否则后续所有查询语句都无法解析出外部库表。StarRocks 自 v2.3 起支持 Catalog 特性目前提供两类目录内部目录Internal Catalog管理 StarRocks 自身存储的内部数据每个集群只有一个名为default_catalog不可改名也不可新建详见 Default catalog。外部目录External Catalog连接外部元数据服务让 StarRocks 直接访问外部数据源。支持的目录类型包括Hive catalog查询 Hive 数据Iceberg catalog查询 Iceberg 数据Hudi catalog查询 Hudi 数据Delta Lake catalog查询 Delta Lake 数据JDBC catalog查询 JDBC 兼容数据源Elasticsearch catalogv3.1 起支持查询 Elasticsearch 数据Paimon catalogv3.1 起支持查询 Paimon 数据Fluss catalog查询 Fluss 数据Unified catalogv3.2 起支持将 Hive、Iceberg、Hudi、Delta Lake 数据源统一为一个目录Benchmark catalog查询 TPC-H、TPC-DS、SSB 场景的流式生成数据集。完整的目录类型清单与基本概念可参考 Catalog Overview。外部数据查询的执行模型在进入具体 SQL 之前先理解 StarRocks 查询外部数据时与外部数据源交互的两个关键组件参见 Catalog OverviewMetastore 服务由 FEFrontend前端节点使用用于获取外部数据源的元数据。FE 基于这些元数据生成查询执行计划。数据存储系统用于存放外部数据文件既可以是分布式文件系统也可以是对象存储文件格式多种多样。FE 将执行计划下发给所有 BEBackend或 CNCompute Node后BE/CN 并行扫描目标外部数据、执行计算并返回查询结果。也就是说查询外部数据的核心思想是元数据由 FE 走 Metastore 解析数据文件由 BE/CN 并行直扫整个过程零数据搬迁这也是外部目录查询无需预先建表的原因。查询外部数据标准操作流程整体流程共 5 步连接集群 →可选查看目录 →可选查看外部库 →可选切换库 → 执行查询。以下每一步都给出可直接复制运行的语句。第 1 步连接 StarRocks 集群如果使用MySQL 客户端连接 StarRocks 集群连接成功后默认位于default_catalog。如果使用JDBC连接可以在连接时直接指定default_catalog.db_name从而直接进入默认目录下的目标数据库。第 2 步可选查看当前集群中的全部目录执行SHOW CATALOGS可以列出当前集群的所有目录包括内部目录和外部目录从而确认要使用的外部目录是否已创建SHOW CATALOGS;该语句的完整语法为SHOW CATALOGS [LIKE pattern]其中LIKE子句用于按名称模式匹配目录%匹配任意多个字符、_匹配单个字符详见 SHOW CATALOGS。典型的输出如下SHOW CATALOGS\G *************************** 1. row *************************** Catalog: default_catalog Type: Internal Comment: An internal catalog contains this clusters self-managed tables. *************************** 2. row *************************** Catalog: hudi_catalog Type: Hudi Comment: NULL *************************** 3. row *************************** Catalog: iceberg_catalog Type: Iceberg Comment: NULL输出字段说明字段说明Catalog目录名称Type目录类型。default_catalog返回Internal外部目录返回对应类型如Hive、Hudi、IcebergComment目录注释。外部目录不支持注释因此返回NULLdefault_catalog默认注释为An internal catalog contains this clusters self-managed tables.权限提示SHOW CATALOGS只会把用户拥有USAGE权限的外部目录返回给该用户。如果用户或角色对任何外部目录都没有该权限此命令将只返回default_catalog。第 3 步可选查看外部目录中的数据库执行SHOW DATABASES FROM catalog_name;查看指定外部目录下的所有数据库SHOW DATABASES FROM catalog_name;该语句的完整语法为SHOW DATABASES [FROM catalog_name]详见 SHOW DATABASES不指定catalog_name或指定为内部目录default_catalog时查看的是 StarRocks 集群自身的数据库指定为外部目录名称时查看的是对应外部数据源中的数据库。例如通过外部目录hive1查看 Hive 集群中的数据库SHOW DATABASES FROM hive1; ----------- | Database | ----------- | hive_db1 | | hive_db2 | | hive_db3 | -----------第 4 步可选进入外部目录中的目标数据库使用USE语句一步切换到目标外部目录及其数据库USE catalog_name.db_name;USE的完整语法为USE [catalog_name.]db_name详见 USE不指定catalog_name时默认使用default_catalog中的数据库使用外部目录中的数据库时必须指定catalog_name需要在不同目录之间切换活动数据库时也必须指定catalog_name。此外你还可以使用 SET CATALOG 语句v3.0 起支持在当前会话中切换到指定目录再配合USE db_name指定活动数据库SET CATALOG catalog_name; USE db_name;权限提示对于新部署的 StarRocks v3.1 集群执行SET CATALOG切换到目标外部目录时必须对该目录拥有USAGE权限可通过 GRANT 授予若是从更早版本升级而来的 v3.1 集群则可沿用继承的权限执行SET CATALOG。若指定的目录不存在语句会抛出异常。第 5 步查询外部数据完成上面的切换后直接使用SELECT查询外部表SELECT * FROM table_name;如果前面没有指定外部目录和数据库可以在一条SELECT语句中直接用三级全限定名指定格式为catalog_name.db_name.table_nameSELECT * FROM catalog_name.db_name.table_name;SELECT的更多用法过滤、聚合、连接、子查询等可参考 SELECT。完整示例通过 Hive 目录查询 Hive 表假设你已创建了一个名为hive1的 Hive 目录希望用它查询 Apache Hive™ 集群中hive_db.hive_table的数据可以任选以下两种方式之一。方式一先切换目录与库再查询USE hive1.hive_db; SELECT * FROM hive_table limit 1;方式二在一条 SELECT 中直接使用全限定名SELECT * FROM hive1.hive_db.hive_table limit 1;两种方式效果等价方式一适合在同一外部库下连续执行多条查询的场景方式二适合临时性、一次性的跨目录访问。进阶跨目录联邦查询除了在单个外部目录内查询你还可以在当前会话所在目录中通过catalog_name.database_name或catalog_name.database_name.table_name格式指定数据实现跨目录联邦查询详见 Catalog Overview当前会话位于default_catalog.olap_db查询hive_catalog.hive_db中的hive_tableSELECT * FROM hive_catalog.hive_db.hive_table;当前会话位于hive_catalog.hive_db查询default_catalog中的olap_tableSELECT * FROM default_catalog.olap_db.olap_table;当前会话位于hive_catalog.hive_db对 Hive 表与内部表做 JOIN 查询SELECT * FROM hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id o.id;当前会话位于其他目录用全限定名对两张表做 JOINSELECT * FROM hive_catalog.hive_db.hive_table h JOIN default_catalog.olap_db.olap_table o WHERE h.id o.id;跨目录查询让外部湖仓数据 StarRocks 内部表能够在一个 SQL 中完成关联分析是联邦分析场景的核心能力。常见排查要点查询报 unknown host查询 Hive 数据时需将 Hive Metastore 节点、HDFS 集群节点的主机名与 IP 映射加入各 FE、BE/CN 所在机器的/etc/hosts否则 FE 无法访问 Metastore、BE/CN 无法访问存储。查不到外部目录确认当前用户对该外部目录拥有USAGE权限且目录确实已创建成功。切换目录失败确认目标目录存在若是 v3.1 新部署集群确认已通过GRANT授予USAGE权限。需要验证目录/库/表是否存在可用SHOW CATALOGS、SHOW DATABASES FROM catalog_name逐级排查或使用DESC[RIBE] catalog_name.database_name.table_name查看外部表结构参见 Hive catalog。参考文档Catalog Overview目录总览Default catalog默认目录与内部数据查询Hive catalogHive 目录创建与使用SHOW CATALOGSSET CATALOGSHOW DATABASESUSESELECT【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表