Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π§Π°ΡΡ‚ΡŒ 1

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚. Π”Ρ€ΡƒΠ·ΡŒΡ, дСлимся с Π²Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для студСнтов курса Β«Data EngineerΒ». ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π§Π°ΡΡ‚ΡŒ 1

Apache Beam ΠΈ DataFlow для ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

БСгодняшний пост основан Π½Π° Π·Π°Π΄Π°Ρ‡Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я Π½Π΅Π΄Π°Π²Π½ΠΎ занимался Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅. Π― Π±Ρ‹Π» Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π΄, Π²ΠΎΠΏΠ»ΠΎΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‘ ΠΈ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ блогпоста, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π΄Π°Π»ΠΎ ΠΌΠ½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π΄Π°Ρ‚Π°-ΠΈΠ½ΠΆΠΈΠ½ΠΈΡ€ΠΈΠ½Π³ΠΎΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ для ΠΌΠΎΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. НС Ρ‚Π°ΠΊ Π΄Π°Π²Π½ΠΎ я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ Π² Π½Π°ΡˆΠΈΡ… систСмах хранится достаточно большой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π»ΠΎΠ³Π°, связанных с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Оказалось, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ использовал эти Π΄Π°Π½Π½Ρ‹Π΅, поэтому я сразу заинтСрСсовался Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ссли Π±Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ рСгулярно Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…. Однако Π½Π° ΠΏΡƒΡ‚ΠΈ Π±Ρ‹Π»ΠΎ нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… тСкстовых Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ доступны для ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. Вторая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ сохранСны Π² Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ систСмС, поэтому я Π½Π΅ ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ… Π»ΡŽΠ±ΠΈΠΌΡ‹Ρ… инструмСнтов для Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ….

МнС прСдстояло Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступ для нас ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ привнСсти Ρ…ΠΎΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ, встроив этот источник Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΡˆΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ. ΠŸΠΎΡ€Π°Π·ΠΌΡ‹ΡΠ»ΠΈΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, я Ρ€Π΅ΡˆΠΈΠ» ΡΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ этих Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ±Π»Π°Ρ‡Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ я ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ доступ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π²Ρ‹Π²ΠΎΠ΄Ρ‹. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ я Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Data Engineering Π² Coursera Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π½Π°Π·Π°Π΄, я Π³ΠΎΡ€Π΅Π» ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ инструмСнты ΠΈΠ· курса.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… казалось Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ способом Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠ΅ΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½ΠΎ Ρ‡Ρ‚ΠΎ я ΠΌΠΎΠ³ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€ 2? К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π±Ρ‹Π» способ пСрСнСсти эти Π΄Π°Π½Π½Ρ‹Π΅ Π² срСду, Π³Π΄Π΅ я ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ‚Π°ΠΊΠΈΠΌ инструмСнтам, ΠΊΠ°ΠΊ Python ΠΈ Google Cloud Platform (GCP). Однако это Π±Ρ‹Π» Π΄ΠΎΠ»Π³ΠΈΠΉ процСсс, поэтому ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ ΠΌΠ½Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΠΏΠΎΠΊΠ° я ΠΆΠ΄Π°Π» окончания ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. РСшСниС, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ я ΠΏΡ€ΠΈΡˆΠ΅Π», Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΎΡΡŒ Π² создании ΠΏΠΎΠ΄Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Faker Π² Python. Π― Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅ пользовался этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, Π½ΠΎ быстро понял, насколько ΠΎΠ½Π° ΠΏΠΎΠ»Π΅Π·Π½Π°. ИспользованиС этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΌΠ½Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π±Π΅Π· фактичСских Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΡƒΠΆΠ΅ сказанного, Π² этом постС я расскаТу, ΠΊΠ°ΠΊ я построил описанный Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, доступных Π² GCP. Π’ частности, я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Apache Beam (Π²Π΅Ρ€ΡΠΈΡŽ для Python), Dataflow, Pub/Sub ΠΈ Big Query для сбора ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π»ΠΎΠ³ΠΎΠ², прСобразования Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΡ… Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… для дальнСйшСго Π°Π½Π°Π»ΠΈΠ·Π°. Π’ ΠΌΠΎΠ΅ΠΌ случаС ΠΌΠ½Π΅ Π±Ρ‹Π»Π° Π½ΡƒΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пакСтная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Beam, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ поступали Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, поэтому Pub/Sub Π½Π΅ трСбовался. Однако я ΠΎΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡΡŒ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ вСрсии, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Ρ‚ΠΎ, с Ρ‡Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² GCP ΠΈ Apache Beam

Google Cloud Platform прСдоставляСт Π½Π°Π±ΠΎΡ€ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… инструмСнтов для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  • Pub/Sub β€” это слуТба ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ шаблон Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒ-ΠŸΠΎΠ΄ΠΏΠΈΡΡ‡ΠΈΠΊ (Publisher-Subscriber), которая позволяСт Π½Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • DataFlow β€” это сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ созданиС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ автоматичСски Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠ°ΠΊ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ инфраструктуры, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° написании ΠΊΠΎΠ΄Π° для нашСго ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°.
  • BigQuery β€” это ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° SQL, с BigQuery Π΄ΠΎΠ»Π³ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π΅ придСтся.
  • И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Apache Beam, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, сосрСдоточимся Π½Π° Python вСрсии для создания нашСго ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°. Π­Ρ‚ΠΎΡ‚ инструмСнт ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ интСгрируСтся с GCP. Он особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π·Π°Π΄Π°Ρ‡ Ρ‚ΠΈΠΏΠ° извлСчСния, прСобразования ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (ETL), поэтому, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈΠ»ΠΈ вычислСний, Beam β€” Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€.

There is a wide variety of tools available on GCP so it can be difficult to keep track of them all and what their purpose is but here is a summary of them for reference.
Π’ GCP доступно большоС количСство инструмСнтов, поэтому ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТно ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΡ… всС, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΡ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для справки.

Визуализация нашСго ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ нашСго ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π½Π° рисункС 1. На высоком ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² BigQuery. Π›ΠΎΠ³ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ, отправляя запросы Π½Π° сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для понимания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с нашим ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. Π’ Ρ†Π΅Π»ΠΎΠΌ, ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы:

Beam Π΄Π΅Π»Π°Π΅Ρ‚ этот процСсс ΠΎΡ‡Π΅Π½ΡŒ простым, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ нас ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ источник Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΆΠ΅ Ρ„Π°ΠΉΠ» CSV, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. ПозТС Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ лишь ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π­Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· прСимущСств использования Beam.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π§Π°ΡΡ‚ΡŒ 1
Рисунок 1: Основной ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…: Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊ:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ псСвдоданных с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Faker

Как я ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Ρ€Π°Π½Π΅Π΅, ΠΈΠ·-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ я Ρ€Π΅ΡˆΠΈΠ» ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ псСвдоданныС Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈ фактичСскиС. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ я ΠΌΠΎΠ³ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, ΠΏΠΎΠΊΠ° я ΠΎΠΆΠΈΠ΄Π°Π» Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Faker, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Наши ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π² Ρ†Π΅Π»ΠΎΠΌ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅. На основС этого Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ построчно Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΈ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Π΄Π°ΡŽΡ‚ Π½Π°ΠΌ Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ Π΄Π°Ρ‚Π°, Ρ‚ΠΈΠΏ запроса, ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ сСрвСра, IP-адрСс ΠΈ Ρ‚. Π΄.

192.52.197.161 - - [30/Apr/2019:21:11:42] "PUT /tag/category/tag HTTP/1.1" [401] 155 "https://harris-lopez.com/categories/about/" "Mozilla/5.0 (Macintosh; PPC Mac OS X 10_11_2) AppleWebKit/5312 (KHTML, like Gecko) Chrome/34.0.855.0 Safari/5312"

ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° строкС Π²Ρ‹ΡˆΠ΅, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ LINE, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ 7 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках Π½ΠΈΠΆΠ΅. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² нашСй схСмС Ρ‚Π°Π±Π»ΠΈΡ† Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

LINE = """
{remote_addr} - - [{time_local}] "{request_type} {request_path} HTTP/1.1" [{status}] {body_bytes_sent} "{http_referer}" "{http_user_agent}"
"""

Если Π±Ρ‹ ΠΌΡ‹ выполняли ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΠΊΠΎΠ΄ Π±Ρ‹Π» Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ, хотя Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ² Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π΅ΠΉΠΊΠ΅Ρ€, ΠΌΡ‹ просто создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’ частности, Faker Π±Ρ‹Π» ΠΏΠΎΠ»Π΅Π·Π΅Π½ для создания IP-адрСсов, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Π±-сайтов. Π― использовал ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

fake.ipv4()
fake.uri_path()
fake.uri()
fake.user_agent()

from faker import Faker
import time
import random
import os
import numpy as np
from datetime import datetime, timedelta



LINE = """
{remote_addr} - - [{time_local}] "{request_type} {request_path} HTTP/1.1" [{status}] {body_bytes_sent} "{http_referer}" "{http_user_agent}"
"""


def generate_log_line():
    fake = Faker()
    now = datetime.now()
    remote_addr = fake.ipv4()
    time_local = now.strftime('%d/%b/%Y:%H:%M:%S')
    request_type = random.choice(["GET", "POST", "PUT"])
    request_path = "/" + fake.uri_path()

    status = np.random.choice([200, 401, 404], p = [0.9, 0.05, 0.05])
    body_bytes_sent = random.choice(range(5, 1000, 1))
    http_referer = fake.uri()
    http_user_agent = fake.user_agent()

    log_line = LINE.format(
        remote_addr=remote_addr,
        time_local=time_local,
        request_type=request_type,
        request_path=request_path,
        status=status,
        body_bytes_sent=body_bytes_sent,
        http_referer=http_referer,
        http_user_agent=http_user_agent
    )

    return log_line

ΠšΠΎΠ½Π΅Ρ† ΠΏΠ΅Ρ€Π²ΠΎΠΉ части.

Π’ блиТайшиС Π΄Π½ΠΈ подСлимся с Π²Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π° сСйчас Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΆΠ΄Π΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ;-).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com