dat*_*101 5 struct hadoop hive complextype hiveql
我对Hive和Stack Overflow完全不熟悉.我正在尝试创建一个复杂数据类型为"STRUCT"的表,然后INSERT INTO TABLE
在Hive中使用它填充它.
我正在使用以下代码:
CREATE TABLE struct_test
(
address STRUCT<
houseno: STRING
,streetname: STRING
,town: STRING
,postcode: STRING
>
);
INSERT INTO TABLE struct_test
SELECT NAMED_STRUCT('123', 'GoldStreet', London', W1a9JF') AS address
FROM dummy_table
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
编译语句时出错:FAILED:semanticException [错误10044]:无法插入目标,因为列号类型不同'struct_test':无法将列0从struct转换为array>.
我能够成功地使用类似的代码来创建和填充数据类型数组,但是我在使用Struct时遇到了困难.我已经尝试了很多我在网上找到的代码示例,但它们似乎都不适合我...我真的很感激一些帮助,因为我已经坚持了很长一段时间了!谢谢.
你的SQL错误.你应该使用sql:
INSERT INTO TABLE struct_test
SELECT NAMED_STRUCT('houseno','123','streetname','GoldStreet', 'town','London', 'postcode','W1a9JF') AS address
FROM dummy_table LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
您不能直接在Hive中插入复杂数据类型.对于插入结构,您有函数named_struct.您需要创建一个虚拟表,其中包含要插入所需表的"结构"列中的数据.就像在你的情况下创建一个虚拟表
CREATE TABLE DUMMY ( houseno: STRING
,streetname: STRING
,town: STRING
,postcode: STRING);
Run Code Online (Sandbox Code Playgroud)
然后在所需的表中插入
INSERT INTO struct_test SELECT named_struct('houseno',houseno,'streetname'
,streetname,'town',town,'postcode',postcode) from dummy;
Run Code Online (Sandbox Code Playgroud)
小智 5
无需创建任何虚拟表:只需使用命令:
insert into struct_test
select named_struct("houseno","house_number","streetname","xxxy","town","town_name","postcode","postcode_name");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14732 次 |
最近记录: |