如何在Tableau中跨Postgre与MySQL处理表?无法执行全外连接
跨PostgreSQL/MySQL表的Tableau全外连接解决方案
方法1:自定义SQL模拟全外连接
跨不同数据库时,Tableau可视化界面的连接选项可能不支持直接全外连接,你可以通过自定义SQL手动实现逻辑:
- 先分别建立PostgreSQL和MySQL的数据源连接
- 创建自定义SQL,用
UNION ALL结合NOT EXISTS来覆盖全外连接的所有场景(左表独有、右表独有、交集),示例如下(替换成你的表名和字段):
-- 取两表交集记录 SELECT p.col1, p.col2, p.pg_specific_col, m.mysql_specific_col, 'both' AS source FROM postgres_db.public.your_pg_table p JOIN mysql_db.your_mysql_table m ON p.col1 = m.col1 AND p.col2 = m.col2 UNION ALL -- 取PostgreSQL独有的记录 SELECT p.col1, p.col2, p.pg_specific_col, NULL AS mysql_specific_col, 'only_pg' AS source FROM postgres_db.public.your_pg_table p WHERE NOT EXISTS ( SELECT 1 FROM mysql_db.your_mysql_table m WHERE m.col1 = p.col1 AND m.col2 = p.col2 ) UNION ALL -- 取MySQL独有的记录 SELECT m.col1, m.col2, NULL AS pg_specific_col, m.mysql_specific_col, 'only_mysql' AS source FROM mysql_db.your_mysql_table m WHERE NOT EXISTS ( SELECT 1 FROM postgres_db.public.your_pg_table p WHERE p.col1 = m.col1 AND p.col2 = m.col2 )
方法2:数据融合实现全外匹配
Tableau的数据融合功能可以跨数据源关联数据,设置成全外逻辑:
- 将其中一张表设为主数据源(拖入画布),另一张作为辅助数据源添加到数据面板
- 从主数据源拖入共同字段到视图,再从辅助数据源拖入需要的字段,Tableau会自动开启融合
- 右键辅助数据源的共同字段,选择「编辑数据融合」,将匹配方式改为「所有行」,这样就能保留两边所有记录,实现类似全外连接的效果
方法3:迁移数据到同一数据库
如果上述方法操作复杂,最直接的方式是把其中一张表的数据导出(比如MySQL表导出为CSV),导入到另一数据库(PostgreSQL)中,之后在同一数据库内执行标准的FULL OUTER JOIN,再将合并后的结果连接到Tableau。
内容的提问来源于stack exchange,提问作者TonyTony2000
相关产品推荐
相关产品推荐

