I'm gonna go ahead and get started. Thank you everyone. I think this is the last session of the day. I could be wrong on that. But I think after this is like a booth crawl, which is the fun part. I am going to talk about Delta Lake today. It is an open source project hosted by the Linux Foundation. I personally think it's a really cool project, so I'm gonna get into all of what's going under the hood, use cases, how it works, all that kind of good stuff. I also want to take any questions. We don't have a super large group, so please let me know. If there is anything, there is a lovely person with the microphone who can make you all heard. With that, that's me. I'm the human, not the dog. I put in my speaker profile that I did have, but I think is the world's cutest dog, so I had to approve it by putting it up on the slide. I also put my email address on the slide. If you have any questions about Delta or anything related to what I'm talking about, like in the middle of the night, you can go ahead and email me. I would be glad to talk about it at any time. With that, let's go ahead and get into things. What I'm gonna do, I have some slides. I have some code. I like going back and forth just to like spice things up a little, actually show you what the things I'm talking about look like in practice. I want to start with some motivation. Delta Lake, if you're unaware, is a file protocol. Why am I going to spend a whole 45 minutes of your time talking about files? There is a very good reason for that, and that has to do with essentially modern data architectures. You can kind of see two ways of looking at the world today. Data warehouses are one side of things we had on-premise data warehouses. We have cloud-based data warehouses, both provided by cloud vendors or provided by external vendors. Great for BI, great for reporting. That being said, they have some limitations. Let's say you want to do machine learning, deep learning. You don't do that on data warehouse. I'm sure most of you are aware. Not so much support for unstructured data, even semi-structured data. Data warehouses are structured data with good performance for analytics. One of the main reasons for that, why it's so good for analytics, is most warehouses have a proprietary file format that once they actually ingest your data, maybe it started off its license JSON format, it then gets ingested into a data warehouse, transformed. The data warehouses engine is optimized for the file format, so it's really fast, but you can't do much other stuff within that data warehouse. What that means, I think there's a statistic somewhere out there that like a huge chunk of data in the world is unstructured. Think of all the emails and tweets and images that we're generating constantly, so people taking pictures. That's unstructured data right there. So that goes in data lakes. That's our other side of the world. Data lakes are great. You can put in unstructured data, your structured data. You can put in your CSV files and your JSON files and your text images, whatever you want to use, but you can't really do BI on those things. It's going to be slow. You're going to have some angry analysts might come and yell at you. You don't want to deal with that. Governance is limited in data lakes historically as well. Data lakes can be called data swamps sometimes. Yes, they're great. They're massively scalable. You can do data science, data engineering on top of data lakes. They have their limitations as well. That's kind of the motivation here. We have use cases for data lakes. We have use cases for data warehouses. There's a lot of cons to both, but they exist for a reason. There's a lot of pros to both. So if we had a perfect world where we could do away with all of those cons, only have pros, personally, what I would like to see, and from talking to a lot of the people I work with, what everyone else would like to see as well, is from the data warehouse side. BI reporting runs a business. That is what executives look like, look at. They like their dashboards. We want to make sure we're making money, essentially. So we want fast performance for our BI and analytics on any amount of data. We also want that governance and organization that comes from a data warehouse. This is really important around security and cataloging and lineage. Data lakes are really important. We want that massively scalable cloud storage where we can do any use case on it, move from cloud to cloud, throw it all over the place, do data science on top of it. We also want it to be open source. This is an open source summit. So we want something that will essentially squish together the best parts of a data warehouse and the best parts of a data lake. And this leads to an architecture pattern that we're now seeing essentially all over the place called a lake house, which is a very uncreative name. Pretty much just saying take all the good stuff from a data warehouse, take all the good stuff from a data lake, throw out the bad, and call it a lake house. Lake house is an architecture pattern. The idea being we have a data lake based approach. So we have that massively scalable cloud blob storage, essentially, handling all sorts of data, but you can still use that data lake for all of your use cases. So that means, yes, you can actually do BI and have governance on your data lake. That can be a little bit complicated. As you can imagine, there are reasons why data warehouses have existed in the past. They didn't come to exist because someone just liked them. So let's talk about how a delta lake can fit in for our data lake here to essentially solve all of these problems, make the best of both worlds that we've talked about. Yes, there are computing engines involved in the middle of this lake house. You need those to do analytics today of science. We are focusing on the delta lake as a file format today and how that can enable essentially this lake house architecture where we can have massively scalable horizontally data storage and do all of our use cases with one essentially central source of truth for our data. There are animations I do not like in this. So let's talk about what is delta lake. We're going to do a couple things. First thing we're going to look at a little under the hood. What do I mean by delta as a file protocol? How does that differ from something else that you might be used to? I like to compare things to parquet just because parquet is essentially an industry standard big data file format. We're also then going to look at some essentially goodies that delta lake provides. So that's things around use cases. What does it add on top of other file formats? And then we'll talk about performance. Performance is important. Everyone wants things to go fast. So what is delta as a storage protocol? Two major components I want to talk about. If you have delta tables essentially, you're going to see two things. One thing is a whole bunch of parquet files. Parquet is open source, delta is open source. We have built off of, we being not me unfortunately did not make it. Parquet in order to make essentially make use of what's already a really good data storage format. Parquet is columnar storage, it compresses well, has a lot of good metadata tagging. Using parquet as a base storage format allows us to take something that's already good and make it a lot better essentially add those warehousing use case. The way that is added is through the addition of something called the transaction log. So we have a table, it's a bunch of parquet files, that's great. That's not the only thing you're going to see. Within this table directory, maybe it's an S3 for example, you're going to see a folder called delta log. And that contains a massive amount of metadata. That metadata has essentially information about every single transaction that has been done to a delta defined table.  What that allows us to do is maintain acid compliance and then also essentially handle the amount of metadata needed. What I've heard often is when you're dealing with big data, even the metadata itself is big data. So the introduction of this transaction log really allows metadata to be stored alongside the delta table itself to allow for fast processing of data. And we're going to get into how that all works. I do want to look into that transaction log a little bit and we're going to look at that actually, we're going to go and look at the S3 storage to see what it looks like. But essentially what that transaction log is, is for every operation on a table, maybe you write, you merge, you delete, that is log is a JSON file. Just going to be numerical, just counting up. So every single transaction that happens is going to add a new record to your transaction log. I'm sure some of you can already see potential hiccups with this plan. So we'll talk through that as well. But essentially that's the important part here. We have ordered commits that track what's happening to our table within this transaction log. So potential issue number one, you might be familiar with data warehouses who handle concurrency. Let's say Bob is writing to a table, Alice is reading from the table, too bad the table's locked. Someone else is using it. We need to figure out within delta how to handle concurrency. We don't want to lock tables to just a single writer. So for example, let me click through all, there we go. We'll be happy here. Click through all of the animations. Essentially what happens when two people try to write it once. We want to make sure that we have consistent data. I said earlier once delta is acid compliant. So what does that actually mean in the world of delta? Delta is optimistically concurrent. That is one of the important parts of the transaction log is how is the transaction log ordered. So like I said, we have a parquet files. We have everything that's happened to the table as just JSON commits essentially. Within this transaction log, we will keep track of who is doing what to a table. Pretty simple is a writer will attempt to write to a table or a partition. You can get things down to a partition level if you prefer. Check to make sure someone else is not already writing to that partition. If yes, oh, that's fine. We'll just try again. Don't worry about it. There's no failures except for very specific scenarios. It's pretty much just called optimistic concurrency. Writer one writes, writer two writes. If they conflict, writer two will try again. So pretty simple way of handling concurrency. This will work cross compute. So I'm going to be focusing on spark as a compute engine today. What that means, though, is if essentially writer one is writing from spark cluster A, writer two is writing from spark cluster B. There are features in open source delta that allow that to be successful as well. So good news, you don't have to worry about data corruption with delta. The other potential hiccup I wanted to talk about with this transaction log is I said every single commit creates a new JSON file. So as you can imagine, and we're dealing with a lot of data a lot of the time. There's not just Bob writing to this table and that's the end of the day. There might be thousands of rights happening. There might be streaming rights. There might be rights coming from other sources. There might be just merges and deletions if you're doing something with GDPR, for example. We might have a lot of JSON commit files. We don't want to have to process potentially, but I don't know, five million different JSON files to figure out the state of our delta table every single time you want to do a transaction. That's where using spark as a compute engine comes in. This is built into the delta format. As every 10 transactions, spark will actually automatically compact this delta log. So what this means is instead of just JSON one, JSON two, all the way up to five million or whatever arbitrary number you want to throw out there, every 10 commits, we're going to create a checkpoint dot par K. What that means is when you are resolving metadata to determine the state of your delta table, you're going to max read five small JSON files. That's not bad at all. What this also means is that this massive scale of metadata is not limiting your performance. So essentially the two major things that come out of transaction log. Three major things. One, we have acid compliance. Two, we resolve conflicts optimistically. And three, we actually use spark for scaling the metadata. Any questions so far? Nothing. All right. So I've been mentioning spark a bunch of time, something else I want to throw out there is this lovely slide right here that talks about a lot of the other engines compatible with delta as a format. Now, something I say is, yeah, compatible as a delta. What does that actually mean? So delta is built off par K. That being said, because of this acid compliance and the way transactions are handled, not all of those par K files are necessarily valid parts of a table. That's where a transaction log comes in to keep track of what is a valid as part of this delta table. So resolving the table during a read involves checking the transaction log and determining what par K files actually make up that table. There are ways that you can just go right back and forth between delta and par K. But all of these engines here actually have native delta readers. So more coming as well. I'm going to put out a call at the end to you want to add something. This is an open source project. We would absolutely welcome it. I'm going to focus on spark today though. Let's get into some features of delta.  I know I've already mentioned a lot of these. What I'm going to do is talk about some features and then tie those back to kind of how they create my perfect lake house world. Let's start off with that batch and streaming that I think I actually might have glossed over before, where we want to handle not only all types of data, but all essentially velocities of data. So if we have data in batch mode, we have data in streaming, we do not want to create a land architecture. If you're unfamiliar with land architecture, that's a common architecture pattern where we essentially have to have two different tool sets to handle the different velocities of data just based off of what existing tools are able to do. So let's do something a little bit weird. And let's actually take a look at Delta as a format and do some streaming, do some batch operations and see what that looks like. I'm going to go through a couple things quickly is one make this bigger so you all can actually see it. All right, so they're too big. I have created a Delta table. I'm going to be using SQL right now. That being said, you can also use a bunch other languages. I prefer to use Python, but there's also a SQL, Scala, there's a REST connector now, lots of different ways of interacting with Delta. So I have a very small Delta table here, which is essentially just some information about loans and what state they originate from. We can see this is a Delta table just with some simple SQL information I created this couple hours ago. And then we can also see, like I said, very small table. We have one parquet file and that Delta log directory. If we look into that Delta log directory, great, we see we only have one transaction. That is actually when I wrote this original table, some other optimizations as well. So here's where we're going to do something a little hacky because I am one person. But what I'm actually going to do is I am going to create a stream that is going to read from my Delta table and update this map right here. But I am also going to batch write into my table as I am streaming out of my table. So let me just reiterate that. I have a stream that just reads from my table and shows it in a map view. And then I'm going to, as my stream is continually processing data, I am going to just write more chunks of data to that exact same file. So what that should mean is that I'm not going to have any sort of conflicts. I should be able to display my new data. Just so you're aware, let's look at Iowa, I'm going to continuously write some data into Iowa as this stream is running. So if I start that, what I'm actually going to do is I'm going to every 10 seconds, just plop some more data into the state of Iowa. And we expect because Delta has this isolation and it has this essentially serializability, we shouldn't have any issues with our stream failing as someone is writing to the exact same data set. So spoiler, it works, Iowa is already being updated. This is a pretty simple way of showing we have a streaming reader with a batch writer, things are being updated in real time, and we don't have any failures or essentially concurrency conflicts. What this means from a use case perspective is that you can really easily have all of your batch and streaming pipelines essentially just all in one go and not have to worry about setting up separate architectures. You're probably aware this is great because maintaining separate architectures means maintaining separate tool sets, which is rough. You don't want to have to maintain separate code bases, separate DevOps teams, all of the above there. So once we've gotten one more update, we should get ourselves up to, I believe 1800 in the state of Iowa, we can go ahead and kill this. But what this really just illustrates is the ability of Delta to handle that concurrency and to handle multiple readers and writers. Let's go ahead and kill that guy. So I did put these slides online, just in case the internet went down, it took some screenshots, what was going on for everything too. If this is incredibly exciting, you want to look back at it. Other things I wanted to talk about is, okay, so we can do streaming, we can do batch. That's kind of more on the data engineering side of things. The I can data science already on data legs. What about BI? Two components to BI. One component is performance. We'll get to that. The other component is essentially just all types of queries support. Acid transactions is one big aspect we've already touched on. The other big aspect that I have mentioned is full DML support. So what that means is if you're familiar with Parquet or ORC or any of those other standard big data file formats, you're probably aware handling, I don't know, mergers and deletions. It's a little bit of a painful operation. You do have to overwrite entire tables or partitions to delete, for example, one record with Parquet. So let's talk about how we can use Delta to not have to do that. So if I just go ahead and skip through, yep, we are very aware of these things. So let's go ahead and create a traditional Parquet table directly on top of that same Delta table. So what we should have is duplicate data sets, one that is the Delta format, and one that is the Parquet format. So once this completes, yep, this is our exact same map. This is our exact same data set here. Let's say, okay, I made a mistake with my loop. We should not have the assigned Iowa, these additional loans. What we should have done is assign them to Washington. So let's delete it. Cool. We can just run and delete from and of course it's not going to work because Parquet does not support delete from. Delta does, good news. And we can just go ahead and run that and see how that impacts your Delta table. It will actually give us the number of rows. Something else you might have seen really briefly as that command was running is there was a little pop up that said computing snapshot. And that's something I mentioned earlier about how that transaction log is resolved is we're looking back through those JSON files as we're reading and determining what essentially version of our Delta table is the valid version of our Delta table. Going to go pretty quickly through these next ones. Let's go ahead and finish this off, do an update. Oh no, who could have predicted it if it failed with Parquet? And we can run that same update command with Delta. So this is a pretty simplistic thing that you can do in a data warehouse. But this data I'm operating on, it's actually sitting in S3. We'd get the same information if it was sitting in GCS or Azure Blob or ADLS, anything like that. We are bringing these data warehouse type operations to a data lake. One final thing, let's keep going with the Parquet comparison. So cool, I did a delete. I did an update. Two step process. No one likes to do more steps than necessary. Let's do it all in one with a merge. It's a lovely gif here of showing, yes, it is painful to do this in Parquet. You do have to, like I said earlier, overwrite entire partitions or tables with Delta. All we actually have to do is gather our data set. What's our update? Do we want to insert merge? We don't need to know, actually, Delta will figure that out. As you can imagine, this is very valuable for CDC type use cases. And then we just write a merge statement. Essentially, all this is saying is when we have a match, update our values. If we do not have a match, insert our values. It's a very standard data warehousing DML operation. This is now, like I said, something being done on a data lake. And this is lovely to actually give us some statistics. We inserted one row, updated two rows. We're quite happy about that because I didn't just have to overwrite entire table. All right, any questions so far? Yeah, so that's a good question. Question was, didn't I say Delta uses Parquet in the background? That is correct. The actual files themselves are Parquet. That transaction log allows you to make those changes. So within, we can actually look at this once we go through a couple more operations and take a look at what our directory looks like. We're going to see a couple of Parquet files. And not all of those Parquet files are actually part of the Delta table. Because as we're making operations on our table, the transaction log is keeping track of what our valid Parquet files is part of the table. But the CloudBall app storage doesn't know. Awesome, anything else? All right, the last category I wanted to talk about is a big one, and this is governance. So this is something that is, A, an important part of any data pipeline, or any sort of company out there you need to have data governance. I would categorize this as a couple of different things. One is data lineage and quality. The other is security. There's a lot of other things outside of your file format that I certainly hope you use for security. But built into Delta, there are a couple of things I want to talk about to make this easier. Going to talk about two different categories and three different features. The first thing I want to mention is the schema evolution and enforcement. So this is important. I've been enjoying contrasting things to Parquet. We can choose a different format if you want. But if we're dealing with more traditional big data file formats, you write data, great. You read the data. If there's a schema mismatch, you find out then. You're not so happy about it potentially, because that could be a week later. That could be an automated pipeline. Things break. You don't want that. Delta has a feature called schema enforcement that essentially checks schema at right time. So if there's a schema mismatch, it'll be detected immediately and throw an error. That being said, likely sometimes in the world, you do want to change your schema. Maybe you want to add a column, make sense, data changes over time. There is an option called schema evolution, which allows you to essentially change the schema. Super simple to use. All we really have to do here is, let's go ahead and take our same data set, but let's add a column. So we should expect this, if we wrote it, these first two columns, this is fine. This is our data. We can append that. But we're also appending this third column. I don't want to write this and then come back three days later and realize, uh-oh, I have a bunch of nulls. I have a dangling column. What's going on? I've already ran this, so it gave away the hint. But it'll give us an immediate error if we try to do this right with a mismatching schema. Actually, quite a good error, too. We had a schema mismatch. What this tells us is one of two things. One, QA your data. What's going on? Why do we have an additional column? Or two, maybe you actually meant to add this column. If so, that's fine. Just add this merge schema option right here. And that'll allow that additional column to be added. So now if we go ahead and just look at our data set, we can see here we have actually generated this new table that has our aggregated loan amount by state. This is great. This is one way of enforcing data quality, just built right into the data format itself. Let's talk about some other things, too. One of my favorite delta features is called time travel. It's a really fancy way of essentially just saying data versioning. I've said over and over again, every transaction on a delta table is versioned. What that means is we can actually use that versioning to roll back our tables. Not only can we roll back our tables, but we can look in a really friendly way. What's happened to our table? When did it happen? And who did it? So that's good for auditing purposes. That's good for maybe, I don't know, yelling at your coworker, all of the above. So essentially two ways, both good for audit compliance purposes, also good for example, I've seen people use it to recreate ML experiments. If you want to record the exact version of a table or the timestamp when you trained a model, you can use this time travel ability to go and retrain a model on the exact same data set, even if the table itself has changed over time. So lots of cool things that you can actually do with this, and it's a cool name. So let's look at it. Let's go ahead and look at everything we've done so far. So if I look here, this is, OK, you go away. This is what's happened. I've done some writing. I did it at deletion, the update, the merge. We can see everything that happened. Who did it? Thankfully, it was all me. And when it happened, we can also use this, though, for our time travel. So if I use this version as of, this is going to take me all the way back to before Iowa had any data, before anything happened, before I did that merges. I could use this to recreate my data set, do whatever I want with this point in time. The important thing I want to call out here is I have version as of. Reason for that is I want to rerun this notebook. You can also time travel based on a timestamp, which likely has more utility. If, for example, someone overnight wrote some really weird data to your table, and you just want the version that happened before midnight, that is something that you can do with this time travel very easily. Some more examples in here.  Let me actually hide it, because it's giving with fun part. Questions before I get there, because we are now kind of getting off of this time travel auditing a little bit. All right, either I'm confusing everyone so much, or this is just the best thing. I've run there's no questions. When you revert, do you delete the JSON files, or do you go forward? They'll keep going forward. So you don't actually delete the metadata. So the reversion will not really go back. It'll be effectively. It'll have done three things afterwards, and then there'll be three undo type of operations. So there's a lot of other metadata management that I'm not covering, because as you can imagine, this transaction log needs to be purged. The extra parquet files need to be purged. There's a lot of ways of managing that that I'm not going to get into today. I'd be glad to talk about that after if you want. If you're curious, look at what command called a vacuum. But yes, you're absolutely correct. As you can imagine, we're going to get some very bloated files after potential years of this, so there are ways of handling that. All right, let's just go quickly through what we have here. Kind of just tying back into our transaction log. If you remember at the beginning, we had one, just a whole bunch of zero JSON file. This was our original write. These CRC files, they're important. You're going to see them. They're not really human readable. These are kind of just stats collected. I'll talk about stats collection in a second, but this allows for data skipping and performance. If now we actually look, we've done eight transactions, nine, we started at zero. This is great because this, so apologies for the scrolling, ties right back in to our eight transactions in our transaction log right here. So that is how this transaction log relates to our essentially table auditing history, is we do have one JSON entry for every human readable line in our table history. We can also see this is just what one of those JSON files look like. This is more for if you're curious, just a whole bunch of metadata is what is contained in these JSON files. I also want to do something really silly. We had nine transactions. I wanted to give us above 10 to show you that checkpoint. So I just ran the same update command three times in a row, just to give us three more transactions. What we can actually see now is if I scroll, good news, I was right. After 10, we did do that checkpoint.parquet. So now after our 11th transaction, we are going to go back and essentially read from the checkpoint instead of resolving JSON file zero through nine. With that, let me wrap things up by saying, what about performance? I have been talking a lot about all of these different features Delta enables to handle the use cases. Now let's handle the use cases but fast. So a couple of things. Delta release 1.2 was released a few months ago. I want to talk about that mostly. Prior to Delta release 1.2 though, there was already some really good performance features. Delta was fast then, it's faster now. Before release 1.2, we did have that spark for metadata management. That's one of the most important aspects of Delta, is handling all the metadata that makes the use cases possible. Then also like I said, all the benefits of Parquet. Parquet is a great file format, so let's just build off of it. This though is a screenshot of an issue from the Delta repo on GitHub. That is part of the H1 Delta roadmap. I want to talk through these performance features. Specifically, this optimize the order one because it's really cool. Let's talk about optimize though. First thing is, you might be familiar in data lakes a lot of the time, especially if you're streaming. There would be a lot of small files. One thing leads to another, you have an IOMess where you're spending more time scanning and opening files and actually doing computation. So there's manual compaction needed. I have seen so many people write manual compaction jobs to take these small files, essentially compact them into a more optimal size. This optimize command does it all for you. You run optimize, stick your table name, done. You have about a gigabyte file, although you can configure that. Bunch of files or data skipping. Something that I tell people when they ask me, why do you care so much about data skipping? Let's talk about Spark or Presto. I don't care how fast your compute engine is. If I read zero data, I'm gonna be faster than you finishing a query. Oftentimes, the amount of data that you read is more important than how optimized your engine actually is. So data skipping is a really important aspect of any sort of file format or file protocol out there. These under the hood operations, they happen. You don't have to know they exist. They happen, they exist. It's obscured from you. They allow for file level or column level data skipping. So we just read less data when filtering for a query. Last thing I wanna talk about, I think I'm right on time, here's my personal favorite, and that is this word of z-order attached to optimize. So this is a bit of a mouthful, but essentially what z-ordering is is multidimensional data clustering within files. So to break that down a little, you can data skip at a partition level. You just define your partition that puts files and directories. What about at a file level? You can sort things, sure, that gives you one dimension data skipping. What z-ordering does is it actually allows you to cluster among multiple columns. So you can data skip at a partition level with directories, and then you can data skip at a file level with z-ordering. So if you run a command called optimize z-order and then put whatever amount of columns you choose, it'll actually both compact your files and then rewrite your files to co-locate the information in these columns. There can be more than one. So when you read this information, you skip a lot more data. It's super cool. If you're curious, the algorithm called, excuse me, the algorithm used is called Hilbert Curve. It's a mathematical algorithm. It's on Wikipedia. Lot of math there. But it essentially allows you to skip a lot more data than just plain partitioning. So we have partition tables, we have compacted tables, and then we data skip at a file level. So suddenly we're getting really fast and we can actually get to these BI style queries. All right, make it big. With that, I have one minute left. So if you wanna learn more, check out delta.io. It is the open source Delta website. Has a whole bunch of information about Delta, the docs. It has the link to the Slack channel. There's a very active Delta Slack community. People are wonderful to each other and will answer all of your questions. We also love contributors. So if you think this is cool, wanna contribute, please just let anyone on the Slack channel know. Anyone that's part of the project, you can also just ask me questions or email me too. I'd love to answer anything. With that, I can take any more questions. I think we're up on time, but thank you so much for attending. Any last minute questions? Is there a way to ETL like fast with no logging? Like if you need to load up the data warehouse or do you just use the normal tools that you use? Normal tools, yeah, everyone's running away.


Berder he's so tall Berder help you can't yeah, you can't He's like I can't follow that up Berder will kill me Berder help help oh How's it going everybody dato do it here back with another ranked match video for dragon ball fighters this time around We have a team of guinyu Videl and Goku I believe base and we actually played against this guy before accidentally instead of guinyu I picked really do not ask me how that happened And he stopped me. I think it was like one character left to like I Had I'd lost and he's still had a whole characters life bar and like another half Yeah, we are playing guinyu just because I'm okay. Well, we got a switch now So it's not even worth talking about and I believe we want to go into this corner with sliding. Oh Nice reflect.  Oh, we could have done so much better and we tried so we tried dodging But they'll just lean back into it and got clocked in the face Unfortunate, but overall pretty good start Switch oh god Okay, now it's time to block boys. He's got a lot of assists.  I almost got caught Another one that one was real No, oh That's where we get hit. Well to be fair. I messed up a long time ago Hmm Spam vanish. That's fine. Oh Excellent reflect. All right. So next time we get a hold out a little bit more. Oh We don't get to punish with our own 5h. All right, at least we both got hit there The slowest beam in the West damn I started cranking out a comment me how I got kicked in the face for it All right, so base Goku is going back in the corner here three bars. Does he take the hard knockdown? No, he wants to set up Damn, I should not have superdashed there. That's that's an easy kick for Vegeta Will this be the death of Goku? I don't think so unless something crazy happens, right? Yeah Well, he could go level one level three that might kill with Broly No, Vegeta will it do the same? It does never mind that wasn't even close. That was not even close. All right captain. Ginyu enters the stage. We're falling behind here Okay He should probably switch out just for the better Just for the better pressure Solids about oh, he just punches he wow and it turned around and he got the 5h in the corner I don't know if that was planned. I don't know the Broly meta, but if not, this is very fortunate and Unfortunate for me. We should probably spark up right now That was low key kind of sick. Oh Oh, oh Videl actually went forward and got the kick. I expect it to miss honestly I was like I should charge up with Ginyu because we are missing out here.  This might come down to just a random body swap Beautiful dragon rush. He knew I wanted to reflect. I could not take the oppression any longer All right down we go, but you don't got us in the corner. Don't ever touch me it Fellas, I think it was a little lobby. Oh This man's ball arena feet stay out there. I was like we actually got away with the change. Nah, but we're dead We are so dead two level ones probably will do the job Miss oh we still live anyway Oh, God, that's unfortunate. That was unfortunate They have okay, so we Two H's. All right, we're on bird or at least I can't believe those toes go so high dude That was that wasn't even the foot. That was just a thighbox. All right We lose game one with a strong early performance, but a very devastating late game very devastating All right, that's actually the second match in a row.  This is gonna this is gonna be good for us. I Should have one with the double hit. You know what? Let's just get Goldow out Damn, he actually picked up a nice hit I'm sorry, but I did not expect you to come out on that side. Oh, but a great guard cancel. Oh Yeah, let's go. Let's go. This might actually buy enough time for ginyu Nope And a change gets the job done right away. We're gonna down take here. Gotta mix up our movements movement. We're out. Ah Right back into the oppressive session. Oh God, all right, let's not throw out any more reflects. I'm too scared. I reflect those. I know we just we're talking about that. Ah Jumps over our head just lets it fly. I believe we're on raccoon Got a I'm I'm struggling to keep track of this And every time I go for that super dash it always turns out to be the worst option.  Oh Damn, that's some damage. All right, two of his characters are down like 25 percent Well, we'll be generous and say 25 nice another drag run. You know what? Oh never mind I guess we'll take this guess. We'll take this. Oh He just delayed wake up with lights and my lows couldn't get there in time Videl going down I have a plan boys. It might not work, but we're gonna need to call on Gohan's rage Run up and try something baby. Let's go Gohan's rage we in there. Oh, how did he know I was gonna get hit by that?  Yes At least he had to use another bar At least he had to use another bar. That's where our victory lies All right, Vigito's low.   We can't afford to get tripped up now Man, these are just not going according to plan. Don't hit me. You don't know what sign I'm on. Oh And again the lights just come out flying. We should stop staggering All of that is mistakes. Oh nice reflect get off of me Oh God just Just to keep me safe for a little Damn this dude got out of the corner Okay, let's not optimize this. Let's Let's just let's just call it a day and get this All right, I don't even know if this will kill but oh no. Oh, it was too much Get off of me. No, okay. All right.  I Couldn't vanish fast enough.  That's fine. That's fine. That's fine The Vegeta cyst lasted too long and Goku must fall damn Actually, we'll probably live on the okay for living Wow, what a waste of a bar over it cross up overhead. Oh God That was a that was a defeatist. That was that was one that we were not winning All right game three though Let's buckle down Let's buckle down and win this Damn, I feel so stupid when I say some of the confidence click the rematch button and then I have to wait a little while like, okay No, oh The lights I Just I need something faster. I need a faster button Or I need to respect it at the very least down tech down tech and switch. Yeah Oh, thank goodness that hits. Okay slide it. We got to get Vegeta out of here, dude He's gonna reflect on change out. He loves to do it. You got to catch it early. I couldn't jump fast enough Oh God, it's a beat down Mental defeats. You got it. You got to think about it though Can you okay? No Okay, that's fine, okay, what can you heal up a little? Mm-hmm Surprise surprise. I thought I had a little more time with that combo I guess you should never really finish with the DP if you want to Do anything with that.  That's the key dude. We just got to keep the pressure up We can't mess up. We can't mess up. He's gonna hit buttons and I think base Goku's in here, too. Oh God he wants he wants base Goku so bad. I mean who wouldn't want base Goku. Oh Beautiful baby. Oh god exactly what you want to see just keep spinning bar.  Okay Smash mash not a kill, but that's fine We can follow Super Dash and it looks like we finally have a game that's under our control It's about time now now. This is where it gets a little more dangerous for him Not true actually untrue statement I was gonna say cuz we can call getting you out do some crazy lockdown stuff and then I got hit All right, that's fine. Just get Berter out. Oh god.     Oh god.  Never doubt that. That's my only ability Okay Armor armor get me out of here.  I really don't want to play that game Come on. Oh, come on. Oh, yeah Now we got ourselves a game here boys. Let's go All right, we take game three Three with our bags against the wall to damn two oh now It's two one at least technically three one since he did beat me before the recording started, but I don't even count it dude Realistically my Broly stood no chance We realistically by Guinyu's not even doing too much. I'm just trying to get them all out of the way Oh, oh, yes That was sick Finally god. I'm just so happy. I finally punished that It might not seem like much. Oh, come on, dude. Oh Finally, oh It's all going. It's just all going from right for me. This is not usual. There's usually the case TV I don't even care. I want my guinyu out.  I really didn't want it to hit there My turn and please don't okay good Yeah, when you have to beg not to be hit that's when you know, it's a little severe Please don't Knock the Dell down. We have a good lead here. We just can't let it slip away by letting the Dell die Oh, we got Vegeta system back dash. Oh We're getting caught by big normals. Oh Beautiful down heavy. It's too obvious now Too obvious. I'm trying to approach from the skies Alright, do what he does do what he does get it get a tag Guard cancel guard cancel baby Vanish vanish just vanish in those situations Don't have anything to follow that up with bad bad call by me. Oh Oh Luck strikes again, dude Again a very lucky situation by me. Let's try to kill Broly. He's really trying to get out of those situations Scott free but he Look at me think me throwing out lights trying to survive Birder he's so tall birder help.  No punish. That was a no punish. Watch the grab and there it is. I got a good view of that one Nice, okay, we take out Broly. This has been a heart pounder, dude The boys saved me What a My heart goes out to the boys. Yo, don't even try. I don't know if he got crossed up or hit a button I don't even care though. Oh lay him out. Can you just bop bop? That light is so powerful looking All right, now we have a good lead Vegeta down to his last. Oh, he's rushing it Dropped it look at the sword almost on Videl did you guys see that the range it looked like it was barely hitting him But it still counts and when it still counts those are practically the victories. I relish in dude That guy's like that was crazy. I got cheese and I agree dude. He's rushing me, but I've grown as a player, dude I've grown We out here growing and stuff. Oh We got powerful lights. We are not afraid to use them. Oh another change. I should have punished, dude. Oh Beautiful overhead. Oh god Every time Vegeta escapes a part of me dies Because it's always like I could have had it dude because as soon as Vegeta dies like my confidence shoots up tenfold You'll love to see the cheese. Oh my god, jeez.  Ah and in myself The true battles are the ones we fight inside of ourself. Don't switch me out. Come on. That's a little rude Okay, and then I think we take sliding here if we can get it. We do get it purple Comet attack That was a great reflect Every time I have purple Comet attack out.  Anyway, do I want to continue my pressure? Do I want to drag and rush and as I'm going through those options? I realize I'm just mashing light leaving openings everywhere and then I'm a terrible player I I want to learn how to be a good Ginyu so bad, dude. I think it would be so fun. Oh That sucked The down have you just whipped entirely we need that for cheeto dead that assist is too good I'm matching van is trying to escape in case the eventual grab came. Oh god. Oh God, dude, I could stuff good stuff to him. They have all level three right out the gate He's like Videl look. I'm done with you. I Always try super dashing. Oh cuz it's it's like if it works. It's just so cheesy. It's like free But I get punished for it And I fell right into his loving legs once again once again my relationship with Vigito All right, we have to spark and he knows that Okay, we can kill here It's not pretty but we can kill. Mm-hmm. Get good All right, two characters left Half health a piece sparking still on the table. We're dead sparks up right now. Oh God Super Saiyan Vegeta says Wild no level three level three now No, he's holding it. He's gonna love. Okay. There it is. There is respectable respectable Hard knockdown Broly doesn't get the best But it's just and I didn't click a button that sucks. He let me live technically. Oh Slams me down three two. That's the finish good games though.  I had a fun time Hopefully you guys didn't well did it as well if you have a favorite moment Let me know down below in the comments as always we got to throw up the stamp Of course to the good game and then we're gonna go ahead and back out Damn Mike in you little rusty, but like I said while you're down in the comments Let me know your favorite moment. Make sure to hit the like button and subscribe to the channel if you're enjoying what you're seeing And you want to see more fighting game content like this I'm looking forward to all the great fighting games coming out in 2019 And we are for sure going to be covering them on this channel So you might want to stick around for that if you really want to watch some more videos right now I have a few up on your screen that you can feel free to check out if any of them catch your eyes Just give them a watch. I'm Dr. Doya though. Thank you so much for watching this video And I will see you in the next one


Higher headquarters directed the reactivation of third-lateral anti-air battalion, third-marine lateral regiment, third-marine division. This activation will be effective no later than 11 February 2022. United States Marine Corps, lineage of third-lateral anti-air battalion, activated 19 December 1938 at Quantico, Virginia as the first battalion 15 Marines. We located, during October 1938 to Paris Island, South Carolina and assigned to the 1st Marine Brigade. We designated 10 October 1939 as a third-defense battalion. We assigned, during December 1939 to Fleet Marine Force. We located, during May 1940, to Pearl Harbor, Territory of Hawaii, participated in the following World War II campaigns, Pearl Harbor, Midway, Water Canal, Northern Salamence and Voganville. We designated 15 June 1944 as the third anti-aircraft artillery battalion and assigned to the third amphibious corps. We activated 15 December 1944 at Water Canal. We activated 11 October 1951 at China Lake, California as the provisional marine guided missile battalion. We designated 7 February 1955 as the first carrier surface to air missile battalion. We designated 1 June 1956 as the first media anti-aircraft missile battalion. We located, during June 1956 to 29 Palms, California, assigned during April 1959 to Fleet Marine Force Pacific. We designated 1 December 1961 as the third light anti-aircraft missile battalion and we designated to force troops, force Marine Force Pacific. We assigned, during May 1962 to Air Fleet Marine Force Pacific. We located, during January 1963 to Cherry Point, North Carolina and we assigned to Marine Wing Headquarters Group II, 2nd Aircraft Wing, Fleet Marine Force Atlantic. Elements participated in the Cuban Missile Crisis in Cuba from October to December 1962. We assigned, during May 1966 to Marine Air Control II. We assigned, during July 1968 to Marine Air Control Group 28. Elements participated in support of Carnar Narcotics Operations United States Atlantic Command Area Responsibility in 1990. Participated in Operations Desert Shield, Desert Storm, and Southwest Asia. From January to March 1991, we activated 30 September 1994. We activated 11 February 2022 at Kaneohe Bay, Hawaii as third littoral anti-air battalion and assigned to 3rd Marine Littoral Regiment. We assigned 11 February 2022, David H. Berger, Commandant of the Marine Corps.


Hello, this is Buona from Buona.TV and today I want to talk about the Brave browser. You may recall in my video that I talked about how I switched from Chrome from other browsers that I've tried to pass to the Brave browser and I'm happy to report that I'm still happily using the Brave browser. One of the features that I touted in that video was that you can earn BAT or basic attention token simply by using the browser and one of the things that we've been waiting on on the release version of the browser is the ability to watch targeted advertising to receive the basic attention token so that you can tip your favorite content providers or do whatever you want with the tokens. So as of today on the release version of Brave you now are able to view ads and there's a bunch of different articles on just about every tech website heralding the incoming change that hopefully this browser will bring to how advertising and just how everything works on the internet regarding all this stuff. So you probably have a lot of questions. So one of the first things that you should do if you're not sure what's going on is head over to the Brave ads FAQ and they have a great, great summary of all the common questions that you can possibly ask. I think the biggest one here is how are these Brave ads different from ads I see whilst browsing in other browsers and why would I want to see them. Well the number one thing I think the most important thing is that they are opt in number one so you don't have to watch them at all and they are private. It says traditional advertisers requires information about you, your behavior, pages, your browsing and location to be collected by advertisers and other vendors in order to for ads to be targeted effectively. In contrast Brave ads are matched to you directly on device meaning your personal information never leaves your browser. So in other words you can watch ads without sacrificing your privacy to some server in the sky somewhere. Number two, people that opt in to Brave ads receive tokens for viewing ads. These tokens, I'm sorry the tokens, receive account for up to 70% of the revenue share. That award can be claimed monthly directly into your Brave rewards wallet and then can be tipped to your favorite broadcaster. Users opt in to Brave ads number three receive tokens as the view ads wait did I read that right users opt in to Brave ads receive tokens as the view ads I did read it right that's just doesn't sound right to me and use those tokens to reward publishers and content creators users end up with a new way to enjoy a free internet that doesn't require them to surrender their privacy now that's the biggest deal right there is that you're able to watch advertising optionally if you want to earn basic attention token and it doesn't sacrifice your privacy that's a big deal because you know people are like well I can just watch ads you know in any browser you may not get paid for them or you may not get rewarded for them but you know that's that's the thing. So the next question is do these ads track or collect my data anyway Brave uses anonymous but accountable ad confirmation events to report campaign performance and delivery for advertisers additional information about ad confirmation protocol is available on github reporting for Brave ads accounts for ad events without tracking people so if you're not technical this is something you have to take their word on and if you are technical they have information about what exactly they're doing on github so you can follow up on that as well. The next question is if they're not tracking me how does it know what ads to serve that are relevant to me and again this goes to the to the notion that it does use your information locally so it says in traditional advertising when the user navigates the web page the series it calls them a to an ad server that includes information about you and your server this another data is shared with third parties but Brave is very different instead of having a user's data leak from the device to the cloud Brave's ad servers sends an ads catalog to all Brave award users that includes a list of all available ads so the ads are being pushed to us and based on what we're doing locally we'll get served the appropriate ads so everything is on device that's important the browser uses local machine learning to determine the best time and opportunity to present an ad and matches an ad from the catalog based on the content and the intent of the user as are matched locally to the most complete and direct data set yeah yeah yeah so it's a lot of stuff regarding that um basically if you if you look at it from a blimp view things are done locally so it's not your privacy is not being lost that's the easy way to understand it is that all this advertising all this stuff it's all on device or whether your phone your desktop it's not leaving that computer and if it is then they're straight up lying but for what we've been told what we can see none of that information is leaking out so there's a bunch of other questions here that i'm not going to go through but you can check them out i think those are the most important ones uh on the Brave FAQ site so again the Brave browser chat i was going to be saying chat i'm not streaming the Brave browser everyone check it out go to brave.com you can use my affiliate link in the chat oh my gosh i'm not streaming you can use my affiliate link in the description of the video and i'll get credit for it if you use the browser for 30 days i think that's how it works uh optionally you can send me some bat simply by clicking the the bat icon and i am a verify publisher on youtube on twitch and on my blog so if you want if you want to use your bat on me it does work because i am a verify publisher again guys this browser has been the best thing to come along in a long time this is the first browser i've used outside of chrome in a long time for this long um i was on firefox for a long time and then when chrome came out i've been on chrome and i i've been very happy on brave so check it out thank you for watching and i'll see you all next time have a good day