{"id":223217,"date":"2014-05-23T06:44:02","date_gmt":"2014-05-23T02:44:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=223217"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=223217","title":{"rendered":"<span class=\"post_title\">Hive vs Pig. \u041d\u0430 \u0447\u0442\u043e \u043c\u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e ETL?<\/span>"},"content":{"rendered":"<div class=\"content html_format\">     \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/f89\/76b\/518\/f8976b518238e2e622c57be082c10e85.jpg\" alt=\"image\"\/>  <\/p>\n<h4><i>\u041b\u0443\u0447\u0448\u0435 \u0434\u0435\u043d\u044c \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0437\u0430 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u0434\u043e\u043b\u0435\u0442\u0435\u0442\u044c (\u0441<\/i>)<\/h4>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442 \u043a\u043e\u043b\u043b\u0435\u0433\u0438.<br \/>  \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u043e \u0442\u043e\u043c, \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 Hive \u0438 Pig, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443 Hadoop. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u0434\u0432\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u0446\u0435\u043b\u044c \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0434\u043d\u0430 \u2014 \u0432\u0437\u044f\u0442\u044c \u043d\u0430 \u0441\u0435\u0431\u044f \u0432\u0441\u044e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e MapReduce, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0432\u0437\u0430\u043c\u0435\u043d \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0432 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u043a\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e \u0438\u043b\u0438 \u0438\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4><b>Hive<\/b><\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 Hive. \u0415\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0438\u0448\u043a\u0430 \u2014 \u044d\u0442\u043e SQL-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 HQL (Hive query language). \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c \u043d\u0430\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0442\u0430\u043a, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u043e\u0439. \u0421\u043a\u0440\u0438\u043f\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u043a \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0442\u0430\u043a \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>  <b>Hive \u044d\u0442\u043e:<\/b>  <\/p>\n<ul>\n<li>SQL-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u044f\u0437\u044b\u043a HQL <\/li>\n<li>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c<\/li>\n<li>\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (UDF)<\/li>\n<li>\u0414\u0430\u043d\u043d\u044b\u0435 \u2014 \u043a\u0430\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430<\/li>\n<\/ul>\n<p>  <b>Hive \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c:<\/b>  <\/p>\n<ul>\n<li>\u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 (\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b)<\/li>\n<li>\u0441 \u0441\u0436\u0430\u0442\u044b\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 (Gzip, Bzip)<\/li>\n<li>\u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438, \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c\u0438, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438 (union)<\/li>\n<li>\u0438\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441: \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u043c\u0438, \u0434\u0430\u0442\u0430\u043c\u0438, \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438, JSON-\u043c\u0438<\/li>\n<li>\u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 (\u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435, \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u044b, \u043a\u043e\u0440\u043d\u0438, \u0442\u0440\u0438\u0433\u043e\u043d\u043e\u043c\u0435\u0442\u0440\u0438\u044f)<\/li>\n<li>\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438 (sum, min, max, avg&#8230;)<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u044d\u043f\u043f\u0435\u0440\u044b \u0438 \u0440\u0435\u0434\u044c\u044e\u0441\u0435\u0440\u044b (python, java)<\/li>\n<\/ul>\n<p>  <b>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:<\/b>  <\/p>\n<pre><code class=\"sql\">--\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443. (\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043b\u043e\u0433\u0430) CREATE EXTERNAL TABLE win_bids_log ( date_field string, request_id string, user_ssp_id string, dsp_id string, win_price int ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' LOCATION 'hdfs:\/\/inpit\/bid-logs';  CREATE EXTERNAL TABLE win_bids_by_dsp ( dsp_id string, win_bids_cout int, win_price int )  ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' STORED AS TEXTFILE LOCATION ''hdfs:\/\/output\/win-bids-by-dsp'';  INSERT OVERWRITE TABLE win_bids_by_dsp SELECT dsp_id, COUNT(dsp_id), SUM(win_price) FROM win_bids_log  GROUP BY dsp_id; <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0432\u0441\u0451 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0430\u043a\u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043d\u0430 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u041d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0441\u0447\u0430\u0441\u0442\u044c\u0435 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438.<\/p>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435:<\/b>  <\/p>\n<pre><code class=\"sql\">INSERT OVERWRITE TABLE movieapp_log_stage  SELECT * FROM (  \tSELECT custid, movieid,  \t CASE WHEN genreid &gt; 0 THEN genreid ELSE -1 END genreid, time,  \t CAST((CASE recommended WHEN 'Y' THEN 1 ELSE 0 END) AS INT) recommended, activity,  \t CAST(null AS INT) rating, price  \t FROM movieapp_log_avro  \t WHERE activity IN (2,4,5,11)  \tUNION ALL  \tSELECT  \t m1.custid, m1.movieid,  \t CASE WHEN m1.genreid &gt; 0 THEN m1.genreid ELSE -1 END genreid, m1.time,  \t CAST((CASE m1.recommended WHEN 'Y' THEN 1 ELSE 0 END) AS INT) recommended,  \t m1.activity, m1.rating,  \t CAST(null as float) price  \t FROM movieapp_log_avro m1  \t JOIN ( \t\t SELECT custid,movieid,  \t\t CASE WHEN genreid &gt; 0 THEN genreid ELSE -1 END genreid,MAX(time) max_time,  \t\t activity  \t\t FROM movieapp_log_avro  \t\t GROUP BY custid, movieid, genreid, activity  \t ) m2  \t ON (  \t\t m1.custid = m2.custid  \t\t AND m1.movieid = m2.movieid  \t\t AND m1.genreid = m2.genreid  \t\t AND m1.time = m2.max_time  \t\t AND m1.activity = 1  \t\t AND m2.activity = 1  \t )  ) union_result; <\/code><\/pre>\n<p>  \u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u0420\u0430\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u0431\u044b \u044d\u0442\u043e \u0432\u0441\u0451 \u043f\u043e \u043f\u043e\u043b\u043e\u0447\u043a\u0430\u043c, \u0434\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438. \u041d\u0435 \u0442\u0430\u043a \u043b\u0438? <\/p>\n<p>  <b>\u0418\u0442\u043e\u0433\u043e:<\/b><\/p>\n<p>  <b>Hive \u043f\u043b\u044e\u0441\u044b:<\/b>  <\/p>\n<ul>\n<li>\u0421\u0442\u0430\u0440\u044b\u0439, \u0434\u043e\u0431\u0440\u044b\u0439 SQL \u2014 \u0445\u043e\u0440\u043e\u0448 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u043e\u043a. \u0414\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0435 \u0435\u0433\u043e \u0437\u043d\u0430\u044e\u0442.<\/li>\n<li>MapReduce \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c. \u0423\u0445\u043e\u0434\u0438\u0442 \u043c\u043d\u043e\u0433\u043e \u043e\u0432\u0435\u0440\u0445\u0435\u0434\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043e\u0431\u0432\u044f\u0437\u043a\u043e\u0439 \u0432\u043e\u043a\u0440\u0443\u0433 MR. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432, \u0446\u0435\u043f\u043e\u0447\u0435\u043a MR \u0437\u0430\u0434\u0430\u0447.<\/li>\n<li>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0425\u043e\u0440\u043e\u0448 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0440\u0435\u0437\u0430\u0445.<\/li>\n<li>\u0411\u044b\u0441\u0442\u0440\u043e\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/li>\n<li>\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0441\u0431\u043e\u0440\u043a\u0438 (\u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u043a\u0440\u044b\u0442\u043e)<\/li>\n<\/ul>\n<p>  <b>Hive \u041c\u0438\u043d\u0443\u0441\u044b:<\/b>  <\/p>\n<ul>\n<li> \u041d\u0435 \u0432\u0441\u0451 \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0443 HQL<\/li>\n<li> \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0432\u044b\u0431\u043e\u0440\u043a\u0430\u0445. \u041d\u043e \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0451 \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u0438 \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u0438\u0445 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u043f\u0438\u0441\u0430\u043b\u0438 \u043d\u0435 \u0432\u044b<\/li>\n<\/ul>\n<h4><b>Pig<\/b><\/h4>\n<p>  \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u043e Pig. \u041e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 Pig Latin. \u0427\u0442\u043e\u0431\u044b \u0432 \u043d\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0435 \u0442\u043e \u0432\u0440\u0435\u043c\u044f.<br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0438 \u043f\u043e\u0445\u043e\u0434\u0443 \u0432\u044b\u044f\u0441\u043d\u0438\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043e\u0442 Hive<\/p>\n<p>  <b>Pig \u044d\u0442\u043e:<\/b>  <\/p>\n<ul>\n<li>\u044f\u0437\u044b\u043a Pig Latin<\/li>\n<li>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c<\/li>\n<li>\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (UDF)<\/li>\n<li>\u0414\u0430\u043d\u043d\u044b\u0435 \u2014 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 (Tuple, Bag)<\/li>\n<\/ul>\n<p>  <b>Pig \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c:<\/b>  <\/p>\n<ul>\n<li>\u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 (\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b)<\/li>\n<li>\u0441 \u0441\u0436\u0430\u0442\u044b\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 (Gzip, Bzip)<\/li>\n<li>\u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438, \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c\u0438, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438 (union)<\/li>\n<li>\u0438\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441: \u0434\u0430\u0442\u0430\u043c\u0438, \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438<\/li>\n<li>\u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 (\u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435, \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u044b, \u043a\u043e\u0440\u043d\u0438, \u0442\u0440\u0438\u0433\u043e\u043d\u043e\u043c\u0435\u0442\u0440\u0438\u044f)<\/li>\n<li>\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438 (sum, min, max, avg&#8230;)<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (jython, java)<\/li>\n<\/ul>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, Pig \u0443\u043c\u0435\u0435\u0442 \u0432\u0441\u0451 \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 Hive. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043b\u0438\u0448\u044c \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432 \u044f\u0437\u044b\u043a\u0435. \u041d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Pig \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c Pig \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<br \/>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0444\u043e\u0440\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 Tuple \u0438 Bag.  <\/p>\n<ul>\n<li><b>Tuple<\/b> \u2014 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0435\u0439. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a \u043f\u043e\u043b\u044f\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0438\/\u0438\u043b\u0438 \u0438\u043c\u0435\u043d\u0438.<\/li>\n<li><b>Bag<\/b> \u2014 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f (\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e) Tuple.<\/li>\n<\/ul>\n<p>  <b>Pig Latin \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/b>  <\/p>\n<ul>\n<li>LOAD<\/li>\n<li>STORE<\/li>\n<li>GENERATE<\/li>\n<li>JOIN<\/li>\n<li>GROUP<\/li>\n<li>FILTER<\/li>\n<li>UNION<\/li>\n<li>DISTINCT<\/li>\n<li>ORDER<\/li>\n<\/ul>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Pig. \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0441 log \u0444\u0430\u0439\u043b\u043e\u043c RTB \u0431\u0438\u0440\u0436\u0438. \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0432\u0438\u0434\u0435:  <\/p>\n<ul>\n<li><b>time<\/b> \u2014 \u0432\u0440\u043c\u0435\u043c\u044f <\/li>\n<li><b>bid_id<\/b> \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0442\u0430\u0432\u043a\u0438, <\/li>\n<li><b>user_id<\/b> \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, <\/li>\n<li><b>dsp_id<\/b> \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0431\u0438\u0434\u0434\u0435\u0440\u0430 (\u0438\u0433\u0440\u043e\u043a\u0430) <\/li>\n<li><b>bid<\/b> \u2014 \u0441\u0442\u0430\u0432\u043a\u0430<\/li>\n<\/ul>\n<p>  <b>Pig \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (LOAD)<\/b><\/p>\n<p>  \u0414\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f LOAD, \u0442\u0430\u043a\u0436\u0435 \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b &#8216;\\t&#8217; \u0438 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0442\u0438\u043f).  <\/p>\n<pre><code class=\"sql\">--\u043f\u043e\u0447\u0438\u0441\u0442\u0438\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e HDFS (Pig \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b Hadoop) fs -rm -f -r -skipTrash \/data\/pig\/out  --\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e 'raw_data' raw_data = LOAD '\/data\/pig\/example\/' USING PigStorage('\\t') AS (time, bid_id, user_id, dsp_id, bid:int); <\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 (Tuple). \u0412 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043a \u0435\u0451 \u043f\u043e\u043b\u044f\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0447\u043a\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: raw_data.dsp_id  <\/p>\n<pre><code class=\"sql\">raw_data -&gt; tuple \u0441 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438. -------------------------------------------------------------------------------------------  time,  bid_id,  user_id,  dsp_id,  bid -------------------------------------------------------------------------------------------  (2014.02.14 14:08:27.711,  56949,  45234534553459,  DSP-2,  12) (2014.02.14 14:08:28.712,  61336,  45221696259999,  DSP-1,  56) (2014.02.14 14:08:29.713,  74685,  45221699381039,  DSP-2,  89) (2014.02.14 14:08:30.714,  56949,  45221695781716,  DSP-1,  21) (2014.02.14 14:08:25.715,  27617,  45221682863705,  DSP-3,  22) <\/code><\/pre>\n<p>  <b>Pig \u2014 \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (FOREACH \u2014 GENERATE)<\/b><br \/>  FOREACH \u2014 GENERATE \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u00ab\u0431\u0435\u0436\u0430\u0442\u044c\u00bb \u043f\u043e \u043d\u0430\u0431\u043e\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0434\u0430\u0442\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u0443\u0431\u0440\u0430\u0432 \u0432\u0441\u0451 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e\u0435.  <\/p>\n<pre><code class=\"sql\">--\u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435. \u041e\u0431\u0440\u0435\u0436\u0435\u043c timestamp \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SUBSTRING norm_data = FOREACH raw_data GENERATE SUBSTRING(time, 0,10) AS date, dsp_id, bid; <\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u043d\u043e \u0441 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u043d\u043e\u0439 \u0434\u0430\u0442\u043e\u0439, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u043b\u044f\u043c\u0438: dsp_id, bid.<\/p>\n<pre><code class=\"sql\">norm_data -&gt; tuple \u0441 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0438 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u043d\u043e\u0439 \u0434\u0430\u0442\u043e\u0439 --------------------------------------- date,   dsp_id,   bid --------------------------------------- (2014.02.14,   DSP-2,   12) (2014.02.14,   DSP-1,   56) (2014.02.14,   DSP-2,   89) (2014.02.14,   DSP-1,   21) <\/code><\/pre>\n<p>  <b>Pig \u2014 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (GROUP)<\/b><br \/>  GROUP \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u0434\u0430\u0432\u0430\u044f \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.  <\/p>\n<pre><code class=\"sql\">--\u0421\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u043e dsp_id \u0438 date  group_norm_data = GROUP norm_data BY (dsp_id, date); <\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u043c\u0435\u0435\u043c: <br \/>  \u0433\u0440\u0443\u043f\u043f\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430. \u041a \u043d\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 group. <br \/>  \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c norm_data  <\/p>\n<pre><code class=\"sql\">group_norm_data -&gt; (\u0433\u0440\u0443\u043f\u043f\u0430 \u043a\u0430\u043a \u043a\u043b\u044e\u0447) : [ (norm_data), (norm_data) ] ----------------------------------------------------------------------------------  ( group),  array of norm_data ---------------------------------------------------------------------------------- ( (DSP-1,  2014.02.14),  {(2014.02.14,  DSP-1,  56),  (2014.02.14,  DSP-1,  21)} ) ( (DSP-1,  2014.02.17),  {(2014.02.17,  DSP-1,  34),  (2014.02.17,  DSP-1,  24)} ) ( (DSP-2,  2014.02.14),  {(2014.02.14,  DSP-2,  89),  (2014.02.14,  DSP-2,  12)} ) <\/code><\/pre>\n<p>  <b>Pig \u2014 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u043a\u0430 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432 (FLATTEN)<\/b><br \/>  \u0418\u043d\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u044b \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 (\u00ab\u0432\u044b\u043f\u0440\u044f\u043c\u0438\u0442\u044c\u00bb).<br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f FLATTEN  <\/p>\n<pre><code class=\"sql\">-- \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u044b \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 ft_group_norm_data = FOREACH group_norm_data GENERATE FLATTEN(group), FLATTEN(norm_data); <\/code><\/pre>\n<p>  \u0418\u0437 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 Tuples.  <\/p>\n<pre><code class=\"sql\">ft_group_norm_data -&gt; tuple \u0441 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 ---------------------------------------------------------------------- dsp_id, date date dsp_id bid ----------------------------------------------------------------------- (DSP-1, 2014.02.14, 2014.02.14, DSP-1, 56) (DSP-1, 2014.02.14, 2014.02.14, DSP-1, 21) (DSP-1, 2014.02.15, 2014.02.15, DSP-1, 15) (DSP-1, 2014.02.15, 2014.02.15, DSP-1, 31) <\/code><\/pre>\n<p>  <b>Pig \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438 (SUM)<\/b><br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0443\u043c\u043c\u0443 \u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0441\u0442\u0430\u0432\u043e\u043a, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0436\u0434\u044b\u043c \u0431\u0438\u0434\u0434\u0435\u0440\u043e\u043c.  <\/p>\n<pre><code class=\"sql\">--\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u043c \u0441\u0443\u043c\u043c\u0443 \u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0441\u0442\u0430\u0432\u043e\u043a, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0436\u0434\u044b\u043c \u0431\u0438\u0434\u0434\u0435\u0440\u043e\u043c sum_bids_dsp = FOREACH group_norm_data GENERATE group, SUM(norm_data.bid) AS bids_sum; <\/code><\/pre>\n<pre><code class=\"sql\">sum_bids_dsp -&gt; \u0433\u0440\u0443\u043f\u043f\u0430 : bids_sum ------------------------------------------------------    group,   bids_sum ------------------------------------------------------ ( (DSP-1, 2014.02.16),    82) ( (DSP-1, 2014.02.17),    58) ( (DSP-2, 2014.02.14),    101) ( (DSP-2, 2014.02.16),    58) <\/code><\/pre>\n<p>  <b>Pig \u2014 GROUP ALL<\/b><br \/>  \u0427\u0430\u0441\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u00ab\u0437\u0430\u043f\u0438\u0441\u0435\u0439\u00bb \u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0435. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c COUNT \u043a \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u2014 \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f. \u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0434\u043e \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u043e\u0434\u043d\u0443 \u0433\u0440\u0443\u043f\u043f\u0443 \u0438 \u0443\u0436\u0435 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438.  <\/p>\n<pre><code class=\"sql\">--\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u043c \u043e\u0431\u0449\u0443\u044e \u0441\u0443\u043c\u043c\u0443, \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u0440\u0443\u043f\u043f. --\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0432\u0435\u0440\u043d\u0435\u043c \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u0443 \u0433\u0440\u0443\u043f\u043f\u0443.  group_all = GROUP sum_bids_dsp ALL; <\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u043c\u0435\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0443 \u2014 \u00aball\u00bb \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432.  <\/p>\n<pre><code class=\"sql\">( all, { ((DSP-1,2014.02.14),77), ((DSP-1,2014.02.15),67), ((DSP-1,2014.02.16),82),((DSP-1,2014.02.17),58),((DSP-2,2014.02.14),101),((DSP-2,2014.02.16),58),((DSP-2,2014.02.17),123),((DSP-3,2014.02.14),22),((DSP-3,2014.02.15),109),((DSP-3,2014.02.16),136),((DSP-3,2014.02.17),81) } ) <\/code><\/pre>\n<p>  \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0441\u0443\u043c\u043c\u0443  <\/p>\n<pre><code class=\"sql\">summary = FOREACH group_all GENERATE COUNT(sum_bids_dsp), SUM(sum_bids_dsp.bids_sum); <\/code><\/pre>\n<p>  \u0412\u044b\u0445\u043e\u0434  <\/p>\n<pre><code class=\"sql\">------------------------------------------------------   count,   sum ------------------------------------------------------ (11,         914) <\/code><\/pre>\n<p>  \u041f\u043e-\u043c\u043e\u0435\u043c\u0443, \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u0412\u0441\u0451 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0448\u0430\u0433\u0438. \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u0442\u0430\u043f \u043c\u043e\u0436\u043d\u043e \u0441\u043d\u0430\u0431\u0436\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438.<\/p>\n<p>  <b>\u0418\u0442\u043e\u0433\u043e:<\/b><\/p>\n<p>  <b>Pig \u043f\u043b\u044e\u0441\u044b:<\/b>  <\/p>\n<ul>\n<li>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u0423\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u044c! \u042f\u0437\u044b\u043a \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u0430 \u0431\u043b\u043e\u043a\u0438, \u043a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0433 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438.<\/li>\n<li>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 MapReduce \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c. \u0423\u0445\u043e\u0434\u0438\u0442 \u043c\u043d\u043e\u0433\u043e \u043e\u0432\u0435\u0440\u0445\u0435\u0434\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043e\u0431\u0432\u044f\u0437\u043a\u043e\u0439 \u0432\u043e\u043a\u0440\u0443\u0433 MR. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432, \u0446\u0435\u043f\u043e\u0447\u0435\u043a MR \u0437\u0430\u0434\u0430\u0447.<\/li>\n<li>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0425\u043e\u0440\u043e\u0448 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0440\u0435\u0437\u0430\u0445.<\/li>\n<li>\u0411\u044b\u0441\u0442\u0440\u043e\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0441\u0431\u043e\u0440\u043a\u0438<\/li>\n<\/ul>\n<p>  <b>Pig \u041c\u0438\u043d\u0443\u0441\u044b:<\/b>  <\/p>\n<ul>\n<li>\u041d\u0435 \u0432\u0441\u0451 \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u044f\u0437\u044b\u043a Pig Latin<\/li>\n<li>Pig Latin \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u0435\u043d, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 HQL<\/li>\n<li>\u0414\u043b\u044f UDF \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Jython. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/li>\n<\/ul>\n<p>  <b>\u0420\u0435\u0437\u044e\u043c\u0435:<\/b><\/p>\n<ul>\n<li><b>Hive <\/b> \u0445\u043e\u0440\u043e\u0448 \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0432\u044b\u0431\u043e\u0440\u043e\u043a. HQL \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 SQL, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c.<\/li>\n<li><b>Pig<\/b> \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u0437\u0430\u0442\u043e, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043b\u0435\u0433\u0447\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0438 \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0443\u043f\u0435\u043d\u0447\u0430\u0442\u044b\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438. \u0412\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0438 \u0443\u043c\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438.<\/li>\n<\/ul>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0438 \u0432\u0430\u0448\u0438 \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u0442\u0435 SQL, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u043d\u0438\u043c \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e, \u0438 \u0432\u0430\u0441 \u043d\u0435 \u0441\u043c\u0443\u0449\u0430\u044e\u0442 \u0437\u0443\u0431\u043e\u0434\u0440\u043e\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0442\u043e Hive \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 SQL \u044d\u043f\u0438\u0437\u043e\u0434\u0438\u0447\u043d\u043e \u0438 \u0432\u0430\u0448 data workflow \u043d\u0435 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0442\u043e \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0434\u0435\u043d\u044c \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 Pig. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u0430\u043c, \u0438 \u0432\u0430\u0448\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c.      \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/223217\/\"> http:\/\/habrahabr.ru\/post\/223217\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">     \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/f89\/76b\/518\/f8976b518238e2e622c57be082c10e85.jpg\" alt=\"image\"\/>  <\/p>\n<h4><i>\u041b\u0443\u0447\u0448\u0435 \u0434\u0435\u043d\u044c \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0437\u0430 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u0434\u043e\u043b\u0435\u0442\u0435\u0442\u044c (\u0441<\/i>)<\/h4>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442 \u043a\u043e\u043b\u043b\u0435\u0433\u0438.<br \/>  \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u043e \u0442\u043e\u043c, \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 Hive \u0438 Pig, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443 Hadoop. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u0434\u0432\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u0446\u0435\u043b\u044c \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0434\u043d\u0430 \u2014 \u0432\u0437\u044f\u0442\u044c \u043d\u0430 \u0441\u0435\u0431\u044f \u0432\u0441\u044e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e MapReduce, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0432\u0437\u0430\u043c\u0435\u043d \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0432 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u043a\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e \u0438\u043b\u0438 \u0438\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-223217","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/223217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=223217"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/223217\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=223217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=223217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=223217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}