spark-sql⼦查询的字段名在⽗查询中⽆法解析
场景:多表join、union时,发⽣如下报错:武汉风俗
通过分别注释各部分代码后再运⾏,将问题定位到以下代码段:千年的爱恋
...
...
(
SELECT
der_id
,comp_sku.quantity
,comp_sku.sales_price
,comp_sku.promotion_sku_code半衰期是什么意思
,der_id
FROM
(
SELECT
order_id
,promotion_sku_code
,
quantity
,sales_price
f11键的作用FROM all_detail
WHERE is_gift = 1 AND promotion_sku_code IS NOT NULL
高等职业院校) comp_sku
LEFT JOIN
(
SELECT
order_id
,sku_code
FROM sales
)
sales_tmp
ON der_id = der_id AND comp_sku.promotion_sku_code = sales_tmp.sku_code
)
...
...
根据报错,猜测:以上代码作为⼦查询,将结果供⽗查询时, ⽗查询没有解析到⼦查询结果中的字段。
联想到曾经在hive官⽹上看到,在join或者union时,必须指定字段别名,否则会丢失数据。
猜测代码中的 der_id等字段在结果中应该成为了column1之类默认的字段名,所以⽗查询中查找order_id就查找不到。于是将代码修改为:
...
.
..
(
孙思邈名言
SELECT
der_id AS order_id
,comp_sku.quantity AS quantity
,comp_sku.sales_price AS sales_price
,comp_sku.promotion_sku_code AS promotion_sku_code
,der_id AS s_order_id
FROM
(
SELECT
order_id
,promotion_sku_code
雪山胃宝胶囊
,quantity
,sales_price
FROM all_detail
WHERE is_gift = 1 AND promotion_sku_code IS NOT NULL
) comp_sku
LEFT JOIN
初三复读怎么申请
(
SELECT
order_id
,
sku_code
FROM sales
) sales_tmp
ON der_id = der_id AND comp_sku.promotion_sku_code = sales_tmp.sku_code )
...
...
问题解决。
总结:
1. 在join或者union时,要养成定义字段别名的习惯。
2. 使⽤df编程时,也⼀样适⽤第⼀条总结。