2014-04-09 30 views
2

我有一个文件test_file_1.txt包含:含PigLatin - 将数据插入现有分区?

20140101,value1 
20140102,value2 

和文件test_file_2.txt

20140103,value3 
20140104,value4 

在HCatalog有一个表:

create table stage.partition_pk (value string) 
Partitioned by(date string) 
stored as orc; 

这两个脚本的工作很好:

Sc RIPT 1:

LoadFile = LOAD 'test_file_2.txt' using PigStorage(',') AS (date : chararray, wartosc : chararray); 
store LoadFile into 'stage.partition_pk' using org.apache.hcatalog.pig.HCatStorer(); 

脚本2:

LoadFile = LOAD 'test_file_2.txt' using PigStorage(',') 
AS (date : chararray, wartosc : chararray); 
store LoadFile into 'stage.partition_pk' using org.apache.hcatalog.pig.HCatStorer(); 

partition_pk包含四个分区 - 一切都如预期。

但让我们说,还有另一个文件包含应该插入到一个现有分区中的数据。 Pig无法写入包含数据的分区(或者我错过了某些内容?) 如何管理加载到现有分区(不是空的非分区表)? 您是否阅读分区,将其与新数据联合,删除分区(如何?)并将其作为新分区插入?

回答

2

来自HCatalog的网站https://cwiki.apache.org/confluence/display/Hive/HCatalog+UsingHCat,它说:“一旦创建了分区,就不能将记录添加到记录中,也不能将其更新。”因此,根据HCatalog的性质,您无法将数据添加到已有数据的现有分区。

他们正在努力解决这个问题。一些错误的被固定在配置单元0.13:

https://issues.apache.org/jira/browse/HIVE-6405(仍然没有解决) - 具体到 - 对可变 https://issues.apache.org/jira/browse/HIVE-6476(仍然没有解决)单独的表属性 - 用于跟踪所述其他错误 https://issues.apache.org/jira/browse/HIVE-6406(在0.13解决)的错误动态分区 https://issues.apache.org/jira/browse/HIVE-6475 - 解析为0.13 - 特定于静态分区 https://issues.apache.org/jira/browse/HIVE-6465(仍未解决) - 向HCatalog添加DDL支持 基本上,看起来如果您不想使用动态分区,那么0.13可能适合您。你只需要记住设置适当的属性

我发现我的作品是创建另一个分区键,我称之为build_num。然后,我通过命令行传递此参数的值,并将其设置在商店语句中。像这样:

创建表stage.partition_pk(值字符串) 由(日期字符串,build_num字符串) 存储为兽人分区;

STORE的LoadFile为 'partition_pk' 使用org.apache.hcatalog.pig.HCatStorer( 'build_num = $ {build_num}';

只是不包括在查询的build_num分区。当我运行这个工作时,我通常将build_num设置为时间戳。使用多个分区

+0

Thans为您的答案。你写道:_Basically,它看起来像如果你不想使用动态分区,那么0.13可能适合你。你只需要记住设置适当的属性。你的意思是哪个参数?哪个bug解决了我的问题?谢谢 –

+0

我更新了我的答案,以包含适用于我的解决方法。 – user2370813

+0

感谢你与其他分区。你有没有检查过这个分区是否会影响桌面?它是不是沉没了休息时间? –

1

尝试:

create table stage.partition_pk (value string) Partitioned by(date string, counter string) stored as orc; 

存储这个样子的:

LoadFile = LOAD 'test_file_2.txt' using PigStorage(',') AS (date : chararray, wartosc : chararray); 
store LoadFile into 'stage.partition_pk' using org.apache.hcatalog.pig.HCatStorer('date=20161120, counter=0'); 

所以现在你可以再次的数据通过增加柜台存入同日分区。

相关问题