Можно ли в PIG создать поле столбца, определив значение поля столбца

Предположим, у меня есть ниже файл структурированных данных

1298712012061228765236542123049824234209374 1203972012073042198531203948203498023498023 1203712012092329385612350924395798456892345 1234812012101223423498230482034893204820398

Здесь в приведенном выше файле первые 6 цифр - это UserId из (1-6), следующие 8 цифр - это year_date из (7-12) столбца, следующие 6 столбцов - это поле Count из (13-18), затем аналогично у меня product_id из (19-30)) и столбец Character_values ​​из (31-42) для указанного выше плоского файла, поэтому я хочу получить данные в следующем формате. Я хочу сказать, что я хочу загрузить свои данные, используя это упомянутое поле. Есть ли какой-либо вариант в PIG или HIVE для этого?

2 ответа

Решение

Вы можете использовать его как в свинье, так и в улье. Два решения ниже
PIG:

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;  

Когда вы сбрасываете:
свалка стрсплит; (29871,29871,29871,29871,29871)
(20397,20397,20397,20397,20397)
(20371,20371,20371,20371,20371)
(23481,23481,23481,23481,23481)

Улей:

Шаг 1: создайте временную таблицу и загрузите исходные данные;

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

Шаг 2: создайте таблицу, которая будет соответствовать вашим данным.

   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: Вставьте временную таблицу в таблицу Actula

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;

Вы можете использовать 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 ...
Другие вопросы по тегам