无效的表别名或列引用'SYNTHJOIN_xxxxx'

时间:2019-02-19 01:58:21

标签: hadoop hive subquery teradata alias

请多加欣赏一下; 我一生都无法弄清楚该查询为什么不起作用,我正在将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)

我确保所引用的表名具有正确的命名法/名称,以及所引用的列。我无能为力。

谢谢您的任何见解!

2 个答案:

答案 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