仅在4个字段中加载2个字段 - Pig to Hive表

时间:2017-02-16 08:51:33

标签: hive hdfs apache-pig

请帮助提醒。

场景:使用Pig将数据从HDFS存储到Hive。

我有来自mySQL的文件,它有4个字段Ord_Id, Cust_Id, Cust_name, Ord_date。我喜欢只将2个字段Ord_Id和Cust_Id存储到Hive。我怎么能这样做?请指教。

下面的代码无法执行:

pig -useHCatalog
orders = LOAD '<HDFS_file_path>' USAGE PigStorage(',') AS (Ord_Id:Int, Cust_Id:Int, Cust_name:chararray, Ord_date:chararray);
STORE orders INTO 'pig_demo.orders' USAGE org.apache.hive.hcatalog.pig.HCatStorer();

感谢。

2 个答案:

答案 0 :(得分:0)

首先,您的表应该已经存在于hive中,并且您希望从pig存储相同的列名。

orders = LOAD '<HDFS_file_path>' USAGE PigStorage(',') AS 
(Ord_Id:Int, Cust_Id:Int, Cust_name:chararray, Ord_date:chararray);

select_columns = FOREACH orders GENERATE Ord_Id AS ord_id, Cust_Id AS cust_id;

STORE select_columns INTO 'pig_demo.orders' USING org.apache.hive.hcatalog.pig.HCatStorer();

也请参考HCatalog LoadStore

答案 1 :(得分:0)

如果目标是在hive中只有一个只有两列的表,那么你可以使用SQOOP的--columns参数来特定这两个具有--hive-import选项的coulmns并避免使用完全执行额外的PIG脚本。

之类的东西 -

sqoop import \
--connect jdbc:mysql://cloudera.quickstart:3306/retail_db \
--table orders \
--columns Ord_Id, Cust_Id \
--hive-import \
--direct