HiveQL - 如何处理未出现在字典中的元素
HiveQL - How to tackle with elements not appearing in dictionary
问题是:我得到了这个查找 table,我将其用作字典来创建一个新列,其中 'translates' 特定代码列的含义。
假设:
表 1:
ID Code
01 A
02 B
03 C
Lookup_table(字典):
Code Meaning
A Alice
B Bob
C Charlie
我可以轻松地创建一个 JOIN 来创建一个新的 table (Table2),并向其中添加新的列 'Meaning':
表 2:
CREATE TABLE Table2 AS SELECT T1.ID, T1.Code, LKP.Meaning
FROM Table1 AS T1
LEFT OUTER JOIN Lookup_table AS LKP
ON (T1.Code = LKP.Code);
但是:如果表 1 中出现新代码(例如 ("04", "D") )并且在 Lookup_table 中没有相应的翻译怎么办? (假设你想避免 NULL 作为答案)有没有办法在 Meaning 中获得类似 'others' 的东西来回答这种情况?
谢谢!
您可以使用 COALESCE()
来实现这一点。 COALESCE()
接受两个参数,同时选择第一个不是 NULL
.
的参数
您可以按如下方式修改您的查询:
CREATE TABLE Table2 AS
SELECT
T1.ID AS ID,
T1.Code AS Code,
COALESCE(LKP.Meaning,'others') AS Meaning
FROM Table1 AS T1
LEFT OUTER JOIN Lookup_table AS LKP
ON (T1.Code = LKP.Code);
在您的情况下,这意味着将 LKP.Meaning
作为第一个参数。如果此值为 NULL
,它将使用显示的 'others'
。
问题是:我得到了这个查找 table,我将其用作字典来创建一个新列,其中 'translates' 特定代码列的含义。
假设:
表 1:
ID Code
01 A
02 B
03 C
Lookup_table(字典):
Code Meaning
A Alice
B Bob
C Charlie
我可以轻松地创建一个 JOIN 来创建一个新的 table (Table2),并向其中添加新的列 'Meaning':
表 2:
CREATE TABLE Table2 AS SELECT T1.ID, T1.Code, LKP.Meaning
FROM Table1 AS T1
LEFT OUTER JOIN Lookup_table AS LKP
ON (T1.Code = LKP.Code);
但是:如果表 1 中出现新代码(例如 ("04", "D") )并且在 Lookup_table 中没有相应的翻译怎么办? (假设你想避免 NULL 作为答案)有没有办法在 Meaning 中获得类似 'others' 的东西来回答这种情况?
谢谢!
您可以使用 COALESCE()
来实现这一点。 COALESCE()
接受两个参数,同时选择第一个不是 NULL
.
您可以按如下方式修改您的查询:
CREATE TABLE Table2 AS
SELECT
T1.ID AS ID,
T1.Code AS Code,
COALESCE(LKP.Meaning,'others') AS Meaning
FROM Table1 AS T1
LEFT OUTER JOIN Lookup_table AS LKP
ON (T1.Code = LKP.Code);
在您的情况下,这意味着将 LKP.Meaning
作为第一个参数。如果此值为 NULL
,它将使用显示的 'others'
。