Pig 使用 LOAD 覆盖配置单元中的数据

Posted

技术标签:

【中文标题】Pig 使用 LOAD 覆盖配置单元中的数据【英文标题】:Pig overwrite data in hive using LOAD 【发布时间】:2016-08-05 18:53:13 【问题描述】:

我是 Pig 和 hive 的新手,我需要使用 pig load-store 将存储在 hdfs 上的 csv 文件中的数据加载到 hive 表中。 我正在使用

load_resource_csv = LOAD '/user/hadoop/emp.csv' USING PigStorage(',')
 AS
 (dates:chararray,
  shipnode_key:chararray,
  delivery_method:chararray,

  );

STORE load_resource_csv
INTO 'employee'
USING org.apache.hive.hcatalog.pig.HCatStorer();

每次运行 Pig 脚本时,我都需要覆盖 hive 表中的数据。我该怎么做?

【问题讨论】:

***.com/questions/11110403/… @abhiieor 我需要通过pig脚本覆盖hive表数据。 当然,hive 只是定义了存储在 HDFS 中的数据的元数据,因此更改的 HDFS 数据也将反映在 hive 表中。 【参考方案1】:

使用fs shell 命令:fs -rm -f -r /path/to/dir:

load_resource_csv = LOAD '/user/cloudera/newfile' USING PigStorage(',')
 AS
 (name:chararray,
  skill:chararray
  );

fs -rm -r -f /user/hive/warehouse/stack/

STORE load_resource_csv INTO '/user/hive/warehouse/stack' USING PigStorage(',');

-------------- BEFORE ---------------------------
$ hadoop fs -ls /user/hive/warehouse/stack/
-rwxrwxrwx   1 cloudera supergroup         22 2016-08-05 18:31 /user/hive/warehouse/stack/000000_0

hive> select * from stack;
OK
bigDataLearner  hadoop

$ hadoop fs -cat /user/cloudera/newfile
bigDataLearner,spark

-------------- AFTER -------------------
$ hadoop fs -ls /user/hive/warehouse/stack
Found 2 items
-rw-r--r--   1 cloudera supergroup          0 2016-08-05 18:56 /user/hive/warehouse/stack/_SUCCESS
-rw-r--r--   1 cloudera supergroup         21 2016-08-05 18:56 /user/hive/warehouse/stack/part-m-00000

$ hadoop fs -cat /user/hive/warehouse/stack/*
bigDataLearner,spark

hive> select * from stack;
OK
bigDataLearner  spark
Time taken: 0.183 seconds, Fetched: 1 row(s)

【讨论】:

以上是关于Pig 使用 LOAD 覆盖配置单元中的数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Pig 中使用 Hcatalog 加载配置单元表时出错

Pig - 读取存储为 Avro 的 Hive 表

如何将配置从配置单元脚本传递到 UDF

使用 PIG 将数据写入 HIVE 外部表

如何将具有默认值的两列添加到配置单元中的现有表?

使用命令“插入覆盖目录”使用配置单元导出数据时如何打印输出文件大小