рдПрдХ рджрд┐рди рдЦреЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдкрд╛рдВрдЪ рдорд┐рдирдЯ рдореЗрдВ рдЙрдбрд╝рд╛рди рднрд░реЗрдВ
рд╣рд╛рдп рд╕рд╛рдерд┐рдпреЛрдВ!
рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ Hadoop рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ Hive рдФрд░ Pig рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рджреЛ рд╕рдорд╛рди рдЙрддреНрдкрд╛рдж рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реА рд▓рдХреНрд╖реНрдп рд╣реИ - MapReduce рдХреЗ рд╕рдВрдкреВрд░реНрдг рддрдХрдиреАрдХреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рд░ рд╕реНрддрд░ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдирдореВрдиреЗ рдЗрди рджреЛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдордзреБрдореБрдЦреА рдХрд╛ рдЫрддреНрддрд╛
рддреЛ, рдЪрд▓реЛ рд╣рд╛рдЗрд╡ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ SQL-рдЬреИрд╕реА HQL рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╣рдо рдПрдХ рдирд┐рдпрдорд┐рдд рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдереЗред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЫрддреНрддрд╛ рд╣реИ:
- SQL- рдЬреИрд╕реЗ HQL
- рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдХрдВрд╕реЛрд▓
- рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдХрд╛рд░реНрдп
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реБрд╡рд┐рдзрд╛ рд╕рдорд░реНрдерди (UDF)
- рдбреЗрдЯрд╛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреА рддрд░рд╣ рд╣реИ
рдЫрддреНрддрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
- рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде (рдЖрдк рдПрдХ рд╕реАрдорд╛рдВрдХрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
- рд╕рдВрдкреАрдбрд╝рд┐рдд рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде (Gzip, Bzip)
- рд╕рд░рдгрд┐рдпреЛрдВ, рд╢рдмреНрджрдХреЛрд╢реЛрдВ, рдпреВрдирд┐рдпрдиреЛрдВ (рд╕рдВрдШ) рдХреЗ рд╕рд╛рде
- рд╕рдВрдЧреНрд░рд╣, рджрд┐рдирд╛рдВрдХ, рддрд╛рд░, JSON: рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ
- рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде (рдЧреЛрд▓рд╛рдИ, рд▓рдШреБрдЧрдгрдХ, рдореВрд▓, рддреНрд░рд┐рдХреЛрдгрдорд┐рддрд┐)
- рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде (рдпреЛрдЧ, рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо, рдФрд╕рдд ...)
- рдпрджрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдереЗ, рддреЛ рдЖрдк рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рдВрд╕, рд╕рд╛рде рд╣реА рдореИрдкрд░ рдФрд░ рд░реАрдбреНрдпреВрд╕рд░ (рдЕрдЬрдЧрд░, рдЬрд╛рд╡рд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:
-- . ( ) 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;
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдПрдХ рдкрд░рд┐рдЪрд┐рдд рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рд╢реНрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЦреБрд╢реА рддрдм рддрдХ рдЬрд╛рд░реА рд░рд╣рддреА рд╣реИ рдЬрдм рддрдХ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ:
INSERT OVERWRITE TABLE movieapp_log_stage SELECT * FROM ( SELECT custid, movieid, CASE WHEN genreid > 0 THEN genreid ELSE -1 END genreid, time, CAST((CASE recommended WHEN 'Y' THEN 1 ELSE 0 END) AS INT) recommended, activity, CAST(null AS INT) rating, price FROM movieapp_log_avro WHERE activity IN (2,4,5,11) UNION ALL SELECT m1.custid, m1.movieid, CASE WHEN m1.genreid > 0 THEN m1.genreid ELSE -1 END genreid, m1.time, CAST((CASE m1.recommended WHEN 'Y' THEN 1 ELSE 0 END) AS INT) recommended, m1.activity, m1.rating, CAST(null as float) price FROM movieapp_log_avro m1 JOIN ( SELECT custid,movieid, CASE WHEN genreid > 0 THEN genreid ELSE -1 END genreid,MAX(time) max_time, activity FROM movieapp_log_avro GROUP BY custid, movieid, genreid, activity ) m2 ON ( m1.custid = m2.custid AND m1.movieid = m2.movieid AND m1.genreid = m2.genreid AND m1.time = m2.max_time AND m1.activity = 1 AND m2.activity = 1 ) ) union_result;
рдмреЗрд╢рдХ рдЖрдк рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрджреЗрд╢ рдХреА рдХрдореА рд╣реИред рдпрд╣ рд╕рдм рдЕрд▓рдорд╛рд░рд┐рдпреЛрдВ рдкрд░ рд░рдЦреЛ, рд▓реЗрдХрд┐рди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред рд╣реИ рдирд╛?
рдХреБрд▓:
рдЫрддреНрддрд╛ рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдирдореВрдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рдПрд╕рдХреНрдпреВрдПрд▓ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рд╛рдБ, рдФрд░ рдмрд╕ рд╣рд░ рдХреЛрдИ рдЙрд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИред
- рд╣реБрдб рдХреЗ рдиреАрдЪреЗ MapReduceред рдпрд╣ рдПрдордЖрд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕реНрдЯреНрд░реИрдкрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╣реБрдд рдЕрдзрд┐рдХ рдУрд╡рд░рд╣реЗрдб рд▓реЗрддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдореЙрдбрд▓, рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рд░реВрдк, рдПрдордЖрд░ рдХрд╛рд░реНрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╡рд┐рд╡рд░рдгред
- рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ред рд╡рд┐рднрд┐рдиреНрди рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред
- рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐
- рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрднрд╛рд╡, рд╕рдВрдХрд▓рди, рд╕рдВрдпреЛрдЬрди (рдпрд╣ рд╕рдм рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ)
рдЫрддреНрддрд╛ рд╡рд┐рдкрдХреНрд╖:
- HQL рдкреНрд░рддрд┐рдорд╛рди рдореЗрдВ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдпрд╣ рд╕рд░рд▓ рдирдореВрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрдврд╝рддреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде, рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрдирд╛ рдХрдард┐рди рдФрд░ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдиреЗ рдирдореВрдирд╛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ
рд╕реВрдЕрд░
рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рд╕реБрдЕрд░ рдХреАред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рдкрд┐рдЧ рд▓реИрдЯрд┐рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдЪрд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рд╛рдЗрд╡ рд╕реЗ рдЕрдВрддрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ
рд╕реБрдЕрд░ рд╣реИ:
- рд╕реБрдЕрд░ рд▓реИрдЯрд┐рди
- рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдХрдВрд╕реЛрд▓
- рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдХрд╛рд░реНрдп
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реБрд╡рд┐рдзрд╛ рд╕рдорд░реНрдерди (UDF)
- рдбреЗрдЯрд╛ - рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ (рдЯрдкрд▓, рдмреИрдЧ)
рд╕реБрдЕрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
- рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде (рдЖрдк рдПрдХ рд╕реАрдорд╛рдВрдХрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
- рд╕рдВрдкреАрдбрд╝рд┐рдд рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде (Gzip, Bzip)
- рд╕рд░рдгрд┐рдпреЛрдВ, рд╢рдмреНрджрдХреЛрд╢реЛрдВ, рдпреВрдирд┐рдпрдиреЛрдВ (рд╕рдВрдШ) рдХреЗ рд╕рд╛рде
- рддрд╛рд░реАрдЦреЛрдВ, рддрд╛рд░, рд╕рдВрд░рдЪрдирд╛рдУрдВ: рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ
- рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде (рдЧреЛрд▓рд╛рдИ, рд▓рдШреБрдЧрдгрдХ, рдореВрд▓, рддреНрд░рд┐рдХреЛрдгрдорд┐рддрд┐)
- рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде (рдпреЛрдЧ, рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо, рдФрд╕рдд ...)
- рдпрджрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдереЗ, рддреЛ рдЖрдк рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рдВрд╕ (jython, java) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реБрдЕрд░ рд╣рд╛рдЗрд╡ рдХреЗ рд╕рдорд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рднрд╛рд╖рд╛ рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рдпрд╣реА рдЕрдВрддрд░ рд╣реИ рдЬреЛ рд╕реБрдЕрд░ рдХреЛ рдПрдХ рдирдП рд╕реНрддрд░ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
рдЪрд▓реЛ рд╕реБрдЕрд░ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдпрд╣ рдврд╛рдВрдЪрд╛ рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЯрдкрд▓ рдФрд░ рдмреИрдЧред
- Tuple рдЦреЗрддреЛрдВ рдХрд╛ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╕реЗрдЯ рд╣реИред рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдЬрд┐рд╕рдХреЗ рдЦреЗрддреЛрдВ рдХреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ / рдпрд╛ рдирд╛рдо рд╕реЗ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдмреИрдЧ - рдЯрдкрд▓ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ (рд╕реЗрдЯ)ред
рд╕реБрдЕрд░ рд▓реИрдЯрд┐рди рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдп:
- рд▓реЛрдб
- рд╕реНрдЯреЛрд░
- рдЙрддреНрдкрдиреНрди
- рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ
- рдЧреНрд░реБрдк
- рдлрд╝рд┐рд▓реНрдЯрд░
- рдпреВрдирд┐рдЕрди
- DISTINCT
- рдЖрджреЗрд╢
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рд╕реБрдЕрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо RTB рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреА рд▓реЙрдЧ рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдбреЗрдЯрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ:
- рд╕рдордп - рд╕рдордп
- bid_id - рдмреЛрд▓реА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛,
- user_id - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА
- dsp_id - рдмреЛрд▓реАрджрд╛рддрд╛ (рдЦрд┐рд▓рд╛рдбрд╝реА) рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
- рдмреЛрд▓реА - рдмреЛрд▓реА
рд╕реБрдЕрд░ - рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ (рд▓реЛрдб)
рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LOAD рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рд╡рд┐рднрд╛рдЬрдХ рд╡рд░реНрдг 't' рдФрд░ рдбреЗрдЯрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЖрдк рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
-- HDFS (Pig Hadoop) fs -rm -f -r -skipTrash /data/pig/out -- 'raw_data' raw_data = LOAD '/data/pig/example/' USING PigStorage('\t') AS (time, bid_id, user_id, dsp_id, bid:int);
рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдореЗрдВ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдорд┐рд▓рддреА рд╣реИ (рдЯреНрдпреВрдкрд▓)ред рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ, рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдПрдХ рдбреЙрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: raw_data.dsp_id
raw_data -> tuple . ------------------------------------------------------------------------------------------- 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)
рд╕реБрдЕрд░ - Iterative рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ (рдкреВрд░реНрд╡ - рд╕рд╛рдорд╛рдиреНрдп)
FOREACH - GENERATE рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рд░рди" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдСрдкрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдмрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ, рдЬреЛ рд╕рдм рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
-- . timestamp SUBSTRING norm_data = FOREACH raw_data GENERATE SUBSTRING(time, 0,10) AS date, dsp_id, bid;
рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рд╣реА рд╕реЗрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЫрдВрдЯрдиреА рдХреА рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде, рдФрд░ рдХреЗрд╡рд▓ рджреЛ рдлрд╝реАрд▓реНрдб: dsp_id, рдмреЛрд▓реАред
norm_data -> tuple --------------------------------------- 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)
рд╕реБрдЕрд░ - рдбреЗрдЯрд╛ рдЧреНрд░реБрдкрд┐рдВрдЧ (рдЧреНрд░реБрдк)
рдЧреНрд░реБрдк - рдЖрдкрдХреЛ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реБрдП, рд╕рдореВрд╣ рдбреЗрдЯрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
-- dsp_id date group_norm_data = GROUP norm_data BY (dsp_id, date);
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдЙрдЯрдкреБрдЯ рдкрд░:
рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореВрд╣ред рдпрд╣ рд╕рдореВрд╣ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ norm_data рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣
group_norm_data -> ( ) : [ (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)} )
рд╕реБрдЕрд░ - рд╕рдордЧреНрд░ рдЭрд╛рдбрд╝реВ (FLATTEN)
рдХрднреА-рдХрднреА рдПрдХ рд░реЗрдЦреАрдп рд╕рдВрд░рдЪрдирд╛ ("рд╕реАрдзрд╛") рдореЗрдВ рд╕рдореБрдЪреНрдЪрдп рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдлреНрд▓реИрдЯрди рдлрд╝рдВрдХреНрд╢рди рд╣реИред
-- ft_group_norm_data = FOREACH group_norm_data GENERATE FLATTEN(group), FLATTEN(norm_data);
рдПрдХ рдЬрдЯрд┐рд▓ рд╕рдореВрд╣реАрдХреГрдд рд╕рдВрд░рдЪрдирд╛ рд╕реЗ, рд╣рдореЗрдВ рдЯреБрдкрд▓реНрд╕ рдХрд╛ рд╕реАрдзрд╛ рд╕реЗрдЯ рдорд┐рд▓рддрд╛ рд╣реИред
ft_group_norm_data -> tuple ---------------------------------------------------------------------- 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)
рд╕реБрдЕрд░ - рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдп (SUM)
рдХреБрдЫ рдЧрд┐рдирддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдмреЛрд▓реАрджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рджреИрдирд┐рдХ рджрд╛рдВрд╡ рдХреА рд░рд╛рд╢рд┐ред
-- , sum_bids_dsp = FOREACH group_norm_data GENERATE group, SUM(norm_data.bid) AS bids_sum;
sum_bids_dsp -> : 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)
рд╕реБрдЕрд░ - рдЧреНрд░реБрдк рд╕рднреА
рдПрдХ рдирдореВрдиреЗ рдореЗрдВ "рд░рд┐рдХреЙрд░реНрдб" рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдмрд╕ рдЪрдпрди рдореЗрдВ COUNT рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдзреНрд╡рд╕реНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
-- , . -- . group_all = GROUP sum_bids_dsp ALL;
рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдореВрд╣ рд╣реИ - "рд╕рднреА" рдФрд░ рд╕рднреА рдкрд┐рдЫрд▓реА рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ред
( 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) } )
рдЕрдм рд░рд╛рд╢рд┐ рдФрд░ рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ
summary = FOREACH group_all GENERATE COUNT(sum_bids_dsp), SUM(sum_bids_dsp.bids_sum);
рдирд┐рдХрд╛рд╕
------------------------------------------------------ count, sum ------------------------------------------------------ (11, 914)
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдПрдХ рдХреНрд░рдордмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреБрд▓:
рд╕реБрдЕрд░ рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдгред рдЖрджреЗрд╢! рднрд╛рд╖рд╛ рдЖрдкрдХреЛ рдмреНрд▓реЙрдХ рдореЗрдВ рддрд░реНрдХ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╣реБрдб рдХреЗ рддрд╣рдд MapReduce рдЧрдардиред рдпрд╣ рдПрдордЖрд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕реНрдЯреНрд░реИрдкрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╣реБрдд рдЕрдзрд┐рдХ рдУрд╡рд░рд╣реЗрдб рд▓реЗрддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдореЙрдбрд▓, рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рд░реВрдк, рдПрдордЖрд░ рдХрд╛рд░реНрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╡рд┐рд╡рд░рдгред
- рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ред рд╡рд┐рднрд┐рдиреНрди рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред
- рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐ред рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ, рдмрдирд╛рддрд╛ рд╣реИ
рд╕реБрдЕрд░ рд╡рд┐рдкрдХреНрд╖:
- рд╕рдм рдХреБрдЫ рд╕реБрдЕрд░ рд▓реИрдЯрд┐рди рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- HQL рдХреЗ рд╡рд┐рдкрд░реАрдд, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реБрдЕрд░ рд▓реИрдЯрд┐рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ
- UDF рдХреЗ рд▓рд┐рдП, Jython рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рд░рд╛рдВрд╢:
- рдЫрддреНрддрд╛ рдЫреЛрдЯреЗ рдФрд░ рд╕рд░рд▓ рдирдореВрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред HQL SQL рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЬрд▓реНрджреА рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд╕реБрдЕрд░ рдХреЛ рднрд╛рд╖рд╛ рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕реАрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░, рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЬрдЯрд┐рд▓ рдФрд░ рдмрд╣реБ-рд╕реНрддрд░реАрдп рдирдореВрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕реБрд▓рдн рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рд╕рд░рд▓ рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдФрд░ рдЖрдкрдХреЗ рд╕рд╣рдХрд░реНрдореА SQL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд░реЛрдЬрд╛рдирд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЙрдЧреНрд░ рд╕рд╡рд╛рд▓реЛрдВ рд╕реЗ рд╢рд░реНрдорд┐рдВрджрд╛ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рд╛рдЗрд╡ рдПрдХ рдмреЗрд╣рддрд░реАрди рдЙрдкрд╛рдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рдХрднреА-рдХрднреА SQL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕рд░рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рджрд┐рди рдмрд┐рддрд╛рдиреЗ рдФрд░ рд╕реБрдЕрд░ рдХреЛ рдЫрд╛рдВрдЯрдиреЗ рд▓рд╛рдпрдХ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЗ рд╕рдордп рдФрд░ рдЖрдкрдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред