
рдлрд┐рд▓рд╣рд╛рд▓, рдореИрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ (рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд) рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдореЗрдВ рд▓рдЧрд╛ рд╣реВрдВред рдХреБрдЫ рд╣рд▓рдХреЛрдВ рдореЗрдВ
рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ ETL рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рдг, рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ рд▓реЛрдбрд┐рдВрдЧред
рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рдореНрди Google рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реЗрд╡рд╛рдУрдВ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ:
- рдкрдм / рдЙрдк - рд░рд┐рдпрд▓рдЯрд╛рдЗрдо рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛
- Dataflow - рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ (рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
рд░рд┐рдпрд▓рдЯрд╛рдЗрдо рдФрд░ рдмреИрдЪ рдореЛрдб рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВ) - BigQuery - рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛
(рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ)
0. рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐
рдлрд┐рд▓рд╣рд╛рд▓, рдЙрдкрд░реЛрдХреНрдд рд╕реЗрд╡рд╛рдУрдВ рдкрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕рдореЗрдВ
рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдорд╛рдирдХ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ 1 рд╕реЗ 1 рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдкрд░
рдкрдм / рд╕рдм рдХреЗ рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ JSON рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЦреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ BigQuery рддрд╛рд▓рд┐рдХрд╛ рд╣реИ:
рдЬреЛ JSON рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред
1. рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг
рдПрдХ рдбреЗрдЯрд╛рдлреНрд▓реЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдПрдХ рдЯреЗрдмрд▓ рдпрд╛ рдЯреЗрдмрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рджреА рдЧрдИ рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирдкреБрдЯ JSON рдХреБрдВрдЬреА рдХреЗ рдорд╛рдиред рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреБрдЫ
рдЗрдирдкреБрдЯ JSON рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ NSON J рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЖрд╡рд╢реНрдпрдХ рд╣реИ
рдиреЗрд╕реНрдЯреЗрдб рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП RECORD
рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде BigQuery рдЯреЗрдмрд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ
рдбреЗрдЯрд╛ред
2. рдирд┐рд░реНрдгрдп рдХреА рддреИрдпрд╛рд░реА
рдбреЗрдЯрд╛рдлреНрд▓реЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, Apache рдмреАрдо SDK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ,
рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд╡рд╛ рдФрд░ рдкрд╛рдпрдерди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐
рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг рдкрд╛рдпрдерди 2.7.x рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдорд░реНрдерди
рдЬрд╛рд╡рд╛ рдХреБрдЫ рд╡реНрдпрд╛рдкрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рд╣реИ
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдиреЗрдХреНрдЯрд░ рдХреА рдПрдХ рдорд╛рдореВрд▓реА рд╕реВрдЪреАред рд╡реИрд╕реЗ, рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдХрдиреЗрдХреНрдЯрд░реНрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдореИрдВ рдЬрд╛рд╡рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдореИрдВрдиреЗ рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдЗрдирдкреБрдЯ JSON рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЗрд╕реЗ рд╕рдордп рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП
- рд╕реНрдХреАрдорд╛ рдпрд╛ BigQuery рдЯреЗрдмрд▓ рдХреЗ рд╕реНрдХреАрдорд╛ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╕реНрдЯреНрд░реАрдо рдХреА рдЬрд╛рдПрдЧреА
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Dataflow Job рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рдирдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдХрд░ рд╣реА рдмрджрд▓реЗрдВред
рдЖрдЗрдП рдЗрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдмрддрд╛рддреЗ рд╣реИрдВред рд╡реЗ рд╕рднреА рдЗрд╕ рддрдереНрдп рд╕реЗ рдЖрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ
рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдПрдВ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
рдЖрдВрддрд░рд┐рдХ рддрд░реНрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ рдлрд┐рд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рднрд░реЗрдВ
рд╕рд░реНрдХрд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдХреЗ рднреАрддрд░
рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкреВрд░реА рд╕рдордЭ рд╣реИ
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ
рдЙрдбрд╝рд╛рди рднрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╢рд╛рдпрдж рдХреЛрдИ рдЕрдкрдирд╛ рдлреИрд╕рд▓рд╛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдЧрд╛ред
3. рдирд┐рд░реНрдгрдп
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЕрдзрд┐рдХ рд╕рдВрдкреВрд░реНрдг рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрдерд╛рдХрдерд┐рдд рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдЖрд░реЗрдЦ рд▓рд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ
рдЕрдкрд╛рдЪреЗ рдмреАрдо рдкреНрд░рд▓реЗрдЦрди рд╕реЗред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ (рд╣рдо рдХрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ):
- рдЗрдирдкреБрдЯ - рдбреЗрдЯрд╛ рдбрд╛рдЯрд╛рдлреНрд▓реЛ рдЬреЙрдм рдореЗрдВ PubSub рд╕реЗ рдЖрддрд╛ рд╣реИ
- рдЯреНрд░рд╛рдВрд╕рдлрд╝рд░ # 1 - рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдкрд╛рдпрдерди рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ
PCollection # 1 - рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо # 2 - рдбреЗрдЯрд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрдВ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдЙрддреНрдкрд╛рджрди PCollection # 2 рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ PCollection tuple) - рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо # 3 - PCollection # 2 рд╕реЗ рдбреЗрдЯрд╛ рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ
рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдирд╛
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ред
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб (рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦрдХреЛрдВ рд╕реЗ рдЙрд╕реА рддрд░рд╣ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝ рджреА рдЧрдИ рд╣реИ): рдЕрдм рд╣рдо рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореБрдЦреНрдп
рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ "рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо" рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рд╣реИ, рдФрд░
рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджреЗрд╢ рдирд╣реАрдВред рдпрд╣ рд╕рдордЭрдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкрдм / рдЙрдк рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░
рдпрд╣ рдЙрдирд╕реЗ рд╣реИ рдХрд┐ рд╣рдо рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЯреИрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
pipeline_options = PipelineOptions() p = beam.Pipeline(options=pipeline_options) pipeline_options.view_as(SetupOptions).save_main_session = True pipeline_options.view_as(StandardOptions).streaming = True
рдХреНрдпреЛрдВрдХрд┐ Apache Beam Pub / Sub IO рдХрдиреЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ () (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЕрдиреНрдпрдерд╛, рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдВ
рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЧрд┐рд░рддрд╛ рд╣реИред рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рд╕реНрдерд┐рд░ рдФрд░ рддрдерд╛рдХрдерд┐рдд "рд░рдирдЯрд╛рдЗрдо"ред рдпрд╣рд╛рдБ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдбрд╝реА рд╣реИред рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдбреЗрдЯрд╛рдлрд╝реНрд▓реЛ рдЬреЙрдм рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рд╢рд╛рдпрдж рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдпрд╣ рдХрдиреЗрдХреНрдЯрд░ RuntimeValueProvider
рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╣рдо рд╡рд┐рд╖рдп рд╕реЗ рдзрд╛рдЧрд╛ рдкрдврд╝рддреЗ рд╣реИрдВред рдпрд╣ рдЬреЛрдбрд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдЯреНрд░реАрдо рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд┐рд╖рдп рдФрд░ рд╕рджрд╕реНрдпрддрд╛ (рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди) рджреЛрдиреЛрдВ рд╕реЗред рдпрджрд┐ рд╡рд┐рд╖рдп рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рддреЛ
рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рджрд╕реНрдпрддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рднреА рд╕реБрдВрджрд░ рд╣реИ
рд╕реНрдкрд╖реНрдЯ, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо beam.io.ReadFromPubSub(input_topic)
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдкрд╛рдЗрдкрд▓рд╛рдЗрди p
ред
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо # 1 рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдЗрдирдкреБрдЯ рдХреЛ рдЕрдЬрдЧрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдЬрдЧрд░ рддрд╛рдирд╛рд╢рд╛рд╣, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдореЗрдВ PCollection # 1 рдорд┐рд▓рддрд╛ рд╣реИред >>
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдкрд░
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рдкрд╛рда рдзрд╛рд░рд╛ рдХрд╛ рдирд╛рдо рд╣реИ (рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рд╕рд╛рде рд╣реА рдПрдХ рдЯрд┐рдкреНрдкрдгреА,
рдЬрд┐рд╕реЗ GCP рдбреЗрдЯрд╛рдлрд╝реНрд▓реЛ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЧреНрд░рд╛рдлрд╝ рдкрд░ рдмреНрд▓реЙрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдЗрдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ TransformToBigQuery
ред
class TransformToBigQuery(beam.DoFn):
element
рдЪрд░ рдореЗрдВ PubSub рд╕рджрд╕реНрдпрддрд╛ рдХрд╛ рдПрдХ рд╕рдВрджреЗрд╢ рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ
рдХреЛрдб, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╡реИрдз JSON рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
process
рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП
рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рд╕рд░реНрдХрд┐рдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ
рд╡рд╣ рддрд╛рд▓рд┐рдХрд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░рд╛ рдкреНрд░рд╡рд╛рд╣ рд╣реИ
рдЕрдкрд╛рдЪреЗ рдмреАрдо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд░рдВрддрд░, unbounded
, рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
yield
, рдЕрдВрддрд┐рдо рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП return
рдирд╣реАрдВред рдЕрдВрддрд┐рдо рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
(рдФрд░ рдЖрд╡рд╢реНрдпрдХ) рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ windowing
рдФрд░ triggers
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдпрд╣ рдХреЛрдб PCollection # 1 рдХреЛ # 2 рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЯреИрдЧрд┐рдВрдЧ рд╣реЛрдЧреА
(рдкреГрдердХреНрдХрд░рдг) рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХрд╛ред рдЪрд░ schema_dct
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╢рдмреНрджрдХреЛрд╢, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рдмрд┐рдирд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕реНрдХреАрдо рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╣реИ, рдпрд╣ рдЯреИрдЧ рд╣реЛрдЧрд╛, рдФрд░ рдореВрд▓реНрдп рдпреЛрдЬрдирд╛ рдХрд╛ рд╡реИрдз JSON рд╣реИ
рдЗрд╕ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП BigQuery рдЯреЗрдмрд▓ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рджреГрд╢реНрдп {'fields': }
рдЬрд╣рд╛рдБ
, JSON рдлреЙрд░реНрдо рдореЗрдВ BigQuery рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рд╕реНрдХреАрдорд╛ рд╣реИ (рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд)ред
main='default'
рдереНрд░реЗрдб рдЯреИрдЧ рдХрд╛ рдирд╛рдо рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡реЗ рдЬрд╛рдПрдВрдЧреЗ
рд╕рднреА рд╕рдВрджреЗрд╢ рдЬреЛ рдЯреИрдЧрд┐рдВрдЧ рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдзреАрди рдирд╣реАрдВ рд╣реИрдВред рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
TagDataWithReqType
ред
class TagDataWithReqType(beam.DoFn):
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ process
рд╡рд░реНрдЧ рднреА рдУрд╡рд░рд░рд╛рдЗрдб рд╣реИред types
рдЪрд░ рдореЗрдВ рдирд╛рдо рд╣реЛрддреЗ рд╣реИрдВ
рдЯреИрдЧ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╢рдмреНрдж рдХреБрдВрдЬреА рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
schema_dct
ред рд╣рд╛рд▓рд╛рдБрдХрд┐ process
рд╡рд┐рдзрд┐ рдореЗрдВ рддрд░реНрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдореИрдВ рдХрднреА рдирд╣реАрдВ
рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдореБрдЭреЗ рдЕрдм рддрдХ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИред
рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдЯреИрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреА рдПрдХ рдЯреБрдХрдбрд╝реА рдорд┐рд▓рддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН рд╣рдорд╛рд░реА рд╕рдВрдЦреНрдпрд╛
рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЯреИрдЧ + рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдереНрд░реЗрдб рдЬреЛ рдЯреИрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред
рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо # ... (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЖрд░реЗрдЦ рдкрд░ рдирд╣реАрдВ рд╣реИ, рдпрд╣ "рд╢рд╛рдЦрд╛" рд╣реИ) - рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреНрд░реАрдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдПред
tagged_stream.default
- default
рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░реАрдо рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ tagged_stream['default']
schema=parse_table_schema_from_json(schema_dct.get('default'))
- рдпрд╣рд╛рдБ рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рддрд╛рд▓рд┐рдХрд╛ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ default.json
рдлрд╝рд╛рдЗрд▓ рдорд╛рдиреНрдп BigQuery рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдХреАрдорд╛ рдХреЗ рд╕рд╛рде рд╣реИ
рд╡рд░реНрддрдорд╛рди schema_dir = './'
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрдЯреНрд░реАрдо default
рдирд╛рдордХ рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдЧреАред
рдпрджрд┐ рдЗрд╕ рдирд╛рдо рдХреА рддрд╛рд▓рд┐рдХрд╛ (рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рджрд┐рдП рдЧрдП рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ) рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдпреЛрдЬрдирд╛ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛
create_disposition=BigQueryDisposition.CREATE_IF_NEEDED
рдЯреНрд░рд╛рдВрд╕рдлрд╝рд░ # 3, рд╕рдм рдХреБрдЫ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдФрд░ рдЦреБрдж рд╕реЗ рд▓реЗрдЦ рдкрдврд╝рддреЗ рд╣реИрдВ
рдЕрдЬрдЧрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ред рд╣рдо рдПрдХ рд▓реВрдк рдХреЗ рд╕рд╛рде рдзрд╛рд░рд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
рдЙрд╕рдХреА рдпреЛрдЬрдирд╛ред рдпрд╣ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реНрдЯреНрд░реАрдо рдирд╛рдо рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - '%s:%s.%s' % (gcp_project, bq_dataset, name)
ред
рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП
рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЪрд▓рд╛рдПрдВ (рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рд╡реЗрди рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ) рдпрд╛ рдЖрдИрдбреАрдИ рд╕реЗ:
python _.py / --runner DataflowRunner / --project dreamdata-test / --staging_location gs://STORAGE_NAME/STAGING_DIR / --temp_location gs://STORAGE_NAME/TEMP_DIR / --template_location gs://STORAGE_NAME/TEMPLATES_DIR/TEMPLATE_NAME
рдЙрд╕реА рд╕рдордп, Google рдЦрд╛рддреЗ рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрдпрд╛рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
GOOGLE_APPLICATION_CREDENTIALS
рдкрд░реНрдпрд╛рд╡рд░рдг GOOGLE_APPLICATION_CREDENTIALS
рдпрд╛ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ ред
рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ --runner
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, DataflowRunner
рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб
Dataflow Job рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓реЗрдЧрд╛ред рдпрд╣ рдЕрднреА рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ
DirectRunner
, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ - --runner
рдФрд░ рдХреЛрдб
рдбреЗрдЯрд╛рдлреНрд▓реЛ рдЬреЙрдм рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░, рдЬреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рддреЛ gs://STORAGE_NAME/TEMPLATES_DIR/TEMPLATE_NAME
рд╣реЛрдЧрд╛
рдмрдирд╛рдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯред рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ gs://STORAGE_NAME/STAGING_DIR
рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛
рд╕рд░реНрд╡рд┐рд╕ рдлрд╛рдЗрд▓реНрд╕ рдЬреЛ рдХрд┐ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рдбрд╛рдЯрд╛рдлреЙ рдЬреЙрдм рдХреЗ рд╕рдлрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ
рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдбреЗрдЯрд╛рдлрд╝реНрд▓реЛ рдЬреЙрдм рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП CI)ред
4. рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо PubSub рд╕реЗ BigQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ
рдЖрдЧреЗ рднрдВрдбрд╛рд░рдг, рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди
рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧред
рдореБрдЦреНрдп рд▓рд┐рдВрдХ
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЧрд▓рддрд┐рдпрд╛рдБ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╕рдВрднрд╡ рд╣реИрдВ, рдореИрдВ рд░рдЪрдирд╛рддреНрдордХ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛
рдЖрд▓реЛрдЪрдирд╛ред рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рд╕рднреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдкрд╛рдЪреЗ рдмреАрдо рдПрд╕рдбреАрдХреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ, рд▓реЗрдХрд┐рди рд╡рд╣ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рдерд╛ред