Hologres把odps的表,作为外表查询,报错?
https://holoweb.dw.alibaba-inc.com/connect?addInstance=true&instanceHost=alsc-public-cn-internal.hologres.aliyuncs.com&instancePort=8099
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Hologres中将MaxCompute(ODPS)的表作为外部表查询时,可能会遇到报错。以下是可能导致问题的原因及解决方法,基于知识库中的参考资料进行详细说明。
根据知识库内容,以下是一些常见的报错原因:
You have NO privilege 'odps:Select' on xxx
,可能是由于MaxCompute采用了Package授权模式。SET odps.sql.common.table.planner.ext.hive.bridge=true;
),也可能导致查询失败。invalid type INT for function UDF definition
。如果是跨Project访问MaxCompute表,确保当前账号具有正确的权限,并执行以下SQL语句设置当前Project的上下文信息:
-- V0.7版本实例
SET seahawks.seahawks_internal_current_odps_project='holoprojectname';
-- V0.8版本实例
SET hg_experimental_odps_current_project_name = 'holoprojectname';
注意:请将holoprojectname
替换为实际的MaxCompute Project名称。
CREATE EXTERNAL TABLE IF NOT EXISTS <table_name>(
<col1_name> <data_type>,
<col2_name> <data_type>,
...
)
STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='<ram_arn>'
)
LOCATION '<jdbc:postgresql://<endpoint>:<port>/<database>?ApplicationName=MaxCompute&[currentSchema=<schema>&][useSSL={true|false}&]table=<holo_table_name>/>'
TBLPROPERTIES (
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
'odps.federation.jdbc.target.db.type'='holo',
'odps.federation.jdbc.colmapping'='<col1:column1,col2:column2,...>'
);
重要:ram_arn
需要填写RAM角色的ARN信息,确保该角色具有访问Hologres的权限。
SET odps.sql.common.table.planner.ext.hive.bridge=true;
CREATE EXTERNAL TABLE IF NOT EXISTS <table_name>(
<col1_name> <data_type>,
<col2_name> <data_type>,
...
)
STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
LOCATION '<jdbc:postgresql://<endpoint>:<port>/<database>?ApplicationName=MaxCompute&[currentSchema=<schema>&][useSSL={true|false}&]table=<holo_table_name>/>'
TBLPROPERTIES (
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
'odps.federation.jdbc.target.db.type'='holo',
'odps.federation.jdbc.colmapping'='<col1:column1,col2:column2,...>'
);
说明:双签名模式支持相同RAM用户访问MaxCompute和Hologres的有权限表,无需额外授权。
SET odps.sql.type.system.odps2=true;
注意:此设置需在创建外部表之前完成。
http://service.cn-hangzhou.maxcompute.aliyun.com/api
SET odps.sql.split.hive.bridge=true;
SET odps.sql.hive.compatible=true;
SELECT * FROM <external_table_name> LIMIT 10;
说明:SET
操作用于启用Hive桥接功能和兼容模式。
The role not exists
,请检查RAM角色是否存在并重新授权。ALTER TABLE ... MERGE SMALLFILES
命令合并小文件。通过以上步骤,您可以有效解决Hologres查询MaxCompute外部表时的报错问题。如果问题仍未解决,请联系阿里云技术支持团队以获取进一步帮助。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975