在 PIG 中是否可以通过定义列字段值来创建列字段

Is it possible in PIG to create column field by defining column field value

假设我有以下结构化数据文件

1298712012061228765236542123049824234209374 1203972012073042198531203948203498023498023 1203712012092329385612350924395798456892345 1234812012101223423498230482034893204820398

在上面的文件中,前 6 位是来自 (1-6) 的 UserId,接下来的 8 位是来自 (7-12) 列的 year_date 接下来的 6 列是来自 (13-18) 的 Count 字段,然后同样,对于上述平面文件,我有来自 (19-30) 的 product_id 和来自 (31-42) 的 Character_values 列,所以我希望我的数据采用以下格式。我的意思是我想使用这个提到的字段加载我的数据。 PIG 或 HIVE 中是否有可用的选项?

可以使用 SUBSTRING 吗?

A = LOAD 'DATA' USING PigStorage() AS (line); 
B = FOREACH A GENERATE SUBSTRING(line,1,6) AS UserID, SUBSTRING(line,7,12) AS Year_date ...

你可以在 pig 和 hive 中使用它。两种解决方案如下
小猪:

data = LOAD '/data.txt' USING PigStorage() AS (line);
strsplit = FOREACH data GENERATE 
SUBSTRING(line,1,6) AS UserID,
SUBSTRING(line,7,12) AS year_date,
SUBSTRING(line,13,18) AS Count,
SUBSTRING(line,19,30) AS product_id,
SUBSTRING(line,31,42) AS Character_values;  

当你转储时:
转储strsplit; (29871,29871,29871,29871,29871)
(20397,20397,20397,20397,20397)
(20371,20371,20371,20371,20371)
(23481,23481,23481,23481,23481)

蜂巢:

第一步:创建临时文件table并加载原始数据;

create table temp(line String)
ROW FORMAT DELIMITED
LINES TERMINATED BY '\n';
LOAD DATA INPATH '/data.txt' INTO TABLE temp;  

第 2 步:创建适合您数据的 table。

   create table user(UserID String,year_date String,Count String,product_id String,Character_values String)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'; 

第 3 步:将您的温度 table 插入 actula table

INSERT INTO TABLE user
SELECT substr(line,0,6),substr(line,7,12),substr(line,13,18),substr(line,19,30),substr(line,31,42)FROM temp;