请多加欣赏一下; 我一生都无法弄清楚该查询为什么不起作用,我正在将Teradata SQL脚本转换为Hive。
Select a.some_id FROM app_table_dc.seds_thingy_mapping_seds_vdata e
LEFT JOIN app_table_dc.assets a
ON e.eng_serial_number = a.serial_number
AND a.asset_type_id = 2
LEFT JOIN (SELECT vdata_thingy_id
, thingy_date InductDate
FROM app_table_dc.seds_thingy_mapping_seds_vdata
WHERE thingy_type = 'EI') ei
ON ei.vdata_thingy_id = e.vdata_thingy_id
JOIN app_table_dc.engine_type_asset_models am
ON a.asset_model_id = am.asset_model_id
JOIN app_table_dc.engine_type egt
ON am.engine_type_id = egt.engine_type_id
最后两行无效;当我将它们取出时,它将运行...但是,包括它们在内,我最终显示了错误日志:
错误代码:10004,SQL状态:TStatus(statusCode:ERROR_STATUS, infoMessages:[* org.apache.hive.service.cli.HiveSQLException:错误 编译语句时:FAILED:SemanticException [错误10004]: 行1:4915无效的表别名或列引用 'SYNTHJOIN_110d3abf':(可能的列名称为:blahblahblah)
我确保所引用的表名具有正确的命名法/名称,以及所引用的列。我无能为力。
谢谢您的任何见解!
答案 0 :(得分:0)
-代码正确
-因为我看到这个错误:(可能的列名为:blahblahblah)
您能检查要加入的两个表((a,am),(am,egt))中是否存在asset_model_id和engine_type_id。
由于它引发错误,因此命名可能有所不同。
答案 1 :(得分:0)
这是唯一可行的方法:
with somealias as (select * from app_table_dc.engine_type)
Select a.some_id
FROM app_table_dc.seds_thingy_mapping_seds_vdata e
LEFT JOIN app_table_dc.assets a ON e.eng_serial_number = a.serial_number AND a.asset_type_id = 2
LEFT JOIN (SELECT vdata_thingy_id , thingy_date InductDate FROM app_table_dc.seds_thingy_mapping_seds_vdata WHERE thingy_type = 'EI' ) ei
ON ei.vdata_thingy_id = e.vdata_thingy_id
JOIN app_table_dc.engine_type_asset_models am ON a.asset_model_id = am.asset_model_id
JOIN somealias egt
ON am.engine_type_id = egt.engine_type_id