Hive 外表

    推荐使用 Hive Catalog 访问 Hive。

    Hive External Table of Doris 提供了 Doris 直接访问 Hive 外部表的能力,外部表省去了繁琐的数据导入工作,并借助 Doris 本身的 OLAP 的能力来解决 Hive 表的数据分析问题:

    1. 支持 Hive 数据源接入Doris
    2. 支持 Doris 与 Hive 数据源中的表联合查询,进行更加复杂的分析操作
    3. 支持 访问开启 kerberos 的 Hive 数据源
    4. 支持 访问数据存储在腾讯 CHDFS 上的 Hive 数据源

    本文档主要介绍该功能的使用方式和注意事项等。

    • FE:Frontend,Doris 的前端节点,负责元数据管理和请求接入
    • BE:Backend,Doris 的后端节点,负责查询执行和数据存储

    参数说明:

      • 列的顺序需要与 Hive 表一致
      • 必须包含 Hive 表中的全部列
      • Hive 表分区列无需指定,与普通列一样定义即可。
    • ENGINE 需要指定为 HIVE

    • PROPERTIES 属性:

      • :Hive Metastore 服务地址
      • database:挂载 Hive 对应的数据库名
      • table:挂载 Hive 对应的表名
      • hadoop.username: 访问hdfs用户名,当认证为simple时需要
      • dfs.nameservices:name service名称,与hdfs-site.xml保持一致
      • `dfs.ha.namenodes.[nameservice ID]:namenode的id列表,与hdfs-site.xml保持一致
      • dfs.namenode.rpc-address.[nameservice ID].[name node ID]:Name node的rpc地址,数量与namenode数量相同,与hdfs-site.xml保持一致
      • :HDFS客户端连接活跃namenode的java类,通常是”org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”
    • 访问开启kerberos的Hive数据源,需要为Hive外表额外配置如下 PROPERTIES 属性:

      • dfs.namenode.kerberos.principal:HDFS namenode 服务的Kerberos 主体
      • hadoop.kerberos.principal:设置 Doris 连接 HDFS 时使用的 Kerberos 主体
      • hadoop.kerberos.keytab:设置 keytab 本地文件路径
      • AWS_ACCESS_KEY: AWS账户的access key id.
      • : AWS账户的secret access key.
      • AWS_ENDPOINT: S3 endpoint. 例如:s3.us-east-1.amazonaws.com
      • AWS_REGION: AWS区域. 例如:us-east-1
    • 若要使 Doris 访问开启kerberos认证方式的hadoop集群,需要在 Doris 集群所有运行节点上部署 Kerberos 客户端 kinit,并配置 krb5.conf,填写KDC 服务信息等。
    • PROPERTIES 属性 hadoop.kerberos.keytab 的值需要指定 keytab 本地文件的绝对路径,并允许 Doris 进程访问该本地文件。
    • 关于HDFS集群的配置可以写入hdfs-site.xml文件中,该配置文件在fe和be的conf目录下,用户创建Hive表时,不需要再填写HDFS集群配置的相关信息。

    支持的 Hive 列类型与 Doris 对应关系如下表:

    注意:

    • Hive 表 Schema 变更不会自动同步,需要在 Doris 中重建 Hive 外表。
    • 当前 Hive 的存储格式仅支持 Text,Parquet 和 ORC 类型
    • 当前默认支持的 Hive 版本为 2.3.7、3.1.2,未在其他版本进行测试。后续后支持更多版本。

    完成在 Doris 中建立 Hive 外表后,除了无法使用 Doris 中的数据模型(rollup、预聚合、物化视图等)外,与普通的 Doris OLAP 表并无区别

    1. select * from t_hive where k1 > 1000 and k3 ='term' or k4 like '%doris';