如果在 Hive SQL 中找不到匹配项,则提供要加入的备用列
Posted
技术标签:
【中文标题】如果在 Hive SQL 中找不到匹配项,则提供要加入的备用列【英文标题】:Provide a fallback column to join to if no match is found in Hive SQL 【发布时间】:2019-07-22 15:55:14 【问题描述】:我有一个包含产品名称、其他几个属性和计数的事务表。
我目前正在将此表加入到产品名称的参考表中,并返回一些额外的产品属性。但是在大多数情况下,事务表中的产品名称与参考表中的条目不匹配。
因此,我使用变体和目标列维护产品名称的变体列表,首先将我的表连接到此变体表,然后使用目标连接到产品参考。
我遇到的问题是,有时数据无法通过变体表工作,并且可以直接连接到参考表(在这种情况下,我们可能在事务表中有一个符合“目标”的产品名称名称但不是变体。
我知道这可以通过更新变体表来解决,但为了速度,我一直在尝试找到一种方法来加入变体列上的变体表,然后如果记录不匹配尝试加入“目标”列。
这在 SQL 中可行吗?
基本上尝试将 X 列连接到 A 列,如果没有找到尝试连接 B 列。
我有类似下面的东西。
SELECT
transaction_data.product AS product_name,
transaction_data.count AS sales,
transaction_data.date as sale_date,
transaction_data.region AS region_code,
product_table_master.product_official_name,
product_table_master.product_type
FROM
transaction_data
JOIN
product_variations AS product_name_variant
ON transaction_data.product_name = product_name_variant.variation
JOIN
product_table AS product_table_master
ON product_name_variant.target = product_table_master.product_official_name
但是在我的任何实验中都没有找到一种方法(在 Target 上添加一个额外的连接)。
/* JOIN
product_variations AS product_name_variant2
ON transaction_data.product_name = product_name_variant.target
product_variations
variant | target
Computer | Computer
PC | Computer
Laptop | Computer
Hat | Headwear
Cap | Headwear
transaction_data
product | sales
Computer | 4
PC | 3
Laptop | 6
Headwear | 3
Cap | 1
在上面的示例中,首先将交易数据连接到 product_variations 表中的变体。在这种情况下,计算机、PC 和笔记本电脑都映射到目标计算机,在下一次连接到主引用表时使用。
但是,我遇到的问题是交易数据中的头饰没有作为变体出现在产品变体表中,因此加入将不起作用。除非我可以加入目标列。
【问题讨论】:
我真的很困惑。product_variations2
是什么?样本数据和期望的结果真的很有帮助。
添加了一些示例数据
【参考方案1】:
-
我建议您对 X 和 A 执行左外连接。
得到匹配的结果。
用 B 连接不匹配的元素。
将结果 2 & 3 合并得到最终的参考表。
【讨论】:
以上是关于如果在 Hive SQL 中找不到匹配项,则提供要加入的备用列的主要内容,如果未能解决你的问题,请参考以下文章
在 Spark SQL 中找不到 Hive 表 - Cloudera VM 中的 spark.sql.AnalysisException
SQL Server:如果在选择中的函数的表中找不到,则插入记录
从 EMR 迁移到 AWS Glue 后在 Spark SQL 中找不到表