Hudi中的数据建外表后hive查询为空

介绍

Apache Hudi是一个在Apache Hadoop上构建的开源库,它提供了大规模数据更新和增量数据处理的能力。在Hudi中,我们可以通过使用Hudi来管理数据,并将这些数据导入到Hive中进行查询和分析。

然而,有时候我们在Hudi中建立了数据外表后,在Hive中查询时会出现数据为空的情况。这可能是由于数据未正确导入到Hive元数据中,或者外表定义不正确导致的。

问题分析

当我们在Hudi中建立了一个数据外表后,我们需要在Hive中建立一个外部表来映射这个数据外表。但是如果外表的定义与实际数据不匹配,可能会导致在Hive中查询时数据为空的情况。

解决方案

下面我们以一个示例来说明如何在Hudi中建立数据外表,并在Hive中查询数据。

首先,在Hudi中创建一个数据外表:

CREATE TABLE hudi_table
USING org.apache.hudi
OPTIONS (
  path 'hdfs://path/to/hudi/table',
  primaryKey 'id',
  precombineField 'ts',
  hoodie.datasource.write.recordkey.field 'id',
  hoodie.datasource.write.partitionpath.field 'partition',
  hoodie.datasource.hive_sync.table 'hudi_table',
  hoodie.datasource.hive_sync.enable 'true',
  hoodie.datasource.hive_sync.partition_fields 'partition',
  hoodie.datasource.hive_sync.partition_extractor_class 'org.apache.hudi.hive.MultiPartKeysValueExtractor',
  hoodie.datasource.hive_sync.jdbcurl 'jdbc:hive2://localhost:10000',
  hoodie.datasource.hive_sync.username 'hive',
  hoodie.datasource.hive_sync.password 'hive'
);

然后在Hive中创建一个外部表来映射Hudi中的数据外表:

CREATE EXTERNAL TABLE hive_table (
  id STRING,
  name STRING,
  age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION 'hdfs://path/to/hudi/table';

接下来,我们可以在Hive中查询这个外部表来查看数据:

SELECT * FROM hive_table;

解决问题

在创建外部表时,一定要确保外部表的字段与实际数据字段一致,并且LOCATION指向正确的Hudi数据外表路径。这样就可以保证在Hive中查询数据时不会出现为空的情况。

总结

通过本文的介绍,我们了解了在Hudi中建立数据外表后,在Hive中查询数据为空的问题以及解决方案。正确创建外部表并确保字段匹配是解决这个问题的关键。希望本文对您有所帮助。

补充说明

如果出现问题仍未解决,可能需要检查Hive元数据与Hudi数据外表的同步情况,以及外表定义是否正确。可以考虑重新导入数据或重新定义外部表来解决问题。