在使用Flink CDC将数据拉取到Hudi时,我发现通过Flink SQL可以查看数据。在Hive中,可以看到表,但是在查询时却报错:“Error: Error while compiling statement: FAILED: SemanticException Line 0:-1 Invalid column reference 'TOK_ALLCOLREF' (state=42000,code=40000)”,另外Flink 1.17.2,CDC 3.0.0,Hive 3.1.3。在建立Hudi表时,我指定了'hive_sync.enable'='true','hive_sync.mode'='hms','hive_sync.metastore.uris'='thrift://192.168.3.245:9083','hive_sync.db'='test','hive_sync.table'='hudi_users',帮忙看一下怎么回事呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的问题描述和知识库资料,以下是针对问题的详细分析和解决方案:
错误信息解析
错误信息 Error: Error while compiling statement: FAILED: SemanticException Line 0:-1 Invalid column reference 'TOK_ALLCOLREF'
表明在Hive中查询Hudi表时,SQL语句无法正确解析列引用。这通常与以下原因相关:
环境配置分析
您的环境配置如下:
'hive_sync.enable'='true',
'hive_sync.mode'='hms',
'hive_sync.metastore.uris'='thrift://192.168.3.245:9083',
'hive_sync.db'='test',
'hive_sync.table'='hudi_users'
根据知识库资料,Hudi表支持通过Spark或Flink建表和写入数据,但Hive仅支持查询。因此,问题可能出在Hudi表的元数据同步或Hive查询兼容性上。
确保Hudi表的元数据已正确同步到Hive Metastore。可以通过以下步骤验证:
检查Hive Metastore中的表结构
使用Hive CLI或Beeline连接到Hive,执行以下命令查看表结构:
DESCRIBE FORMATTED test.hudi_users;
确保表的元数据(如列名、数据类型等)与Hudi表一致。如果表结构不完整或缺失,说明同步失败。
重新同步Hudi表到Hive
如果发现元数据未正确同步,可以尝试重新同步。在Flink SQL中创建Hudi表时,确保以下参数正确配置:
'hive_sync.enable'='true',
'hive_sync.mode'='hms',
'hive_sync.metastore.uris'='thrift://192.168.3.245:9083',
'hive_sync.db'='test',
'hive_sync.table'='hudi_users'
然后重新运行Flink作业,确保Hudi表的元数据被正确写入Hive Metastore。
根据知识库资料,Hudi表在Hive中仅支持查询,且需要确保Hive版本与Hudi版本兼容。以下是具体建议:
确认Hudi版本
您未明确提到Hudi版本,但Flink 1.17.2通常与Hudi 0.12.x或更高版本兼容。请确保使用的Hudi版本支持Hive 3.1.3。
检查Hive查询语法
在Hive中查询Hudi表时,避免使用通配符 *
,而是显式指定列名。例如:
SELECT id, name, age FROM test.hudi_users;
这是因为Hudi表的列映射可能与Hive的默认解析方式不完全一致。
根据知识库资料,Flink CDC写入Hudi时需要正确配置Catalog和表结构。以下是关键点:
检查Flink Catalog配置
确保Flink中正确配置了Hive Catalog和Hudi Catalog。例如:
CREATE CATALOG hive_catalog WITH (
'type' = 'hive',
'default-database' = 'test',
'hive-version' = '3.1.3',
'hive-conf-dir' = '/path/to/hive-conf/'
);
验证Flink SQL写入逻辑
确保Flink SQL中写入Hudi表的逻辑正确。例如:
CREATE TABLE hudi_users (
id INT,
name STRING,
age INT
) WITH (
'connector' = 'hudi',
'path' = 'oss://bucket/path/to/hudi_users',
'hive_sync.enable' = 'true',
'hive_sync.mode' = 'hms',
'hive_sync.metastore.uris' = 'thrift://192.168.3.245:9083',
'hive_sync.db' = 'test',
'hive_sync.table' = 'hudi_users'
);
如果上述步骤仍无法解决问题,建议启用调试日志以进一步分析:
启用Flink调试日志
在Flink配置文件中增加以下参数:
log.level=DEBUG
检查Hive日志
查看Hive Metastore和HiveServer2的日志,定位具体的错误原因。
核心问题
当前问题的核心可能是Hudi表的元数据未正确同步到Hive Metastore,或者Hive查询语法与Hudi表结构不兼容。
解决步骤
重要提醒
请确保Hudi表的元数据同步参数配置正确,并在Hive中显式指定列名进行查询。
如果问题仍未解决,请提供更详细的日志信息以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。