【问题标题】:full outer join behavior全外连接行为
【发布时间】:2019-10-17 23:41:03
【问题描述】:

HIVE SQL - 我有 2 个表。 survey 和survey_cmets 结构如下:

create external table if not exists survey(
id string,
category_name string, 
subcategory_name string)
STORED AS parquet;

insert into survey(id, category_name, subcategory_name) 
values ('1', 'Engine', 'Engine problem other than listed');
insert into survey(id, category_name, subcategory_name) 
values ('1', 'Exterior Body', 'Color match of painted parts');
insert into survey(id, category_name, subcategory_name) 
values ('1', 'Exterior Body', 'Tail lights');
insert into survey(id, category_name, subcategory_name) 
values ('1', 'Heating/Ventilation and Cooling', 'Front windshield fogs up');
insert into survey(id, category_name, subcategory_name) 
values ('1', 'Transmission', 'Rough shifting');

create external table if not exists survey_comments(
id string,
category_name_txt string, 
subcategory_name_txt string,
comments string)
STORED AS parquet;

insert into survey_comments(id, category_name_txt, subcategory_name_txt) 
values ('1', 'Exterior Body', 'Tail lights', 'Moisture in lower portion of rear tail lights along with leaves etc.');
insert into survey_comments(id, category_name_txt, subcategory_name_txt) 
values ('1', 'Heating/Ventilation and Cooling', 'Front windshield fogs up', 'Small amount of fog low on front windshield during/after rain.');
insert into survey_comments(id, category_name_txt, subcategory_name_txt) 
values ('1', 'Miscellaneous', 'General problem other than listed', 'When filling vehicle with gas; the pumps fill the gas line too quickly, had to hold the pump handle only 1/2 way on.');
insert into survey_comments(id, category_name_txt, subcategory_name_txt) 
values ('1', 'Miscellaneous', 'General problem other than listed', 'Touch-up paint too red, not same red as on the car.');

现在我的完整外连接如下所示:

select b.id, b.category_name, b.subcategory_name, a.category_name_txt, a.sub_category_name_txt, a.comments
from   survey b full outer join survey_comments a 
on (
b.id = a.id and              
b.category_name     = a.category_name_txt and                      b.subcategory_name  = a.sub_category_name_txt
)

我没有得到survey_comment_txt 中category_name 为“Miscellaneous”的行。我需要在调查和survey_cmets 中不匹配的行作为单独的行和匹配的行。我做错了什么。

【问题讨论】:

  • 了解 FULL JOIN ON 返回的内容:INNER JOIN ON rows UNION ALL 不匹配的左右表行,由 NULL 扩展。作为 OUTER JOIN 的一部分,始终知道您想要什么 INNER JOIN。 WHERE 或 INNER JOIN ON 要求在 OUTER JOIN ON 后从表中删除由 NULL 扩展的任何行,即只保留 LEFT/RIGHT/INNER JOIN ON 行,因此右/左/两个表列不为 NULL,即“将外部联接变为内部联接”。你有那个。

标签: hive hiveql full-outer-join


【解决方案1】:

使用 CTE 进行测试,发现了两个问题。 1st:您在survey_cmets 中插入了四列,但只命名了三列。 第二个:在查询列名中应该是subcategory_name_txt,而不是sub_category_name_txt

修复后测试:

with survey as (
select stack(5,
'1', 'Engine', 'Engine problem other than listed',
'1', 'Exterior Body', 'Color match of painted parts',
'1', 'Exterior Body', 'Tail lights',
'1', 'Heating/Ventilation and Cooling', 'Front windshield fogs up',
'1', 'Transmission', 'Rough shifting') as (id, category_name, subcategory_name) 
),

survey_comments as (
select stack(4,

'1', 'Exterior Body', 'Tail lights', 'Moisture in lower portion of rear tail lights along with leaves etc.',
'1', 'Heating/Ventilation and Cooling', 'Front windshield fogs up', 'Small amount of fog low on front windshield during/after rain.',
'1', 'Miscellaneous', 'General problem other than listed', 'When filling vehicle with gas; the pumps fill the gas line too quickly, had to hold the pump handle only 1/2 way on.',
'1', 'Miscellaneous', 'General problem other than listed', 'Touch-up paint too red, not same red as on the car.') as (id, category_name_txt, subcategory_name_txt,comments)
)

select b.id, b.category_name, b.subcategory_name, a.category_name_txt, a.subcategory_name_txt, a.comments
from   survey b full outer join survey_comments a 
on (
b.id = a.id and              
b.category_name     = a.category_name_txt and b.subcategory_name  = a.subcategory_name_txt
)

返回:

b.id    b.category_name b.subcategory_name  a.category_name_txt a.subcategory_name_txt  a.comments  
1   Engine  Engine problem other than listed    NULL    NULL    NULL    
1   Exterior Body   Color match of painted parts    NULL    NULL    NULL    
1   Exterior Body   Tail lights Exterior Body   Tail lights Moisture in lower portion of rear tail lights along with leaves etc.    
1   Heating/Ventilation and Cooling Front windshield fogs up    Heating/Ventilation and Cooling Front windshield fogs up    Small amount of fog low on front windshield during/after rain.  
NULL    NULL    NULL    Miscellaneous   General problem other than listed   Touch-up paint too red, not same red as on the car. 
NULL    NULL    NULL    Miscellaneous   General problem other than listed   When filling vehicle with gas; the pumps fill the gas line too quickly, had to hold the pump handle only 1/2 way on.    
1   Transmission    Rough shifting  NULL    NULL    NULL    

Miscellaneous 被返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 2022-01-23
    • 2018-04-16
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多