2015-02-05 2 views
0

맞춤 Google 웹 로그 분석 캠페인 매개 변수 (utm_source, utm_medium, utm_campaign)로 태그가 지정된 URL이있는 로그 파일이 있습니다. url에서 매개 변수를 추출하고 소스, 매체 및 캠페인이 각각 자신의 열 (로그 파일의 다른 여러 필드)에 각각 나타나는 csv 파일을 작성해야합니다. 내가 어떻게 시작 이것은Apache Pig : 임의의 순서로 나타나는 URL 검색어 매개 변수 추출

(URL 분명히 URL을 포함하는 필드) :

extracted = foreach mydata GENERATE date, time, 
FLATTEN(REGEX_EXTRACT_ALL(url, '.*utm_source=(.*)&utm_medium=(.*)&utm_campaign=(.*)&.*?')) 
AS (source:CHARARRAY, medium:CHARARRAY, campaign:CHARARRAY); 

이 작동,하지만 한 매개 변수가 고정 된 순서로 나타납니다 (다른 덧붙일되지 않는 한 매개 변수).

https://www.example.com/page.html?&utm_source=publisher&utm_medium=display&utm_campaign=standard&someotherparam에서 데이터를 추출하지만 https://www.example.com/page.html?&utm_medium=display&utm_source=publisher&utm_campaign=standard&someotherparam에서 데이터를 추출하지 않습니다. 매개 변수 순서가 일관성이 없기 때문에 나를 위해 작동하지 않습니다.

정규식에 대해 여러 조건을 or (|)로 구분하여 시도했지만 그 중 첫 번째 일치 항목 만 제공했습니다. 나는 또한 그것의 자신의 추출 명령에 각 매개 변수를 추출한 다음 데이터를 조인하려고했지만 연령이 오래 걸리고 데이터 복제가 끝났다.

그래서 내 돼지 명령을 다시 쓰는 것이 최선의 (또는 적어도 작동하는) 방법으로, URL에서 세 개의 utm 매개 변수가 모두 나타나는 순서와 독립적으로 추출됩니다. 당신은 단지 하나의 정규식 함께 할 아마 수 있지만, 나는이 간단하고 readdable 찾을 수 있지만

... FOREACH mydata GENERATE FLATTEN(REGEX_EXTRACT(url, '.*utm_source=([^&]*)'), 1) AS (source:CHARARRAY) 
... 

:

답변

1

단순히 세 REGEX_ECTRACT있을 것입니다.

+0

저는 실제로이 문제를 시도했으며 작동하지 않는다고 확신하는 이유가되었습니다. 나는 내 문제가 그 해결책과 관련이 있다는 것을 기억하려고 노력하며, 내일 기억하지 못한다면 나는 받아 들일 것이다 :-) –

관련 문제