Data Modeling - Complex Data Types and Cumulation - Day 1 Lecture - DataExpert.io Free Boot Camp

Поділитися
Вставка
  • Опубліковано 20 гру 2024

КОМЕНТАРІ • 137

  • @ronaldokun
    @ronaldokun Місяць тому +75

    Amazing Lecture. Thank you very much. I am posting my notes with timestamps to help guide other learners, I hope it's okay.
    *Dimensional Data Modeling Overview*
    *Key Concepts*
    -*Complex Data Types:*
    - *Struct:* Similar to a table within a table, used for organizing related data.
    - *Array:* A list in a column, useful for compact data representation . 00:01 - 00:32
    - *Dimensions:* Attributes of an entity, such as a person's birthday or favorite food. They can be categorized as:
    - *Identifier Dimensions:* Uniquely identify an entity (e.g., user ID, device ID) . 01:58 - 02:29
    - *Attributes:* Provide additional information but are not critical for identification. They can be:
    - *Slowly Changing Dimensions:* Attributes that change over time (e.g., favorite food) . 02:54 - 03:26
    - *Fixed Dimensions:* Attributes that do not change (e.g., birthday) . 03:53 - 04:24
    *Data Modeling Types*
    - *OLTP (Online Transaction Processing):* Focuses on transaction-oriented applications, emphasizing data normalization and minimizing duplication . 12:26 - 12:59
    - *OLAP (Online Analytical Processing):* Optimized for query performance, allowing for fast data retrieval without extensive joins . 12:55 -13:26
    - *Master Data:* Serves as a middle ground between OLTP and OLAP, providing a complete and normalized view of data for analytical purposes . 14:23 - 14:55
    *Cumulative Table Design*
    - Cumulative tables maintain a complete history of dimensions, allowing for the tracking of changes over time. They are created by performing a full outer join between today's and yesterday's data tables . 21:04 - 21:36
    *Trade-offs in Data Modeling*
    - *Compactness vs. Usability:* Using complex data types can lead to more compact datasets but may complicate querying . 00:30 - 01:00
    - *Empathy in Data Modeling:* Understanding the needs of data consumers (analysts, engineers, customers) is crucial for effective data modeling . 07:13 - 07:44
    *Important Considerations*
    - *Temporal Cardinality Explosion:* A phenomenon that can occur when modeling dimensions with time-dependent attributes . 06:16 - 06:46
    - *Run Length Encoding:* A powerful method for data compression, particularly in big data contexts . 06:44 - 07:17
    *Cumulative Table Design*
    - *Full Outer Join:* This technique is used to merge data from two different time periods (e.g., yesterday and today) to capture all records, even if they exist in only one of the datasets. This allows for a comprehensive view of user activity over time . 22:01 - 22:32
    - *Historical Data Tracking:* The cumulative table design is essential for maintaining historical user activity data. For instance, Facebook utilized a table called "Dim All Users" to track user activity daily, which helped in analyzing user engagement metrics . 22:30 - 23:02
    - *State Transition Tracking:* This involves categorizing user activity states (e.g., churned, resurrected, new) based on their activity from one day to the next. This method allows for detailed analysis of user behavior transitions . 23:00 - 23:30
    - *Cumulative Metrics:* By holding onto historical data, analysts can compute various metrics, such as the duration since a user was last active. This can be done by incrementing a counter for inactive days . 27:14 - 27:45
    - *Data Pruning:* To manage the size of the cumulative table, it is important to remove inactive users after a certain period (e.g., 180 days of inactivity) to maintain efficiency . 26:17 - 26:47
    - *Cumulative Table Design Process:* The design involves using two data frames (yesterday's and today's data) to build a comprehensive view. The process includes performing a full outer join, coalescing user IDs, and computing cumulative metrics . 26:45 - 27:17
    *Strengths and Drawbacks of Cumulative Table Design*
    - *Strengths:*
    - Enables historical analysis without the need for complex group by operations, as all data is stored in a single row . 28:39 - 29:10
    - Facilitates scalable queries on historical data, which can often be slow when querying daily data . 29:36 - 30:07
    - *Drawbacks:*
    - Backfilling data can only be done sequentially, which may slow down the process compared to parallel backfilling of daily data . 30:05 - 30:36
    - Managing personally identifiable information (PII) can become complex, requiring additional filtering to remove inactive or deleted users . 30:32 - 31:05
    *Compactness vs. Usability Trade-off*
    - *Usability:* Usable tables are straightforward and easy to query, often favored by analysts . 31:02 - 31:33
    - *Compactness:* Compact tables minimize data storage but can be difficult to work with analytically. They often require decompression and decoding . 32:59 - 33:31
    - *Middle Ground:* Using complex data types like arrays and structs can provide a balance between usability and compactness, allowing for efficient data modeling . 33:29 - 33:60
    *Data Structures*
    - *Structs:* These are like tables within tables, allowing for different data types for keys and values . 34:27 - 34:58
    - *Maps:* Maps require all values to be of the same type, which can lead to casting issues . 34:56 - 35:27
    - *Arrays:* Arrays are suitable for ordered datasets, and they can contain structs or maps as elements . 35:52 - 36:23
    *Run Length Encoding:* This technique compresses data by storing the value and the count of consecutive duplicates, which is particularly useful for temporal data . 39:10 - 39:41
    *Data Sorting and Joins:* Maintaining the order of data during joins is crucial for effective compression. If sorting is disrupted, it can lead to larger data sets than expected . 41:05 - 41:37 Using arrays can help preserve sorting during joins . 41:35 - 42:05

  • @taiwan323
    @taiwan323 Місяць тому +56

    man idk what to say, im living paycheck to paycheck here in seattle and cant afford to drop money on any huge bootcamps or courses. I want to become a data engineer so I wont have to worry about what me or my dog will have to eat everyday. Im not getting into the role simply for the money, I genuinely do have a passion for this specific field. I am going try and kill this course, I will come back to this comment in the future! Thanks Zach.

    • @Anupamk36
      @Anupamk36 27 днів тому +2

      Wish you the very best :)

    • @FendiMohamed
      @FendiMohamed 18 днів тому

      Wish you the best man stay strong

  • @devendrakullarkar2648
    @devendrakullarkar2648 Місяць тому +6

    I’m restarting my Data Engineering journey from the ground up, rebuilding my skills from scratch-and here comes this incredible free UA-cam bootcamp! It feels like the universe is aligning perfectly.
    As a working professional, I can relate so much to this content. I never truly thought about data modeling this deeply while working on tables for streaming data. But through this bootcamp, I’ve learned so much that directly connects with the pro tables in my organization. It’s been a real eye-opener!
    A huge thank you to Zach and the team for putting this together. Starting two days late, but super excited to catch up and dive in! 🚀

  • @avixek
    @avixek Місяць тому +20

    Amazing work. Can’t imagine how difficult this is to cater to 1000s of students. Will be going through your entire course.

  • @gulshankhara2009
    @gulshankhara2009 29 днів тому +5

    That’s what called experience, u r clearly matching whole dots end to end understanding .. appreciate your work 🤘🏻🤘🏻

  • @amritaghatak6651
    @amritaghatak6651 11 днів тому +1

    Day 2!
    Today has been incredibly informative. I've learned a lot of new things, or at least gotten a solid introduction to some concepts. Not everything is crystal clear yet, but I'm excited to dive deeper into future videos and gain a better understanding. Looking forward to continuing this journey! As I mentioned before I will try to comment on all the bootcamp video to stay focused.

  • @sjohn-777
    @sjohn-777 10 днів тому +2

    39 yrs old … want to change my career. Just came across your videos. This is what I’ll be doing during the holidays .

  • @slater-cguy
    @slater-cguy Місяць тому +5

    This is great stuff, started working as a junior etl dev earlier this year, looking forward to growing with this series. Thank you, Zach and rest of team, for making this available!

    • @vijayreddy3422
      @vijayreddy3422 Місяць тому

      is there any openings in your company bro?

  • @sateba0
    @sateba0 26 днів тому +1

    Great lecture and sharing of experience. I am loving this. I am in China on a business trip and had issues making my VPN to work. I am just starting the lecture today. I am going to binge watching all the 9 videos in the next two days. It is sooo cool. Thank you, Thank you

  • @srinubathina7191
    @srinubathina7191 23 дні тому +1

    Great video, Zach! You explained cumulative table modeling so clearly and made it easy to understand. The examples were really helpful. Thanks for sharing this

  • @robdolby2470
    @robdolby2470 26 днів тому +2

    Thanks Zach for sharing real world knowledge and experience. Your videos are full of practical use cases and I am sure a lot of folks are going to be benefitted from your boot camp including me. I am just the beginner in this field, so I will complete the free boot camp now to develop overall understanding of DE world and then would join the paid boot camp to begin my journey and gain sound skills and knowledge in short span of time. Really appreciate your efforts and knowledge sharing. God Bless you bro!!

  • @mojazi
    @mojazi 24 дні тому +2

    This was such an educational and informational video. Thanks, Zach. :) I am in very bad financial situation too. I am going to squeeze myself and as much time as I can to watch all of your videos. I know I can do this.

  • @christophetorre7761
    @christophetorre7761 Місяць тому +3

    Thank you for this initiative, I already learned things on this first lecture ! I didn’t expect to see that much quality in a Free bootcamp, well done

  • @GladwinGracias
    @GladwinGracias Місяць тому +5

    This bootcamp has come at the PERFECT time for me. Thank you Zach 🎉

  • @xpanchal
    @xpanchal Місяць тому +1

    This is incredible! I couldn't help but notice how often the phrase 'when I was working with Netflix' came up.

  • @dtsam23
    @dtsam23 Місяць тому +1

    Amazing Lecture Zach! Looking forward to great learnings ahead! Thanks!

  • @marywangui7117
    @marywangui7117 Місяць тому +3

    I’ll keep saying . You inspire me alot. The passion you hold would make anyone want to be a data engineer😊

  • @SalmanSayyad-q1h
    @SalmanSayyad-q1h Місяць тому +7

    I am thrilled to watch your free bootcamp as your paid bootcamps are out of my budget!

  • @GaryFurash
    @GaryFurash 23 дні тому +1

    FYI Master Data in data modeling is also a term used for a persistent entity, as opposed to transactional data (events or things that happen involving persistent entities) or control data (controls application behavior). This is what Master Data Management is talking about. So you might have master data for employees and customers, and then transaction data for pay increases or purchases.

  • @mdnoorain6202
    @mdnoorain6202 Місяць тому +2

    I just resigned for my current job serving notice period and have an offer but not a great one.
    This comes at a perfect time for me. Thanks man.

  • @princeakhil208
    @princeakhil208 Місяць тому +2

    Thanks Zach, for starting the bootcamp infact this came at the right time. I have enrolled in and looking forward to completing this bootcamp.

  • @sateba0
    @sateba0 26 днів тому +1

    Great lecture, thank you very much for this FREE bootcamp

  • @solomono.a.1062
    @solomono.a.1062 Місяць тому +2

    Awesome presentation. Thank you for all the work you put into this

  • @harsh07g-h3m
    @harsh07g-h3m Місяць тому +2

    Amazing work brother you are giving a very handful of experience and awesome inside and intelligence about data. Thank you for teaching us and providing such valuable information.

  • @varunchhabra4333
    @varunchhabra4333 Місяць тому +1

    For sometime now I was planning to move to data engineering from application and infra side, but was not able to structure my learning, this will help me alot,Thanks Zach

  • @adilmp7401
    @adilmp7401 29 днів тому +1

    Day 1 Complete . Thanks Zach

  • @laminann8061
    @laminann8061 Місяць тому +2

    Glad to be here, thank you for doing this zach☺

  • @nikhil_jadhav
    @nikhil_jadhav 22 дні тому +1

    Thank you for the free knowledge.. joining the training

  • @varunraavi1917
    @varunraavi1917 Місяць тому +1

    Thanks a lot for this. Appreciate your work Zach.

  • @clivalycardoso8606
    @clivalycardoso8606 Місяць тому +2

    Thank you, great work Zach!! 🚀

  • @rajani1789
    @rajani1789 Місяць тому +1

    absoultely loved it ♥ keep up the good work

  • @philipbmilner1
    @philipbmilner1 29 днів тому +1

    Massively appreciated thanks Zach.

  • @kushkl2k6
    @kushkl2k6 26 днів тому +1

    Awesome. Run length encoding insight is good

  • @ishikabansal9650
    @ishikabansal9650 18 днів тому +1

    Great lecture, learned a lot

  • @blablabla-c5o
    @blablabla-c5o Місяць тому +2

    Thank you for this amazing opportunity!

  • @kopaczp
    @kopaczp Місяць тому +1

    Zach this is awesome! Looking forward for your next bootcamp in 2025 !

  • @adityasharma07
    @adityasharma07 Місяць тому +2

    this is perfect! Thanks Zach

  • @clark3313
    @clark3313 Місяць тому +1

    Thank you for the opportunity. Appreciate you!

  • @-MUKULSAPRA
    @-MUKULSAPRA Місяць тому +2

    Love ❤️ from India..
    You are my role model 😊

  • @AdityaKhele
    @AdityaKhele Місяць тому +2

    Super excited for this 😍

  • @anandahs6078
    @anandahs6078 Місяць тому +2

    Awesome session !

  • @uj8574
    @uj8574 Місяць тому +2

    Cool!
    it turns out that you come to some things gradually.
    I realized that the method I started using to store products in a table is a "cumulative table design"

  • @devbisht6780
    @devbisht6780 Місяць тому +2

    Thanks a lot buddy , we really appreciate it .

  • @muhammadwildanabdulhakim4545
    @muhammadwildanabdulhakim4545 Місяць тому +2

    Thank you very much for the course!

  • @nothingspecific314
    @nothingspecific314 Місяць тому +1

    Amazing stuff @Zach

  • @nanaphiona5145
    @nanaphiona5145 Місяць тому +3

    I'm eager to follow you in this journey.

  • @shubhambhardwaj6475
    @shubhambhardwaj6475 Місяць тому +2

    Long live the king!

  • @GaryFurash
    @GaryFurash 25 днів тому +1

    Part of delta is whether or not history is business relevant. For example, an organizational structure development (what departments report to other departments). Business may or may not care about being able to see the data as it was - historically. If they didn't, you would model it as type 1 IMHO.

    • @EcZachly_
      @EcZachly_  25 днів тому +1

      Business requirements and needs dictate modeling the most. Totally agree. Historical preservation is a very important business need though for many many use cases

  • @ronaldokun
    @ronaldokun Місяць тому +2

    Thank you for the lecture.

  • @Umer_Aftab
    @Umer_Aftab Місяць тому +2

    Zack, You are hero ❤

  • @techwithshrikar3236
    @techwithshrikar3236 Місяць тому +1

    Thanks a lot this is super useful.

  • @hichemlaribi252
    @hichemlaribi252 Місяць тому +3

    greate explanations thank you :)

  • @typicalname08
    @typicalname08 Місяць тому +3

    Hopefully slides will be updated in the "slides" tab of the lessons. Currently I don't see them. It would be really helpful to get the slides for future reference

  • @mythiligopal7290
    @mythiligopal7290 Місяць тому +2

    Thank You Zach!

  • @top10tweets
    @top10tweets Місяць тому +2

    Thanks Zach!

  • @nimaiahluwalia5678
    @nimaiahluwalia5678 Місяць тому +1

    Can someone explain what Zack means when he is saying Backfilling data can only be done sequentially, which may slow down the process compared to parallel backfilling of daily data? 30:05 - 30:36

    • @gagansbajaj
      @gagansbajaj 22 дні тому

      In the cumulative data table example discussed you need the previous day's data to exist in the table so that whatever aggregates or calculation that need to be stored can be run for example number of active users today vs tomorrow and so on. This can only happen if yesterday's data is available in original table.
      The daily load would be for data that has no such historical dependencies and can be run in one go parallelly.

  • @caseymoreno8991
    @caseymoreno8991 Місяць тому +2

    Thank you Zach!

  • @humemahkhalid891
    @humemahkhalid891 24 дні тому +1

    Starting boot camp today

  • @mathes8964
    @mathes8964 Місяць тому +2

    thanks much zach

  • @NarayanaTantry-q3p
    @NarayanaTantry-q3p Місяць тому +1

    Thanks guys!

  • @grahamjoss4643
    @grahamjoss4643 Місяць тому +1

    "i like to suffer while i eat my food"
    "Cool, lets learn data from you"

  • @__sarik
    @__sarik 26 днів тому +1

    36:07, "temporal cardinality explosions of dimensions" the hell does that mean bro

  • @karanszn
    @karanszn Місяць тому +1

    Thank you so much for this

  • @alecryan8220
    @alecryan8220 Місяць тому +1

    Hey Zach, great video. For RLE, you mentioned sorting after the join. How do you think about the trade off in compute vs storage in that case? Compute for re-sorting vs savings from RLE when storing

    • @EcZachly_
      @EcZachly_  Місяць тому +1

      Really depends on how many times downstream the data set is used. If it's used more than 3 times, sorting is probably worth it

  • @Clemsdaughter
    @Clemsdaughter 12 днів тому

    I want to come back here as a Data Engineer

  • @amrsamir4802
    @amrsamir4802 Місяць тому +1

    Way to go!

  • @TheCJD89
    @TheCJD89 Місяць тому +1

    Brilliant!

  • @ChristopherCordero-up7xq
    @ChristopherCordero-up7xq Місяць тому +2

    You think I can learn basic phyton and SQL at the same time I do the bootcamp?

    • @EcZachly_
      @EcZachly_  Місяць тому

      Very tough but potentially doable

  • @fredmb
    @fredmb Місяць тому +1

    We should build models for different consumers? Or we should prefer one model for all consumers?

  • @showmethemoney824
    @showmethemoney824 Місяць тому +1

    Thanks for this detailed information. Quick question, For the cumulative table, how do you expect to scale if a larger user base queries it? Don't you think this table will eventually be a bottleneck for the application? How do you suggest overcoming this?

    • @EcZachly_
      @EcZachly_  Місяць тому

      Cumulative tables are meant for analytical data, not application data. They're meant for analysts and very low queries per second, not applications and very high queries per second.
      If you want to bring the cumulative table BACK into the production application, you MUST index on user_id for fast lookups and you MUST always query based on user_id so you never bring in the whole dataset

  • @MatimaJoshi
    @MatimaJoshi 29 днів тому +1

    Hi @Zach..when we query any app on the front end as a customer, do we query the master table or the transactional relational tables?

    • @EcZachly_
      @EcZachly_  29 днів тому +1

      You should query the production data in your RDBMS if it's serving customers.

  • @dj-ln3nm
    @dj-ln3nm 22 дні тому +1

    Hey zack my sql and python skills are not the best ? what are the minimum topics i should in both sql and python to get started with this journey

  • @meovais
    @meovais Місяць тому +1

    Hi, Where we can get slides. I saw in the GH course material I could not find maybe I need to look again.

  • @ajaykumargaudo6685
    @ajaykumargaudo6685 3 дні тому

    Hey Zach, I have a little confusion here. When we are talking about temporal dimensions you have mentioned that joining that dataset with other downstream tables in Spark will mess the sorting, but during shuffle join operation in Spark all the data pertaining to one join key will collected in one partition correct ? So, when we save it as a parquet, I think it will not effect the run length encoding. Please help me understand.

  • @janakmali8243
    @janakmali8243 Місяць тому +1

    comment to support the Boot Camp Series 👍👍👍👍👍👍

  • @shreyanshpandey4428
    @shreyanshpandey4428 Місяць тому

    Thanks man

  • @ganeshjha2545
    @ganeshjha2545 Місяць тому

    Thanks for the bootcamp @Zach. Could you please add sequence to the videos. This would be useful going ahead as well. Thanks!

    • @EcZachly_
      @EcZachly_  Місяць тому

      Data engineering boot camp playlist is on my page already

  • @typicalname08
    @typicalname08 Місяць тому +1

    Loved the first lecture. Curious where I can find the link to the discord server that you mentioned in your intro video

    • @EcZachly_
      @EcZachly_  Місяць тому +1

      Bootcamp.TechCreator.io join here you’ll get emailed the discord link

  • @sastryjumpani6969
    @sastryjumpani6969 Місяць тому

    Thanks for the video, may I know how to access the lab as the website doesn’t show me anything apart from assignments

    • @EcZachly_
      @EcZachly_  Місяць тому

      It’s in the GitHub repo

  • @aloklingayat
    @aloklingayat 24 дні тому

    When you say yesterday, does it mean data till yesterday or just yesterday’s data

  • @ayrtonrayvilcheznoe9364
    @ayrtonrayvilcheznoe9364 Місяць тому +3

    this isn't on the Dashboard

    • @EcZachly_
      @EcZachly_  Місяць тому +12

      Working on it man. I’m trying my best to

    • @ayrtonrayvilcheznoe9364
      @ayrtonrayvilcheznoe9364 Місяць тому

      @@EcZachly_ thanks bro

    • @dnyanaisurkutwar7619
      @dnyanaisurkutwar7619 Місяць тому +3

      its there now. I think at 5 sharp its on YT, and it takes sometime to come on the dashboard, probably happened just today unsure

    • @EcZachly_
      @EcZachly_  Місяць тому +1

      @@dnyanaisurkutwar7619 Haven't ever done a 20,000 person free boot camp before. We missed one deadline by 38 minutes

  • @spider279
    @spider279 17 днів тому

    hello , there is spark, kafka and all but where their tutos are ? :(

  • @PreetMehtaUSA
    @PreetMehtaUSA Місяць тому +1

    Thanks @zach

  • @238ato
    @238ato 28 днів тому

    I am a little late to the party but I am wondering if I can get started and catch up?

  • @x__nisha.s__x
    @x__nisha.s__x 10 днів тому

    Could someone explain in an easy way what shuffling is and how/why it’s used in the context of data engineering please?

    • @Bigdatalearnings
      @Bigdatalearnings 6 днів тому

      @x__nisha.s__x In data engineering, shuffling refers to the process of redistributing data across the nodes in a distributed computing system, such as Apache Spark or Hadoop. It plays a crucial role in operations that require data from multiple partitions or nodes to be grouped, aggregated, or joined.
      Here’s an easy explanation:
      In a distributed system, shuffling is like this regrouping process. The data, initially distributed randomly or arbitrarily across the nodes, needs to be reorganized based on specific keys or attributes (e.g., all rows with the same ID, category, or timestamp).

    • @x__nisha.s__x
      @x__nisha.s__x 6 днів тому

      @ thanks ☺️

  • @jpneves0801
    @jpneves0801 Місяць тому

    Great content. But what happens when a complex data type like array or struct reaches its limit size?

    • @EcZachly_
      @EcZachly_  Місяць тому +1

      That limit is 65,000 elements. If you have one item per day, that’s 130 years of data.

  • @txreal2
    @txreal2 Місяць тому

    Thanks 🙏

  • @hilaldatascientist
    @hilaldatascientist Місяць тому

    is this for a complete beginner?

  • @nishanthulwan1478
    @nishanthulwan1478 22 дні тому

    Hi Zach can you share the discord link ?

    • @EcZachly_
      @EcZachly_  22 дні тому

      Bootcamp.TechCreator.io if you sign up here. You will be emailed it

    • @nishanthulwan1478
      @nishanthulwan1478 22 дні тому

      @ got it and joined :)

  • @jay_wright_thats_right
    @jay_wright_thats_right Місяць тому

    Would future lessons dive deeper?

    • @EcZachly_
      @EcZachly_  Місяць тому

      The lab gives you an applied example of this

  • @Abubakar-x3f
    @Abubakar-x3f 23 дні тому

    Everyone talking about great, but all things coming out from my head.
    Any suggestions?

    • @EcZachly_
      @EcZachly_  22 дні тому

      Probably missing prerequisites

  • @JuanPabloSanchez-k1k
    @JuanPabloSanchez-k1k Місяць тому +2

    What is the link for the discord so I can ask questions?

    • @EcZachly_
      @EcZachly_  Місяць тому +2

      Join the boot camp at bootcamp.techcreator.io when you register, you’ll get a discord link emailed to you

    • @JuanPabloSanchez-k1k
      @JuanPabloSanchez-k1k Місяць тому

      @@EcZachly_ Great thank you!

  • @Udayakumar_K
    @Udayakumar_K Місяць тому +1

    Reusing old boot camps contents

  • @denikeo
    @denikeo 15 днів тому

    So who is here from Nigeria??? Let's learn together please

    • @EcZachly_
      @EcZachly_  15 днів тому

      Join the boot camp and discord here!
      bootcamp.techcreator.io

  • @VikashKumar0409
    @VikashKumar0409 Місяць тому +1

    ​ @EcZachly_ could you please provide the slides that you used in the video. That would be helpful. I know there is a slide section on your platform, if the slides would be available there then it's fine. Amazing work man.

  • @joelkanamugire6400
    @joelkanamugire6400 Місяць тому +1

    Thanks Zach!!

  • @SrinarayanaTantry
    @SrinarayanaTantry Місяць тому +1

    thanks Zach!!

  • @technicalsyntax
    @technicalsyntax Місяць тому +1

    Thanks 🙏