apache-pig - PigLatin - 将数据插入现有分区?

标签 apache-pig hcatalog

我有一个文件 test_file_1.txt 包含:

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;

这两个脚本运行良好:

脚本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 无法写入包含数据的分区(或者我错过了什么?) 如何管理加载到现有分区(在非空的非分区表上)? 您是否读取分区,将其与新数据合并,删除分区(如何?)并将其作为新分区插入?

最佳答案

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

他们正在解决与此相关的错误。 Hive 0.13 中修复了一些错误:

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

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

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

使用 org.apache.hcatalog.pig.HCatStorer('build_num=${build_num}';

将 LoadFile 存储到“partition_pk”中

只是不要在查询中包含 build_num 分区。我通常将 build_num 设置为运行作业时的时间戳;

关于apache-pig - PigLatin - 将数据插入现有分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22966834/

相关文章:

csv - 如何在PIG中将XLSX文件转换为CSV文件?

hive - 在 HBase 现有表之上定义 Hive 外部表

hadoop - 如何使用动态生成的分区值将Pig脚本的输出插入到配置单元外部表中?

java - 通过汇总警告来调试Pig UDF

Hadoop Pig - 如何设置中间结果的目录

hadoop - 作为输入可以使用Apache Pig Load Function Bag吗?

hadoop - pig : How to remove '::' in the column name

hadoop - 在 HDP Hue Pig UI 中运行任何 Pig 作业时出错。错误 : "Please initialize HIVE_HOME"

hadoop - Oozie Java Action 在使用 HCat 摄取期间失败?

hadoop - 在 JobContext 中找不到工作信息