如何让Amazon EMR中的Trino同时支持Delta表与Postgres表?
解决EMR Trino同时支持Delta Lake与PostgreSQL的配置问题
问题根源
你用delta.my_db.myrds_public_engine_demo_metadata查询PostgreSQL表的方式有误,delta是Delta Lake连接器对应的Trino catalog,该连接器仅能识别Delta格式的表,因此会抛出"非Delta表"的错误。要访问PostgreSQL表,需单独配置PostgreSQL连接器,并使用其对应的catalog名进行查询。
正确的EMR configurations.json配置
在原有Delta配置基础上,新增PostgreSQL连接器的配置项即可。每个Trino连接器在EMR中对应一个trino-connector-<连接器名称>的Classification,具体配置如下:
[ { "Classification": "delta-defaults", "Properties": {"delta.enabled": "true"} }, { "Classification": "trino-connector-delta", "Properties": { "hive.metastore": "glue", "hive.s3.endpoint": "https://s3.us-west-2.amazonaws.com" // 若EMR集群已通过IAM角色授权S3访问,无需配置密钥;否则需添加以下两行 // "hive.s3.aws-access-key": "xxx", // "hive.s3.aws-secret-key": "xxx" } }, { "Classification": "trino-connector-postgresql", "Properties": { "connector.name": "postgresql", "connection-url": "jdbc:postgresql://xxx.xxx.us-west-2.rds.amazonaws.com/my_db", "connection-user": "xxx", "connection-password": "xxx" } } ]
关键说明
- Delta连接器配置:保留原有
delta-defaults和trino-connector-delta配置,确保Glue作为元数据存储,S3端点匹配你的区域。推荐使用IAM角色授权S3访问,避免硬编码密钥。 - PostgreSQL连接器配置:新增
trino-connector-postgresql分类,填写正确的RDS连接地址、用户名和密码。该配置会在Trino中自动创建名为postgresql的catalog。
查询方式调整
配置完成后,查询不同类型的表需使用对应catalog:
- Delta表:
SELECT * FROM delta.my_db.engine_demo(原有方式不变) - PostgreSQL表:
SELECT * FROM postgresql.my_db.myrds_public_engine_demo_metadata
额外提示
如果需要自定义PostgreSQL的catalog名称,可在trino-connector-postgresql的Properties中添加catalog.name参数,例如:
"catalog.name": "my_rds"
之后即可用my_rds.my_db.myrds_public_engine_demo_metadata访问PostgreSQL表。
内容的提问来源于stack exchange,提问作者Hongbo Miao
相关产品推荐
相关产品推荐

