我是Hadoop
和Big Data
的新手。我有Hive
版本Hive 1.1.0-cdh5.4.0
现在在HIVE
表中创建复杂数据类型的一些基本问题。我有一个客户表创建为:
create external table if not exists customer_details1 (customerId string, mobileNumber string, address ARRAY <STRUCT<houseNo:string,street1:string>>);
我想使用push data
INSERT statements
进入此表格。有人可以告诉我如何使用command prompt
将虚拟记录推送到此表中吗?
我不想使用外部文件(LOAD DATA)将数据推送到此。
请有人帮助我吗?
答案 0 :(得分:1)
在Hive中创建表:
create table if not exists mytable1 (id int, name string, address array<struct<street : string, town : string>>) comment 'my practice table' ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
我认为Hive目前不支持简单的插入查询。
答案 1 :(得分:1)
通常外部表只是一个包装器,可以让Hive从平面文件中读取。
如果您想将数据加载到Hive表中(如在LOAD-INSERT或INSERT-SELECT中),您应该考虑托管表。它默认使用序列格式,但您可以选择Orc,Text,Avro等等。
如果要运行原子插入(如在INSERT-VALUES中),您需要Hive V0.14 +以及具有事务支持 =&gt;的托管表。需要Orc在背景中进行分组,定期压缩等等
如果您能够应对这一挑战,那么阅读文档可能会证明是有用的,例如: Inserting values into tables from SQL和Hive Transactions rationale
答案 2 :(得分:0)
正如@Samson Scharfrichter所提到的,可能无法对表格进行原子插入数组结构。我决定将我的表移动到hbase,以支持在写入时添加列的灵活性。感谢所有的建议和指导。