シナリオ:複数テーブルの結合またはユニオンを実行すると、次のエラーが発生します。
同じ名前の属性が操作に表示されます:complex_flag_code、quantity、pay_time_date、sales_price、oms_code、retail_price、promotion_sku_code。適切な属性が使用されているかどうかを確認してください。;;
実行する前にコードの各部分に個別にコメントすることにより、次のコードセグメントに問題を特定します。
...
...
(
SELECT
comp_sku.order_id
,comp_sku.quantity
,comp_sku.sales_price
,comp_sku.promotion_sku_code
,sales_tmp.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 comp_sku.order_id = sales_tmp.order_id AND comp_sku.promotion_sku_code = sales_tmp.sku_code
)
...
...
エラーレポートによると、推測:上記のコードはサブクエリとして使用され、結果が親クエリに提供されると、親クエリはサブクエリ結果のフィールドに解決されません。
ハイブの公式Webサイトで一度見たときに、結合または結合するときにフィールドエイリアスを指定する必要があると考えてください。そうしないと、データが失われます。
推測されたコードでこのようなcomp_sku.order_idなどのフィールドは、結果になcolumn1の、デフォルトのフィールド名になっていることなので、親クエリ内のORDER_IDが見つかりません。
したがって、コードを次のように変更します。
...
...
(
SELECT
comp_sku.order_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
,sales_tmp.order_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 comp_sku.order_id = sales_tmp.order_id AND comp_sku.promotion_sku_code = sales_tmp.sku_code
)
...
...
問題が解決しました。
総括する:
- 結合または結合するときは、フィールドエイリアスを定義する習慣を身に付けます。
- dfプログラミングを使用する場合、最初の要約にも同じことが当てはまります。