根据您提供的参考代码,以下是创建 tmp_kes_analy_ad_group_id
外部表的完整 SQL:
CREATE EXTERNAL TABLE IF NOT EXISTS fenghuo_db.tmp_kes_analy_ad_group_id(
campaign_id STRING,
ad_group_id STRING,
ds STRING
)
STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
WITH SERDEPROPERTIES(
'odps.properties.rolearn'='acs:ram::1183641352893724:role/aliyunodpsholorole',
'odps.federation.jdbc.column.type.mapping'='campaign_id:string,ad_group_id:string,ds:string'
)
LOCATION 'jdbc:postgresql://hgprecn-cn-zpr3gi9yg002-cn-hangzhou-internal.hologres.aliyuncs.com:80/fenghuo?ApplicationName=MaxCompute¤tSchema=public&useSSL=false&table=tmp_kes_analy_ad_group_id/'
TBLPROPERTIES (
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
'odps.federation.jdbc.target.db.type'='holo',
'odps.federation.jdbc.input.fetch.size'='2000',
'odps.federation.jdbc.split.size'='64MB'
);
关键参数说明
- 表结构定义:
-
- 定义了3个字段:
campaign_id
,ad_group_id
,ds
- 全部使用STRING类型(对应Hologres的TEXT类型)
- 定义了3个字段:
- 权限配置:
-
- 使用相同的RAM角色:
aliyunodpsholorole
- 确保该角色有访问Hologres表的权限
- 使用相同的RAM角色:
- 连接配置:
-
- 相同的Hologres内网地址
- 指定目标表为
tmp_kes_analy_ad_group_id
- 使用public schema
- 性能优化参数:
-
- 设置fetch size为2000行
- 设置split size为64MB
使用前检查清单
- 确认Hologres表存在:
-- 在Hologres中执行
SELECT * FROM information_schema.tables
WHERE table_name = 'tmp_kes_analy_ad_group_id';
- 验证权限:
-- 在Hologres中授权
GRANT SELECT ON TABLE public.tmp_kes_analy_ad_group_id TO "aliyunodpsholorole";
- 测试连接:
-
- 确保MaxCompute和Hologres在同一地域(cn-hangzhou)
- 确认网络连通性
替代简化方案
如果上述语法仍报错,可以使用更简洁的版本:
CREATE EXTERNAL TABLE IF NOT EXISTS fenghuo_db.tmp_kes_analy_ad_group_id(
campaign_id STRING,
ad_group_id STRING,
ds STRING
)
USING JAR 'odps-federation-jdbc-1.0.jar'
LOCATION 'jdbc:postgresql://hgprecn-cn-zpr3gi9yg002-cn-hangzhou-internal.hologres.aliyuncs.com:80/fenghuo'
TBLPROPERTIES (
'table'='tmp_kes_analy_ad_group_id',
'schema'='public',
'driver'='org.postgresql.Driver',
'odps.properties.rolearn'='acs:ram::1183641352893724:role/aliyunodpsholorole'
);