【发布时间】:2019-07-12 11:00:59
【问题描述】:
希望能多看几眼; 我一生都无法弄清楚为什么这个查询不起作用,我正在将 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:错误 编译语句时:失败:SemanticException [错误 10004]: 第 1 行:4915 无效的表别名或列引用 'SYNTHJOIN_110d3abf':(可能的列名是:blahblahblah)
我确保所引用的表名具有正确的命名法/名称,以及所引用的列。我已经束手无策了。
感谢您提前提供任何见解!
【问题讨论】:
-
据我了解,您的查询没有问题,需要更多详细信息 - 最后两行参考表 (app_table_dc.engine_type) ,您是否能够在没有任何错误的情况下查询此表并且是这是一个带/不带分区的外部/内部表
-
您好,是的,我可以毫无问题地查询此表,它是一个非常小的关联实体表,只有 10 行左右。它不是事务性的,我相信它是一个内部表,应该是链接/连接表,没有分区。虽然第一个表上有 34 个唯一 ID,就像我说的那样,第二个表只有 10 个唯一 ID。虽然我非常怀疑这是问题所在。
-
您能否检查一下
engine_type_id列是否存在于两个表中且类型相同? -
是的,engine_type_id 作为 BIGINT 存在于两个表中。很奇怪吧?
标签: hadoop hive subquery teradata alias