I'm sure you're familiar with data science, but what about data engineering?
Are these the same thing, or how are they related?
Data engineering is dedicated to overcoming data processing bottlenecks,
data cleanup, data flow, and data handling problems for applications that utilize a lot of data.
On this episode, we welcome back Tobias Macy,
give us a 30,000-foot view of the data engineering landscape in 2021.
This is Talk Python to Me, episode 302, recorded January 29, 2021.
Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.
This is your host, Michael Kennedy. Follow me on Twitter, where I'm @mkennedy,
and keep up with the show and listen to past episodes at talkpython.fm,
and follow the show on Twitter via at talkpython.
This episode is brought to you by Datadog and Retool.
Please check out what they're offering during their segments. It really helps support the show.
Tobias, you ready to kick it off?
Yeah, sounds good. Thanks for having me on, Mike.
Yeah, great to have you here. Good to have you back.
I was recently looking at my podcast page here, and it says you were on the show 68, which is a lot of fun.
That was when Chris Paddy was with you as well around Podcasts and Knit.
But boy, that was 2016.
Yeah, it's been a while.
We've been at this a while. I mean, ironically, we started within a week of each other, but yeah, we're still going, both of us.
Yeah, it's definitely been a fun journey and a lot of great sort of unexpected benefits and great people that I've been able to meet as a result of it.
So definitely glad to be on the journey with you.
Yeah, yeah. Same here. Podcasting opened doors like nothing else. It's crazy.
People who wouldn't normally want to talk to you are like, hey, you want to be on the show?
Yeah, let's spend an hour together all of a sudden, right? It's fantastic.
What's new since 2016? What have you been up to?
Definitely a number of things. I mean, one being that I actually ended up going solo as the host.
So I've been running the Podcast in It show by myself. I don't remember exactly when it happened, but I think probably sometime around 2017.
I know around the same time that I was on your show, you were on mine. So we kind of flip-flopped.
And then you've been on the show again since then, talking about your experience working with MongoDB and Python.
Yeah.
Beyond that, I also ended up starting a second podcast. So I've got Podcast in It, which focuses on Python and its community.
So a lot of stuff about DevOps, data science, machine learning, web development, you name it.
Anything that people are doing with Python, I've had them on.
But I've also started a second show focused on data engineering.
So going beyond just the constraints of Python into a separate niche.
So more languages, but more tightly focused problem domain.
And so I've been enjoying learning a lot more about the area of data engineering.
And so it's actually been a good companion to the two where there's a lot of data science that happens in Python.
So I'm able to cover that side of things on podcast.init.
And then data engineering is all of the prep work that makes data scientists' lives easier.
And so just learning a lot about the technologies and challenges that happen on that side of things.
Yeah, that's super cool.
And to be honest, one of the reasons I invite you on the show is because I know people talk about data engineering.
And I know there's neat tools in there.
They feel like they come out of the data science space, but not exactly.
And so I'm really looking forward to learning about them along with everyone else listening.
So it's going to be a lot of fun.
Yeah.
Before we dive into that, let people maybe know, what are you doing day to day these days?
Are you doing consulting?
Are you got a full time job?
Oh, what's the plan?
Yes.
Yes to all of that.
So, yeah, I mean, I run the podcast as a side, just sort of hobby.
And for my day to day, I actually work full time at MIT in the open learning department and help run the platform engineering and data engineering team there.
So responsible for making sure that all the cloud environments are set up and secured and servers are up and running and applications stay available.
And working through building out a data platform to provide a lot of means for analytics and gaining insights into the learning habits and the behaviors that global learners have and how they interact with all of the different platforms that we run.
That's fantastic.
Yeah, it's definitely a great place to work.
I've been happy to be there for a number of years now.
And then, you know, I run the podcast.
So those go out every week.
So a lot of stuff that happens behind the scenes there.
And then I also do some consulting where lately it's been more of the advisory type where it used to be I'd be hands on keyboard, but I've been able to level up beyond that.
And so I've been working with a couple of venture capital firms to help them understand the data ecosystem.
So data engineering, data science.
I've also worked a little bit with a couple of businesses, just helping them understand sort of what are the challenges and what's the potential in the data marketplace and data ecosystem to be able to go beyond just having an application and then being able to use the information and the data that they gather from that to be able to build more interesting insights into their business, but also products for their customers.
Oh, yeah, that sounds really fun.
I mean, working for MIT sounds amazing.
And then those advisory roles are really neat because you kind of get a take, especially as a podcaster, you get this broad view because you talk to so many people and, you know, they've got different situations and different contexts.
And so you can say, all right, look, here's kind of what I see.
You seem to fit into this realm.
And so this might be the right path.
Absolutely.
Yeah.
I mean, the data ecosystem in particular is very fast moving.
So it's definitely very difficult to be able to keep abreast with all the different aspects of it.
And so because that's kind of my job as a podcaster, I'm able to dig deep into various areas of it and be able to learn from and take advantage of all of the expertise and insight that these various innovators and leaders in the space have and kind of synthesize that because I'm talking to people across the storage layer to the data processing layer and orchestration and analytics and machine learning and operationalizing all of that.
Whereas if I were one of the people who's deep in the trenches, it's, you know, you get a very detailed but narrow view, whereas I've got a very shallow and broad view across the whole ecosystem.
So I'm able to.
Which is the perfect match for the high level view, right?
Exactly.
Nice.
All right.
Well, let's jump into our main topic.
And we touched on it a little bit, but I know what data science is, I think.
And there's a really interesting interview I did with Emily and Jacqueline.
I don't remember both their last names recently, but about building a career in data science.
And they talked about basically three areas of data science that you might be in, like production and machine learning versus making predictions and so on.
And data engineering, it feels like it's kind of in that data science realm, but it's not exactly that.
Like it could kind of be databases and other stuff too, right?
Like what is this data engineering thing, maybe compare and contrast against data science as people probably know that pretty well.
Yeah.
So it's one of those kind of all encompassing terms that, you know, the role depends on the organization that you're in.
So in some places, data engineer might just be the person who, you know, used to be the DBA or the database administrator.
And other places, they might be responsible for maintaining streaming systems.
One way that I've seen it broken down is kind of two sort of broad classifications of data engineering is there's the SQL focused data engineer where they might have a background as a database administrator.
And so they do a lot of work in managing the data warehouse.
They work with SQL oriented tools where there are a lot of them coming out now where you can actually use SQL for being able to pull data from source systems into the data warehouse and then provide, you know, build transformations to provide to analysts and data scientists.
And then there is the more engineering oriented data engineer, which is somebody who writes a lot of software.
They're building complex infrastructure and architectures using things like Kafka or Flink or Spark.
They're working with the database.
They're working with data orchestration tools like Airflow or Dagster or Prefect.
They might be using Dask.
And so they're much more focused on actually writing software and delivering code as the output of their efforts.
Right.
Okay.
But the shared context across however you define data engineering, the shared aspect of it is that they're all working to bring data from multiple locations into a place that is accessible for various end users where the end users might be analysts or data scientists or the business intelligence tools.
And they're tasked with making sure that those workflows are repeatable and maintainable and that the data is clean and organized so that it's useful because, you know, everybody knows the whole garbage in garbage out principle.
Yeah.
If you're a data scientist and you don't have all the context of where the data is coming from, you just have a small narrow scope of what you need to work with.
You're kind of struggling with that garbage in garbage out principle.
And so the data engineer's job is to get rid of all the garbage and give you something clean that you can work from.
I think that's really a tricky problem in the data science side of things.
You take your data, you run it through a model or through some analysis graphing layer, and it gives you a picture.
And you're like, well, that's the answer.
Maybe.
Maybe it is.
Right.
Did you give it the right input?
Did you train the models in the right data?
Who knows, right?
Right.
That's, you know, definitely a big challenge.
And that's one of the reasons why data engineering has become so multifaceted is because what you're doing with the data informs the ways that you prepare the data.
You know, you need to make sure that you have a lot of the contextual information as well to make sure that the data scientists and data analysts are able to answer the questions accurately.
Because data in isolation, if you just give somebody the number five, it's completely meaningless.
But if you tell them that a customer ordered five of this unit, well, then now you can actually do something with it.
So the context helps to provide the information about the isolated number and understanding where it came from and why it's important.
Yeah, absolutely.
You know, two things come to mind when I hear data engineering for me is like one is like pipelines of data.
You know, maybe you've got to bring in data and do transformations to it to get it ready.
This is part of that data cleanup, maybe, and taking disparate sources and unifying them under one canonical model or something in representation.
And then ETL, I kind of like we get something terrible like FTP uploads of CSV files.
And we've got to turn those into databases like overnight jobs, right?
Or things like that, which probably still exist.
They existed not too long ago.
Yeah.
Every sort of legacy technology that you think has gone away because you're not working with it anymore is still in existence somewhere, which is why we still have COBOL.
Exactly.
Oh, my gosh.
I've got some crazy, crazy COBOL stories for you that probably shouldn't go out public.
But ask me over the next conference.
The next time we get to travel somewhere, you know?
All right.
Sounds good.
For sure.
So let's talk about trends.
I made that joke, right?
Like, well, maybe it used to be CSV files or text files and FTP and then a job that would put that into a SQL database or some kind of relational database.
What is it now?
It's got to be better than that, right?
I mean, again, it depends where you are.
I mean, CSV files are still a thing.
You know, it might not be FTP anymore.
It's probably going to be living in object storage like S3 or Google Cloud Storage.
But, you know, you're still working with individual files in some places.
A lot of it is coming from APIs or databases where you might need to pull all of the information from Salesforce to get your CRM data.
Or you might be pulling data out of Google Analytics via their API.
You know, there are a lot of evolutionary trends that have happened.
Sort of first big movement in data engineering beyond just the sort of, well, there have been a few generations.
So the first generation was the data warehouse where you took a database appliance, whether that was Oracle or Microsoft SQL Server or Postgres.
You put all of your data into it.
And then you had to do a lot of work to model it so that you could answer questions about that data.
So in an application database, you're liable to just overwrite a record when something changes,
where in a data warehouse, you want that historical information about what changed and the evolution of that data.
What about like normalization in operational databases?
It's all about one source of truth.
We better not have any duplication.
It's fine if there's four joins to get there.
Whereas in warehousing, it's maybe better to have that duplication so you can run different types of reports real quickly and easily.
Exactly.
Yeah.
I mean, you still need to have one source of truth, but you will model the tables differently than in an application database.
So there are things like the star schema or the snowflake schema that became popular in the initial phase of data warehousing.
So Ralph Kimball is famous for building out the sort of star schema approach with facts and dimensions.
Yeah.
Maybe describe that a little bit for people because maybe they don't know these terms.
Sure.
So facts are things like, you know, a fact is Tobias Macy works at MIT.
And then a dimension might be he was hired in 2016 or whatever year it was.
And another dimension of it is he, you know, his work anniversary is X date.
And so the way that you model it makes it so a fact is something that's immutable and then a dimension or things that might evolve over time.
And then in sort of the next iteration of data engineering and data management was the sort of, quote unquote, big data craze where Google released their paper about MapReduce.
And so Hadoop came out as a open source option for that.
And so everybody said, oh, I've got to get.
Yeah.
MapReduce was going to take over the world.
Right.
Like that was the only way you could do anything.
If you had big data, then you had to MapReduce it.
And then maybe it had to do with one of these large scaled out databases.
Right.
Spark or Cassandra or who knows something like that.
Yeah.
I mean, Spark and Cassandra came after Hadoop.
So, I mean, Hadoop was your option in the early 2000s.
And so everybody said, oh, big data is the answer.
If I just throw big data at everything, it'll solve all my problems.
And so people built these massive data lakes using Hadoop and built these MapReduce jobs and then realized that what are we actually doing with all this data?
It's costing us more money than it's worth.
MapReduce jobs are difficult to scale.
They're difficult to understand the order of dependencies.
And so that's when things like Spark came out to use the data that you were already collecting, but be able to parallelize the operations and run it a little faster.
And so, you know, that was sort of the era of batch oriented workflows.
And then with the advent of things like Spark streaming and Kafka and, you know, there are a whole number of other tools out there now, like Flink and Pulsar.
The sort of real time revolution is where we're at now, where it's not enough to be able to understand what happened the next day.
You have to understand what's happening, you know, within five minutes.
And so there are principles like change data capture, where every time I write a new record into a database, it goes into a Kafka queue, which then gets replicated out to an Elasticsearch cluster and to my data warehouse.
And so within five minutes, my business intelligence dashboard is updated with the fact that customer A bought product B rather than having to wait in 24 hours to get that insight.
I think that makes tons of sense.
So instead of going like, we're just going to pile the data into this, you know, some sort of data lake type thing, then we'll grab it and we'll do our reports nightly or hourly or whatever.
You just keep pushing it down the road as it comes in or as it's generated, right?
Right.
Yeah.
So, I mean, there are still use cases for batch.
I mean, and there are different ways of looking at it.
So, I mean, a lot of people view batch as just a special case of streaming where, you know, streaming is sort of micro batches where as a record comes in, you operate on it.
And then for large batch jobs, you're just doing the same thing, but multiple times for a number of records.
Yeah.
I mean, there are a lot of paradigms that are building up.
People are getting used to the idea.
I mean, batch is still the easier thing to implement.
It requires fewer moving pieces, but streaming the sort of availability of different technologies is making it more feasible for more people to be able to actually take advantage of that.
And so there are managed platforms that help you with that problem.
There are a lot of open source projects that approach it.
Yeah.
There's a whole platforms that are just around to just do data streaming for you, right?
To just like sort of manage that and keep that alive.
And with the popularization of web hooks, right, it's easy to say if something changes here, you know, notify this other thing and that thing can call it things.
And it seems like it's coming along.
Yeah.
One of the interesting aspects, too, of a lot of the work that's been going into the data engineering space is that you're starting to see some of the architectural patterns and technologies move back into the application development domain.
Where a lot of applications, particularly if you're working with microservices, will use something like a Kafka or a Pulsar queue as the communication layer for being able to propagate information across all the different decoupled applications.
And that's the same technology and same architectural approaches that are being used for these real-time data pipelines.
Yeah.
Man, aren't queues amazing for adding scale to systems, right?
And if it's going to take too long, throw it in a queue and let the thing crank on it for 30 seconds.
It'll be good.
Absolutely.
I mean, Celery is, you know, the same idea.
It's just a smaller scale.
And so, you know, RabbitMQ, it's more ephemeral.
Whereas when you're putting it into these durable queues, you can do more with the information where you can rewind time to be able to say, okay, I changed my logic.
I now want to reprocess all of these records from the past three months.
Whereas if you had that on RabbitMQ, all of those records are gone unless you wrote them out somewhere else.
You're not going to have to go to the next one.
where the issue is coming from or how to solve it? Datadog seamlessly correlates logs and traces
at the level of individual requests, allowing you to quickly troubleshoot your Python application.
Plus, their continuous profiler allows you to find the most resource-consuming parts of your
production code all the time at any scale with minimal overhead. Be the hero that got that app
back on track at your company. Get started today with a free trial at talkpython.fm/datadog,
or just click the link in your podcast player's show notes. Get the insight you've been missing
with Datadog. A couple of comments from the live stream. Defria says Airflow, Apache Airflow is
really cool for sure. We're going to talk about that. But I did want to ask you about the cloud.
Stefan says, I'm a little bit skeptical about the privacy and security on the cloud. So kind of
want to use the zone server more often. So maybe that's a trend that you could speak to that you've
seen with folks you've interviewed. This kind of data is really sensitive sometimes and people are
very protective of it or whatever. Right. So what is the cloud story versus, oh, we got to do this all
on prem or maybe even some hybrid thereof? Right. So I mean, it's definitely an important question and
something that is, it's a complicated problem. There are ways to solve it. I mean, data governance
is kind of the umbrella term that's used for saying, I want to keep control of my data and make sure that I
am using the appropriate regulatory aspects and making sure that I am filtering out private information or
encrypting data at rest, encrypting data in transit. And so there are definitely ways that you can
keep tight control over your data, even when you're in the cloud. And a lot of the cloud platforms have
been building out capabilities to make it easier for you. So for instance, if you're on Amazon,
they have their key management service that you can use to encrypt all of your storage at rest.
You can provide your own keys if you don't trust them to hold the keys to the kingdom there so that you
are the person who's in control of being able to encrypt and decrypt your data.
You know, there are a class of technologies used in data warehouses called privacy enhancing
technologies, where you can actually have all of the rows in your database fully encrypted.
And then you can encrypt the predicate of a SQL query to be able to see if the data matches the
values in the database without ever actually having to decrypt anything so that you could do some
rudimentary analytics like aggregates on that information so that it all stays safe.
There's also a class of technologies that are still a little bit in the experimental phase called
homomorphic encryption, where it actually the data is never actually decrypted. So it lives in this
encrypted enclave, your data processing job operates within that encrypted space. And so there's never any
actual clear text information stored anywhere, not even in your computer's RAM.
Wow. So if one of those like weird CPU bugs that lets you jump through the memory of like different
VMs or something like that, even then you're probably okay, right?
Absolutely. Yeah. I mean, the homomorphic encryption, there are some companies out there that are
offering that as a managed service. And, you know, it's becoming more viable. It's been something that's
been discussed and theorized about for a long time. But because of the computational cost, it was something
that was never really commercialized. But there are a lot of algorithms that have been discovered to help
make it more feasible to actually use in production contexts.
Yeah. I don't know about the other databases. I know MongoDB, they added some feature where you
can encrypt just certain fields, right? So maybe here's a field that is sensitive, but you don't
necessarily need to query by for your reports, but it needs to be in with, say, with a user or an order
or something like that. So even going to that part might be a pretty good step. But yeah, the clouds are
both amazing and scary, I suppose.
Yeah. Yeah. I mean, there's definitely a lot of options. It's something that requires a bit of
understanding and legwork, but it's definitely possible to make sure that all your data stays
secured and that you are in full control over where it's being used.
Yeah. So one of the next things I wanted to ask you about is languages. So you're probably familiar
with this chart here, right? Which if people are not watching the stream, this is the Stack Overflow
trend showing Python just trouncing the other languages, including Java. But I know Java had been
maybe one of the main ways that probably has to do with Spark and whatnot to some degree.
What do you see Python's role relative to other technologies here?
So Python has definitely been growing a lot in the data engineering space,
largely because of the fact that it's so popular in data science. And so there are data scientists
who have been moving further down the stack into data engineering as a requirement of their job.
And so they are bringing Python into those layers of the stack. It's also being used as just a unifying
language so that data engineers and data scientists can work on the same code bases. As you mentioned,
Java has been popular for a long time in the data ecosystem because of things like Hadoop and Spark.
And looking at the trend graph, I'd be interested to see what it looks like if you actually combine the
popularities of Java and Scala because Scala has become the strong contender in that space as well
because of things like Spark and Flink that have native support for Scala. It's a bit more of an
esoteric language, but it's used a lot in data processing. But Python has definitely gained a lot
of ground. And also because of tools like Airflow, which was kind of the first generation tool built for
data engineers by data engineers to be able to manage these dependency graphs of operations so
that you can have these pipelines to say, you know, I need to pull data out of Salesforce and then land
it into S3. And then I need to have another job that takes that data out of S3 and puts it into the
database. And then also that same S3 data needs to go into an analytics job. Then once those two jobs
are complete, I need to kick off another job that then runs a SQL query against the data warehouse to be
able to provide some aggregate information to my sales and marketing team to say, this is what your
customer engagement is looking like or whatever it might be. Yeah. And that was all written in Python.
And also just because of the massive ecosystem of libraries that Python has for being able to
interconnect across all these different systems and data engineering at a certain level is really just
a systems integration task where you need to be able to have information flowing across all of these
different layers and all these different systems and get good control over it. Some of the interesting tools
that have come out as a sort of generational improvement over Airflow are Dagster and Prefect.
I've actually been using Dagster for my own work at MIT and been enjoying that tool. I'm always happy to dig into
that.
Let's sort of focus on those things. And one of the themes I wanted to cover is maybe the five most important
packages or libraries for data engineering. And you kind of hit the first one that will group together as a
trifecta, right? So Airflow, Dagster, and Prefect. You want to maybe tell us about those three?
Yeah.
Which one do you prefer?
So I personally use Dagster. I like a lot of the abstractions and the interface design that they
provide, but they're all three grouped into a category of tools called sort of workflow management
or data orchestration. And so the responsibility there is that you need to have a way to build these
pipelines, build these DAGs or directed acyclic graphs of operations where the vertices of the graph
are the data and the nodes are the jobs or the operations being performed on them. And so you
need to be able to build up this dependency chain because you need to get information out of a source
system. You need to get it into a target system. You might need to perform some transformations either
on route or after it's been landed. You know, one of the common trends that's happening is it used to
be extract, transform, and then load because you needed to have all of the information in that
specialized schema for the data warehouse that we were mentioning earlier.
Right. Right. And all the relational database, database, it's got to have these columns in this.
It can't be a long character. It's got to be a VAR, VAR car 10 or whatever.
Right. And then with the advent of the cloud data warehouses that have been happening in the past few
years that was kicked off by Redshift from Amazon and then carried on by things like Google BigQuery,
Snowflake that a lot of people will probably be aware of. You know, there are a number of other
systems and platforms out there. Presto out of Facebook that is now an open source project,
actually renamed it to Trino. Those systems are allowing people to be very SQL oriented,
but because of the fact that they're scalable and they provide more flexible data models,
the trend has gone to extract, load, and then transform because you can just replicate the schema
as is into these destination systems. And then you can perform all of your transformations in SQL.
And so that brings us into another tool that is in the Python ecosystem that's been gaining a lot of
ground called DBT or data build tool. And so this is a tool that actually brings data analysts and
improves their skill set, makes them more self-sufficient within the organization and provides a lot of,
provides a great framework for them to operate in an engineering mindset where it helps to build up a
specialized DAG within the context of the data warehouse to take those source data sets that are
landed into the data warehouse from the extract and load jobs and build these transformations.
So you might have the user table from your application database and the orders table.
And then you also have the Salesforce information that's landed in a separate table.
And you want to be able to combine all of those to be able to understand your customer order,
customer buying patterns. And so you use SQL to build either a view or build a new table out of that
source information in the data warehouse and DBT will handle that workflow.
It also has support for being able to build unit tests in SQL into your workflow.
Oh, how interesting. Yeah. That's something that you hadn't really heard very much of
10 years ago was testing and databases. It was usually, how do I get the database out of the
picture so I can test without depending upon it or something like that? That was the story.
Yeah. That's another real growing trend is the overall aspect of data quality and confidence in your
data flows. So things like in Dagster and Prefect and Airflow, they have support for being able to
unit test your pipelines, which is another great aspect of the Python ecosystem is you can just
write pytest code to ensure that all the operations on your data match your expectations and you don't
have regressions and bugs. Right. Right. Absolutely.
The complicating aspect of data engineering is that it's not just the code that you need to make sure
is right, but you also need to make sure that the data is right. And so another tool that is helping
in that aspect, again, from the Python ecosystem is great expectations.
Right. And that's right in the realm of this testing your data.
Yeah. Exactly. Absolutely.
So you can say, you know, I'm pulling data out of my application database. I expect the schema to have
these columns in it. I expect the data distribution within this column to, you know, the values are only
going to range from zero to five. And then if I get a value outside of that range, then I can,
you know, it will fail the test and it will notify me that something's off. So you can build these very
expressive and flexible expectations of what your data looks like, what your data pipeline is going to do
so that you can gain visibility and confidence into what's actually happening as you are propagating
information across all these different systems. So do you make this part of your continuous
integration tests? Absolutely. Yeah. So it would be part of your continuous integration as you're
delivering new versions of your pipeline, but it's also something that executes in the context of the
nightly batch job or of your streaming pipeline. So it's both a build time and a runtime expectation.
Yeah, yeah, yeah. So it's like a pre test. It's like an if test for your function.
But for your data, right? Like, let's make sure everything's good before we run through this and
actually drop the answer on to the dashboard for the morning or something like that.
Okay, right. Yeah, it helps to build up that confidence because anybody who's been working
in data has had the experience of I delivered this report, I feel great about it. I'm happy that I was
able to get this thing to run through and then you hand it off to your CEO or your CTO and they look at it
and they say, well, this doesn't quite look right. And then you go back and realize, oh, crud,
that's because I forgot to pull in this other column or whatever it is. And so this way you
can not have to have that sinking feeling in your gut when you hand off the report.
That would be bad. What would be worse is we decided to invest by buying a significant position
in this other company. Oh, but it turned out, whoops, it was actually we had a negative sign.
It wasn't really good for you to invest in this.
Absolutely. Yep.
If it's actions have been taken.
The next question of Talk Python to me is brought to you by Retool. Do you really need a full dev team to build
that simple internal app at your company? I'm talking about those back office apps,
the tool your customer service team uses to access your database, that S3 uploader you built last year for the marketing team,
the quick admin panel that lets you monitor key KPIs, or maybe even the tool your data science team hacked together
so they could provide custom ad spend insights.
Literally every type of business relies on these internal tools, but not many engineers love building these tools,
let alone get excited about maintaining or supporting them over time.
They eventually fall into the please don't touch it. It's working category of apps.
And here's where Retool comes in. Companies like DoorDash, Brex, Plaid, and even Amazon use Retool to build internal tools super fast.
The idea is that almost all internal tools look the same.
Forms over data. They're made up of tables, dropdowns, buttons, text input,
and so on.
Retool gives you a point, click, and drag and drop interface that makes it super simple to build internal UIs like this in hours, not days.
Retool can connect to any database or API.
Want to pull data from Postgres? Just write a SQL query and drag the table onto your canvas.
Search across those fields, add a search input bar and update your query.
Save it, share it, super easy.
Retool is built by engineers, explicitly for engineers.
It can be set up to run on-prem in about 15 minutes using Docker, Kubernetes, or Heroku.
Get started with Retool today.
Just visit talkpython.fm/retool or click the Retool link in your podcast player show notes.
Hey, let me jump you back really quick to that language trends question real quick.
So Anthony Lister asks if R is still widely used and sort of a strong competitor, let's say, to Python.
What's your thoughts these days?
I kind of honestly hear a little bit less of it in my world for some reason.
Yeah, so there are definitely a lot of languages.
R is definitely one of them that's still popular in the data space.
I don't really see R in the data engineering context.
It's definitely still used for a lot of statistical modeling, machine learning, data science workloads.
There's a lot of great interoperability between R and Python now, especially with the Arrow project, which is a in-memory columnar representation that provides an interoperable, provides an in-memory space where you can actually exchange data between R and Python and Java without having to do any IO copying between them.
So it helps to reduce a lot of the impedance mismatch between those languages.
Another language that's been gaining a lot of ground in the data ecosystem is Julia, and they're actually under the NumFocus organization that supports a lot of the Python data ecosystem.
Yeah.
So Julia has been gaining a lot of ground, but Python, just because of its broad use, is still very popular.
And there's an anecdote that I've heard a number of times, I don't remember where I first came across it, that Python isn't the best language for anything, but it's the second best language for everything.
Yeah, that's a good quote.
I think it does put a lot of perspective on it.
I feel like it's just so approachable, right?
Exactly.
And there's a lot of these languages that might make slightly more sense for a certain use case like R and statistics, but you better not want to have to build some other thing that reaches outside of what's easily possible, right?
Like, right, you want to make that an API now?
Well, all of a sudden, it's not so easy or whatever, right?
Something along those lines.
Exactly.
All right.
Next in our list here is Dask.
Yeah.
So Dask is a great tool.
I kind of think about it as the Python version of Spark.
There are a number of reasons that's not exactly accurate, but it's a tool that lets you parallelize your Python operations, scale it out into clusters.
It also has a library called Dask.distributed that's used a lot for just scaling out Python independent of actually building the directed acyclic graphs in Dask.
So one of the main ways that Spark is used is as an ETL engine.
So you can build these graphs of tasks in Spark.
You can do the same thing with Dask.
It was actually built originally more for the hard sciences and for scientific workloads and not just for data science.
Yeah.
But Dask is actually also used as a foundational layer for a number of the data orchestration tools out there.
So Dask is the foundational layer for Prefect.
You can use it as an execution substrate for the Dagster library, the Dagster framework.
It's also supported in Airflow as a execution layer.
And there are also a number of people who are using it as a replacement for things like Celery as just a means of running asynchronous tasks outside of the bounds of a request response cycle.
So it's just growing a lot in the data ecosystem, both for data engineering and data science.
And so it just provides that unified layer of being able to build your data engineering workflows and then hand that directly off into machine learning so that you don't have to jump between different systems.
You can do it all in one layer.
Yeah, that's super neat.
And Dask, I never really appreciated it.
Sort of it's different levels at which you can use it, I guess I should say.
You know, when I thought about it, OK, well, this is like parallel computing for Pandas or for NumPy or something like that.
Right.
But it's also it works well on just your single laptop.
Right.
It'll let you run multi-core stuff locally because Python doesn't always do that super well.
And it'll even think it'll even do caching and stuff so it can actually work with more data than you have RAM, which is hard, which is straight NumPy.
But then, of course, you can point it at a cluster and go crazy.
Exactly.
Yeah.
And because of the fact that it has those transparent API layers for being able to swap out the upstream Pandas with the Dask Pandas library and NumPy, it's easy to go from working on your laptop to just changing an import statement.
And now you're scaling out across a cluster of hundreds of machines.
Yeah, that's pretty awesome, actually.
Yeah.
Maybe that has something as well to do with the batch to real time.
Right.
If you've got to run it in one on one core on one machine, it's a batch job.
If you can run it on the entire cluster at, you know, that's sitting around idle.
Well, then all of a sudden it's real time.
Right.
Yeah, there's a lot of interesting real time stuff.
There's an interesting project, sort of a side note here called Wallaroo that's built for building stateful stream processing jobs using Python.
And interestingly, it's actually implemented in a language called Pony.
But Pony?
Yeah.
An interesting project, you know, levels up your ability to scale out the speed of execution and the sort of just being able to build these complex pipelines real time jobs.
without having to build all of the foundational layers of it.
Yeah.
Okay.
Interesting.
I have not heard of this one.
That sounds fun.
Yeah.
It's not as widely known.
I interviewed the creator of it on the data engineering podcast a while back, but it's a tool that comes up every now and then.
Interesting approach to it.
Yeah.
Right in that stream processing real time world.
Right.
The next one that you put on our list here is...
Meltano.
I got to say it right.
Yeah.
So that one is an interesting project.
It came from the GitLab folks.
It's still supported by them.
And in its earliest stage, they actually wanted it to be the full end-to-end solution for data analytics for startups.
Meltano is actually an acronym for, if I can remember correctly, model, extract, load, transform, analyze, notebook, and orchestrate.
Okay.
Yeah.
That's quite a wild one to put into something you can say well.
Exactly.
And, you know, about a year, year and a half ago now, they actually decided that they were being a little too ambitious and trying to boil the ocean and scoped it down to doing the extract and load portions of the workflow really well.
Because it's a very underserved market where you would think that given the amount of data we're all working with, point-to-point data integration and extract and load would be a solved problem, easy to do.
But there's a lot of nuance to it.
And there isn't really one easy thing to say, yes, that's the tool you want to use all the time.
And so there are some paid options out there that are good.
Meltano is aiming to be the default open source answer for data integration.
And so it's building on top of the Singer specification, which is sort of an ecosystem of libraries that was built by a company called Stitch Data.
But the idea is that you have what they call taps and targets, where a tap will tap into a source system, pull data out of it, and then the targets will load that data into a target system.
And they have this interoperable specification that's JSON-based so that you can just wire together any two taps and targets to be able to pull data from a source into a destination system.
Nice.
Yeah, it's definitely a well-designed specification.
A lot of people like it.
There are some issues with the way that the ecosystem was sort of created and fostered.
So there's a lot of uncertainty or variability in terms of the quality of the implementations of these taps and targets.
And there was never really one cohesive answer to this is how you run these in a production context, partially because Stitch Data was the answer to that.
So they wanted you to buy into this open source ecosystem so that you would then use them as the actual execution layer.
And so Meltano is working to build an open source option for you to be able to wire together these taps and targets and be able to just have an easy out-of-the-box data integration solution.
So it's a small team from GitLab, but there's a large and growing community helping to support it.
And they've actually been doing a lot to help push forward the state-of-the-art for the Singer ecosystem, building things like a starter template for people building taps and targets so that there's a common baseline of quality built into these different implementations without having to wonder about, you know, is this tap going to support all of the features of the specification that I need?
Nice.
Is this actually from GitLab?
Yeah, so it's sponsored by GitLab.
It's the source code is within the GitLab organization on GitLab.com, but it's definitely a very community-driven project.
Yeah, Stefan is quite excited about the open source and default open source choice.
Yeah.
Well, I think there's two things.
One, open source is amazing, but two, you get this paradox of choice, right?
It's like, well, it's great.
You can have anything, but there's so many things and I'm new to this.
What do I do?
Right.
And so, yeah, Meltano is trying to be the answer to, you know, you just Meltano in it, you have a project, you say, I want these sources and destinations, and then it will help you handle things like making sure that the jobs run on a schedule, handling, tracking the state of the operations, because you can do either full extracts and loads every time, or you can do incremental, because you don't necessarily want to dump a 4 million line source table every single time it runs.
You just want to pull the 15 lines that changed since the last operation.
So it will help track that state for you.
Oh, that's cool.
And try to be real efficient and just get what it needs.
Yeah.
And it builds in some of the monitoring information that you want to be able to see as far as like execution time, performance of these jobs.
And it actually, out of the box, will use Airflow as the orchestration engine for being able to manage these schedules, but everything is pluggable.
So if you wanted to write your own implementation that will use Dagster as the orchestrator instead, then they'll do that.
There's actually a ticket in their tracker for doing that work.
So it's very pluggable, very flexible, but gives you a lot of out of the box answers to being able to just get something up and running quickly.
Yeah.
And it looks like you can build custom loaders and custom extractors.
So if you've got some internal API, that's who knows, maybe it's a SOAP XML endpoint or some random thing, right?
You could do that.
Exactly.
Yeah.
And they actually lean on DBT, another tool that we were just talking about, as the transformation layer.
So they hook directly into that so that you can very easily do the extract and load and then jump into DBT for doing the transformations.
Yeah.
Now, you didn't put this one on the list, but I do want to ask you about it.
What's the story of something like Zapier in this whole, you know, get notified about these changes, push stuff here?
I mean, it feels like if you were trying to wire things together, I've seen more than one Python developer reach for Zapier.
Yeah. So Zapier is definitely a great platform, particularly for doing these event-based workflows.
You can use it as a data engineering tool if you want, but it's not really what it's designed for.
It's more just for business automation aspects or maybe automation of my application did this thing,
and now I want to have it replicate some of that state out to a third-party system.
Zapier isn't really meant for the sort of full-scale data engineering workflows, maintaining visibility.
It's more just for this evented IO kind of thing.
Yeah. So here on the Meltano, it says,
Pipelanger code ready to be version controlled and containerized and deployed continuously.
The CI-CD side sounds pretty interesting, right?
Especially with these workflows that might be in flight while you're making changes.
How does that work?
How does that work? Do you know?
It's basically the point with Meltano is that everything is versioned in Git.
So that's another movement that's been happening in the data engineering ecosystem where early on,
a lot of the people coming to it were systems administrators, database administrators,
maybe data scientists who had a lot of the domain knowledge,
but not as much of the engineering expertise to be able to build these workflows in a highly engineered,
highly repeatable way.
And the past few years has been seeing a lot of movement of moving to data ops and ML ops to
make sure that all of these workflows are well-engineered, well-managed,
you know, version controlled, tested.
And so having this DevOps oriented approach to data integration is what Meltano is focusing on,
saying all of your configuration, all of your workflows, it lives in Git.
You can run it through your CI-CD pipeline to make sure that it's tested.
And then when you deliver it, you know that you can trust that it's going to do what you want it to do
rather than I just push this config from my laptop and hopefully it doesn't blow up.
Right.
It also sounds like there's a lot of interplay between these things like Meltano might be leveraging Airflow
and DBT and maybe you want to test this through CI with great expectations before it goes through its CD side,
like continuous deployment.
Seems like there's just a lot of interflow here.
Definitely.
And there have been a few times where I've been talking to people and they've asked me to kind of
categorize different tools or like draw nice lines about what are the dividing layers of the different
of the data stack.
And it's not an easy answer because so many of these tools fit into a lot of different boxes.
So, you know, Spark is a streaming engine, but it's also an ELT tool.
And, you know, Dagster is a data orchestration tool, but it can also be used for managing delivery.
You can write it to do arbitrary tasks.
So you can build up these chains of tasks.
So if you wanted to use it for UCI-CD, you could.
Quite what it's built for.
But, you know, and then different databases have been growing a lot of different capabilities
where, you know, it used to be you had your SQL database or you had your document database
or you had your graph database.
And then you have things like Arango DB, which can be a graph database and a document database
and a SQL database all on the same engine.
So, you know, there's a lot of multimodal databases.
It's all of the SQL and all the NoSQL, all in one.
Right.
And, you know, JSON is being pushed into relational databases and data warehouses.
So there's a lot of crossover between the different aspects of the data stack.
Yeah, there probably is more of that, I would say, in this like data warehousing stuff.
You know, in an operational database, it doesn't necessarily make a ton of sense to jam JSON
blobs all over the place.
You might as well just make tables and columns.
Yeah.
No, it makes some sense, but not that much.
But in this space, you might get a bunch of things you don't really know what their shape
is or exactly you're not ready to process it.
You just want to save it and then try to deal with it later.
So do you see more of that, those kind of JSON columns or more NoSQL stuff?
Absolutely.
Basically, any data warehouse worth its salt these days has to have some sort of support for nested
data.
A lot of that, too, comes out of the outgrowth of, you know, we had the first generation data
warehouses.
They did their thing, but they were difficult to scale and they were very expensive.
And you had to buy these beefy machines so that you were planning for the maximum capacity
that you're going to have.
And then came things like Hadoop, where you said, oh, you can scale out as much as you
want, just add more machines.
They're all commodity.
And so that brought in the era of the data lake.
And then things like S3 became inexpensive enough that you could put all of your data storage
in S3, but then still use the rest of the Hadoop ecosystem for doing MapReduce jobs
on that.
And then that became the next generation data lake.
And then things like Presto came along to be able to build a data warehouse interface on
top of this distributed data and these various data sources.
And then you had the dedicated data warehouses built for the cloud, where they were designed
to be able to ingest data from S3, where you might have a lot of unstructured information.
And then you can clean it up using things like DBT to build these transformations, have these
nicely structured tables built off of this nested or messy data that you're pulling in from various
data sources.
Yeah.
Interesting.
When you see the story of versioning of this, the data itself, I'm thinking.
So I've got this huge pile of data I've built up and we're using to drive these pipelines.
But it seems like the kind of data that could change.
Or I brought in a new source now that we've switched credit card providers or we're now screen
scraping extra data.
Do you see anything interesting happen there?
Yeah.
So there's definitely a lot of interesting stuff happening in the data versioning space.
So I mean, one tool that was kind of early to the party is a platform called Packaderm.
They're designed as a end-to-end solution built on top of Kubernetes for being able to do data
science and data engineering and data versioning.
So your code and your data all gets versioned together.
There's a system called LakeFS that was released recently that provides a Git-like workflow on top
of your data that lives in S3.
And so they act as a proxy to S3, but it lets you branch your data to say,
I want to bring in this new data source.
And as long as everything is using LakeFS as the interface,
then your main branch won't see any of this new data source until you are happy with it.
And then you can commit it and merge it back into the main branch and then it becomes live.
And so this is a way to be able to experiment with different processing workflows to say,
I want to try out this new transformation job or this new batch job,
or I want to bring in this new data source, but I'm not quite confident about it yet.
And so it brings in this versioning workflow.
There's another system combination of two tools called Iceberg,
which is a table format for use in these large-scale data lakes,
data warehouses that hooks into things like Spark and Presto.
And there's another accompanying project called Nessie that is inspired by Git for being able
to do the same type of branching and merging workflow for bringing in new data sources
or changing table schemas and things like that.
Wow.
These all sound like such fun tools to learn and they're all solving painful problems.
Right.
And then another one actually from the Python ecosystem is DVC or data version control that's
built for machine learning and data science workflows that actually integrates with your source code
management so that you get commit and get push.
There's some additional commands, but they're modeled after Git where you commit your code
and then you also push your data and it lives in S3 and it will version the data assets so that
as you make different versions of your experiment with different versions of your data,
it all lives together so that it's repeatable and easier for multiple data scientists or data engineers
to be able to collaborate on it.
Yeah, the version control story around data has always been interesting, right?
It's super tricky.
Absolutely.
I mean, on one hand, your schemas might have to evolve over time.
If you've got a SQLAlchemy model trying to talk to a database, it really hates it if there's a mismatch at all, right?
And so you want those things to go, the database schema maybe to change along with your code with like migrations or something.
But then the data itself, yeah, that's tricky.
Yeah.
And so there's actually a tool called Avro and another one called Parquet.
Well, they're tools, they're data serialization formats.
And Avro in particular has a concept of schema evolution for, you know, what are compatible evolutions of a given schema.
So each record in an Avro file has the schema co-located with it.
So it's kind of like a binary version of JSON, but the schema is embedded with it.
Oh, wow.
Okay, that's interesting.
Yeah. So if you say, I want to change the type of this column from an int to a float, then, you know, maybe that's a supported conversion.
And so it will let you change the schemas or add columns.
But if you try to change the schema in a method that is not backwards compatible, it will actually throw an error.
I see. Like a float to an int might drop data, but an int to a float probably wouldn't.
Exactly. So it will let you evolve your schemas.
And Parquet is actually built to be interoperable with Avro for being able to handle those schema evolutions as well, where Avro is a row or record oriented format.
And Parquet is column oriented, which is more powerful for being able to do aggregate analytics.
And it's more efficient so that you're not pulling all of the data for every row.
You're just pulling all of the data for a given column.
So it's also more compressible.
Yeah. I think I need to do more thinking to really fully grok the column oriented data stores.
Yeah.
It's a different way of thinking.
Yeah. The column oriented aspect is also a major revolution in how data warehousing has come about, where, you know, the first generation was all built on the same databases that we were using for our application.
So it was all row oriented. And that was one of the inherent limits to how well they could scale their compute.
Whereas all of the modern cloud data warehouses or all the modern, even non-cloud data warehouses are column oriented.
And so if you have, you know, one column that is street addresses and another column that's integers and another column that is, you know, bare care 15, all of those are the same data type.
And so they can compress them down a lot more than if you have one row that is a street address and a text field and an integer and a float and a JSON array.
If you try to compress all of those together, they're not compatible data types.
So you have a lot more inefficiency in terms of how well you can compress it.
And then also as you're scanning, you know, a lot of analytics jobs are operating more on aggregates of information than on individual records.
And so if you want to say, I want to find out what is the most common street name across all the street addresses that I have in my database, all I have to do is pull all the information out of that street address column.
It's all co-located on disk.
So it's a faster seek time and it's all compressed the same.
And that way you don't have to read all of the values for all of the rows to get all of the street addresses, which is what you would do in a relational database.
Right.
Because probably those are co-located on disk by row.
Exactly.
Whereas if you're going to ask, so all about the streets across everyone, then it's better to put all the streets and then all the cities or whatever.
Right.
Exactly.
Interesting.
Cool.
Well, I think I actually understand a little bit better now.
Thanks.
The final one that you put on the list that just maybe to put a pen in it as a very, very popular pandas.
I never cease to be amazed with what you can do with pandas.
Yeah.
So, I mean, pandas, it's one of the most flexible tools in the Python toolbox.
I've used it in web development contexts.
I've used it for data engineering.
I've used it for data analysis.
And it's definitely the Swiss army knife of data.
So it's absolutely one of the more critical tools in the toolbox of anybody who's working with data, regardless of the context.
And so it's absolutely no surprise that data engineers reach for it a lot as well.
So pandas is supported natively in things like Dagster, where it will give you a lot of rich metadata information about the column layouts and the data distributions.
But yeah, it's just absolutely indispensable.
You know, it's been covered enough times in both your show and mine.
We don't need to go too deep into it.
But yeah, if you're working with data, absolutely get at least a little bit familiar with pandas.
Well, just to give people a sense, like one of the things I learned yesterday, I think it was, Chris Moffitt was showing off some things with pandas.
And he's like, oh, over on this Wikipedia page, three-fourths of the way down, there's a table.
The table has a header that has a name.
And you can just say, load HTML, give me the table called this as a data frame from screen scraping as part of the page.
It's amazing.
Yeah.
Another interesting aspect of the pandas ecosystem is the pandas extension arrays library that lets you create plugins for pandas to support custom data types.
So I know that they have support for things like geo.json and IP addresses so that you can do more interesting things out of the box in terms of aggregates and group buys and things like that.
So, you know, if you have the IP address pandas extension, then you can say, give me all of the rows that are grouped by this network prefix and things like that.
Whereas just pandas out of the box, we'll just treat it as an object.
And so you have to do a lot more additional coding around it and it's not as efficient.
So that was an interesting aspect to the pandas ecosystem as well.
Nice.
One quick question.
And then I think we should probably wrap this up, Stefan, throughout some stuff about graph databases, particularly GraphQL.
Or that's actually the API, right?
It's efficient, but what about its maturity?
Like, what do you think about some of these new API endpoints?
GraphQL is definitely gaining a lot of popularity.
I mean, so as you mentioned, there's sometimes a little bit of confusion about they both have the word graph in the name.
So GraphQL and GraphDB.
I read it too quickly.
Yeah.
I'm like, oh, yeah, like Neo4j.
Wait, no, it has nothing to do with that.
Right.
So, you know, GraphQL is definitely a popular API design.
Interesting side note is that the guy who created Dagster is also one of the co-creators of GraphQL.
And Dagster has a really nice web UI that comes out of the box that has a GraphQL API to it so that you can do things like trigger jobs or introspect information about the running system.
Another interesting use case, use of GraphQL is there's a database engine called GraphQL that uses GraphQL as its query language.
So it's a native graph storage engine.
It's scalable, horizontally distributable.
And so you can actually model your data as a graph and then query it using GraphQL.
So certainly seeing a lot of interesting use cases within the data ecosystem as well.
Yeah.
For the right hyperdata, a graph database seems like it would really light up the speed of accessing certain things.
Absolutely.
Yeah.
So the funny thing is you have this concept of a relational database, but it's actually not very good at storing information about relationships.
It is.
The joins make them so slow and so on.
Exactly.
The lazy loading or whatever.
Yeah.
Right.
So graph databases are entirely optimized for storing information about relationships so that you can do things like network traversals or understanding within this,
structure of relations.
You know, things like social networks are kind of the natural example of a graph problem where I want to understand what are the degrees of separation between these people.
So, you know, the six degrees of Kevin Bacon kind of thing.
Yeah.
Seems like you could also model a lot of interesting things like the, I don't know how real it is, but, you know, the bananas are at the back or the milk is at the back of the store.
So you have to walk all the way through the store and you can find those kind of traversing those like behaviors and relationships.
Yeah.
The traveling salesman problem, stuff like that.
Yeah.
Yeah, exactly.
All right.
Well, so many tools, way more than five that we actually made our way through, but very, very interesting because I think there's just so much out there and it sounds like a really fun place to work, like a technical space to work.
Absolutely.
You know, a lot of these ideas also seem like they're probably really ripe for people who have programming skills and software engineering mindsets like CICD testing and so on.
Absolutely.
They'll come in and say, I could make a huge impact.
We have this organization that's going to be able to do that.
You know, the first step is, you know, just kind of start to take a look at it.
You know, you probably have data problems in your applications that you're working with that maybe you're just using a sequence of salary jobs and hoping that they complete in the right order.
You know, maybe take a look at something like Dagster or Prefect to build a more structured graph of execution.
If you don't want to go for a full fledged framework like that, there are also tools like Bonobo that are just command line oriented that help you build up that same structured graph of execution.
So, you know, definitely just start to take a look and try and understand, like, what are the data flows in your system?
If you think about it more than just flows of logic and think about it in flows of data, then it starts to become a more natural space to solve it with some of these different tools and practices.
So getting familiar with thinking about it in that way.
Another really great book, if you're definitely interested in data engineering and want to kind of get deep behind the scenes, is Designing Data Intensive Applications.
I read that book recently and learned a whole lot more than I thought I would about just the entire space of building applications oriented around data.
So great resource there.
Nice. We'll put those in the show notes.
Yeah. And also just kind of raise your hand, say to your management or your team to say, hey, it looks like we have some data problems.
I'm interested in digging into it.
And chances are they'll welcome the help.
You know, lots of great resources out there if you want to get if you want to learn more about it.
You know, shameless plug.
The Data Engineering Podcast is one of them.
I'm always happy to help answer questions.
Yeah. I mean, basically just start to dig into the space, take a look at some of the tools and frameworks and just try to implement them in your day to day work.
You know, a lot of data engineers come from software engineering backgrounds.
A lot of data engineers might come from database administrator positions because they're familiar with the problem domain of the data.
And then it's a matter of learning the actual engineering aspects of it.
A lot of people come from data analyst or data scientist backgrounds where they actually decide that they enjoy working more with getting the data clean and well managed than doing the actual analysis on it.
So there's not really any one concrete background to come from.
It's more just a matter of being interested in making the data reproducible, helping make it valuable.
Interesting note is that if you look at some of the statistics around it, there are actually more data engineering positions open, at least in the U.S., than there are data scientist positions because of the fact that it is such a necessary step in the overall lifecycle of data.
How interesting.
solid results because of solid output.
Those are extremely marketable skills.
That's awesome.
Exactly.
All right.
Well, Tobias, thanks so much for covering that.
Before we get out of here, though, final two questions.
So if you're going to write some Python code, what editor do you use these days?
So I've been using Emacs for a number of years now.
I've tried out things like PyTarm and VS Code here and there, but it just never feels quite right just because my fingers have gotten so used to Emacs.
You just want to have an entire operating system as your editor, not just a piece of software.
Exactly.
Got you.
And it has that ML background with Lisp as its language.
Right.
And then notable PyPI package or packages.
Yeah.
You should check out.
I mean, we kind of touched on some, right?
Yeah, exactly.
I mean, a lot of them in the list here.
I'll just mention again, Dagster, DBT, and Great Expectations.
Yeah.
Very nice.
All right.
Final call to action.
People are excited about this.
What should they do?
Listen to the Data Engineering Podcast.
Listen to podcast.init if you want to understand a little bit more about the whole ecosystem.
Because since I do spend so much time in the data engineering space, I sometimes have crossover where if there's a data engineering tool that's implemented in Python, I'll have them on podcast.init just to make sure that I can get everybody out there.
And yeah, feel free to send questions my way.
I'll add the information about the podcast in the show notes.
And yeah, just be curious.
Yeah, absolutely.
Well, like I said, it looks like a really interesting and growing space that has got a lot of low-hanging fruit.
So it sounds like a lot of fun.
Absolutely.
Yeah.
All right.
Well, thanks for being here.
And thanks, everyone, for listening.
Thanks for having me.
This has been another episode of Talk Python to Me.
Our guest in this episode was Tobias Macy, and it's been brought to you by Datadog and Retool.
Datadog gives you visibility into the whole system running your code.
Visit talkpython.fm/datadog and see what you've been missing.
We'll throw in a free t-shirt with your free trial.
Supercharge your developers and power users.
Let them build and maintain their internal tools quickly and easily with Retool.
Just visit talkpython.fm/retool and get started today.
Want to level up your Python?
We have one of the largest catalogs of Python video courses over at Talk Python.
Our content ranges from true beginners to deeply advanced topics like memory and async.
And best of all, there's not a subscription in sight.
Check it out for yourself at training.talkpython.fm.
Be sure to subscribe to the show.
Open your favorite podcast app and search for Python.
We should be right at the top.
You can also find the iTunes feed at /itunes, the Google Play feed at /play, and the direct
RSS feed at /rss on talkpython.fm.
We're live streaming most of our recordings these days.
If you want to be part of the show and have your comments featured on the air, be sure to subscribe
to our YouTube channel at talkpython.fm/youtube.
This is your host, Michael Kennedy.
Thanks so much for listening.
I really appreciate it.
Now get out there and write some Python code.
Bye.
you
Thank you.