我有两个hive SQL表,其中包含以下列。
TABLE_1
|customer_id | ip_address|
region_table
|country_name | region_name|
我试过,
SELECT table_1.customer_id, table_1.ip_address, getCountry(ip_address) AS Country, region_table.region_name FROM table_1 JOIN region_table ON region_table.country_name = Country;
getCountry()是UDF,它在IP地址时返回国家/地区名称 被传递到它。我想使用该国家/地区名称来创建另一个 具有region_table中相应区域的列。而且我要 得到下表作为我的输出。
customer_id | ip_address | Country | region_name
对我在查询中遗漏的内容有任何疑问?
答案 0 :(得分:1)
select c.customer_id
,c.ip_address
,getCountry(c.ip_address) as Country
,r.region_name
from table_1 c
join region_table r
on r.country_name =
getCountry(c.ip_address)
答案 1 :(得分:1)
对于Oracle,您不能在同一查询的SELECT
子句中引用WHERE
语句中定义的列别名!!因为数据库引擎首先评估WHERE
子句并标识符合条件的行,然后继续按照SELECT
部分查询中的定义获取列。
在您的情况下,正确的查询应该是
select
table_1.customer_id,
table_1.ip_address,
getCountry(ip_address) AS Country,
region_table.region_name
FROM table_1
JOIN region_table ON region_table.country_name = getCountry(table_1 .ip_address);