Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 此配置单元查询需要建议_Hive_Hiveql - Fatal编程技术网

Hive 此配置单元查询需要建议

Hive 此配置单元查询需要建议,hive,hiveql,Hive,Hiveql,我有一个带有5个ID列的select语句。我需要从存储ID/名称的客户主表中查找并选择相应的客户名称,并生成客户报告。表列如下: origCustomerID、Tier1PartnerID、Tier2PartnerID、DistributorId、EndCustomerID、productId、OrderTotal、OrderDate 前5列是与Customers表中的CustID列匹配的ID列。请注意,并非所有这些列都始终包含给定记录的值,即它们有时可能为null。考虑到hiveQL中的当前约

我有一个带有5个ID列的select语句。我需要从存储ID/名称的客户主表中查找并选择相应的客户名称,并生成客户报告。表列如下: origCustomerID、Tier1PartnerID、Tier2PartnerID、DistributorId、EndCustomerID、productId、OrderTotal、OrderDate

前5列是与Customers表中的CustID列匹配的ID列。请注意,并非所有这些列都始终包含给定记录的值,即它们有时可能为null。考虑到hiveQL中的当前约束,我只能想到以下方法,但这会占用很多时间,而且不是最好的方法。你能提出一些改进建议吗

Select origCustomerID,a.name,Tier1PartnerID,b.name,Tier2PartnerID,
c.name,DistributorId,d.name,EndCustomerID,e.name,productId,OrderTotal,OrderDate 
From Orders O
LEFT OUTER JOIN customers a on o.origCustomerID = a.custid
LEFT OUTER JOIN customers b on o.Tier1PartnerID = a.custid
LEFT OUTER JOIN customers c on o.Tier2PartnerID = a.custid
LEFT OUTER JOIN customers d on o.DistributorId = a.custid
LEFT OUTER JOIN customers e on o.EndCustomerID = a.custid

如果id值始终是客户id或
NULL
(即,如果它们不是
NULL
,则您可以确定它们是客户id,而不是其他内容),并且
订单
表中的每条记录最多匹配一个客户(即,每个记录在这五列中最多有一个id;或者可能多次使用相同的id),您可以在匹配表达式中使用
COALESCE

目前我无法测试这一点,但这应该使用
Orders
表中的第一个非
NULL
id连接记录

SELECT [stuff]
FROM Orders O
LEFT OUTER JOIN customers a
ON COALESCE(o.origCustomerID, 
            o.Tier1PartnerID, 
            o.Tier2PartnerID, 
            o.DistributorId, 
            o.EndCustomerID) = a.custid
希望有帮助