hive - 插入配置单元表时面临不明确的列引用错误
问题描述
我的主表:
CREATE EXTERNAL TABLE user(language STRING,snapshot_time STRING,products STRUCT<id:STRING,name:STRING>,item STRUCT<quantity:ARRAY<STRUCT<name:STRING>>>)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
STORED AS TEXTFILE
LOCATION '/user/input/sample';
这是我的主表,我试图从中检索特定字段并插入“user_prod_info”表。但是,在使用“插入”命令插入数据时,我遇到了以下错误:
失败:SemanticException [错误 10007]:q 中的列引用文本不明确
CREATE EXTERNAL TABLE user_prod_info (
temp_row_num INT,
language STRING,
snapshot_time STRING,
id STRING,
prod_name STRING,
user_name STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
NULL DEFINED as "null"
stored as textfile;
我的插入命令:
INSERT OVERWRITE TABLE user_prod_info
SELECT q.* FROM (
SELECT row_number() OVER (PARTITION BY products.id ORDER BY snapshot_time DESC) AS temp_row_num,
language,
snapshot_time,
products.id,
products.name,
A.name
FROM user as raw
LATERAL VIEW EXPLODE(item.quantity) quantity as A
) q WHERE temp_row_num == 1;
此命令无法从特定表中检索字段,因为我们有两个“名称”字段。一个在“产品”中,另一个在“A”中。
我尝试为“A.name as name1”创建别名。我能够正确插入数据。但是,一条记录存储在 3 行中,其中包含一些空值。
我被困在这里了。谁能帮我解决这个问题...
解决方案
您可以删除模棱两可的为这样的列名之一添加别名
INSERT OVERWRITE TABLE user_prod_info
SELECT q.* FROM (
SELECT row_number() OVER (PARTITION BY products.id ORDER BY snapshot_time DESC) AS temp_row_num,
language,
snapshot_time,
products.id,
products.name as prod_name,
A.name
FROM user as raw
LATERAL VIEW EXPLODE(item.quantity) quantity as A
) q WHERE temp_row_num == 1;
推荐阅读
- c# - 我是否需要为每个 redis 实例建立一个新连接?
- python - Python - 检查 URL 返回
- javascript - 无法将数组添加到本地存储
- python - Django - 测试登录视图 - AttributeError:'HttpRequest'对象没有属性'user'
- c - 当位被屏蔽时使用不正确的格式说明符是未定义的行为吗
- android - 使用 adb 命令完整的 android 逻辑副本
- unity3d - 统一的对撞机从物体中落下
- github - 我在使用 cocoapods 验证我的 URL 时遇到问题
- reactjs - 如何在 React 功能组件内的嵌套函数内使用类型化选择器?
- kotlin - 在 Kotlin 中,处理初始化复杂映射的条件方式的惯用方式是什么