770 karma · joined March 1, 2012
https://duckdb.org/docs/stable/extensions/iceberg/overview.h...
Apache iceberg go ? Nope
https://github.com/apache/iceberg-go?tab=readme-ov-file#read...
Basically java iceberg is the only mature way to do this, it's not a very accessible ecosystem.
For a side project I'm using pyiceberg to sink streaming data to iceberg (using DuckDB as the stream processor):
https://sql-flow.com/docs/tutorials/iceberg-sink
It's basically a workaround for DuckDB's lack of native support. I am very happy with the Pyicerbg library as a user, It was very easy and the native Arrow support is a glimpse into the future. Arrow as an interchange format is quite amazing. Just open up the iceberg table and append Arrow dataframes to it!
https://github.com/turbolytics/sql-flow
Arrow is quite spectacular and it's cool to see the industry moving to standardize on it as a dataframe. For example, Clickhouse python also support arrow-based insertion:
https://sql-flow.com/docs/tutorials/clickhouse-sink
This makes the glue code trivial to sink into these different systems as long as arrow is used.
If you have streaming data as a source, I built a side project to write streaming data to s3 in iceberg format:
https://sql-flow.com/docs/tutorials/iceberg-sink
https://github.com/turbolytics/sql-flow
I realize it's not quite what you asked for but wanted to mention it. I'm surprised at lack of native iceberg write support in these tools.
Pyiceberg though was quite easy to use, arrow-based API was very helpful as well.
Like are they straight searching “software developer” on indeed?
https://fred.stlouisfed.org/series/IHLIDXUSTPSOFTDEVE
—-
It’s rough out there, I see former coworkers laid off last year and the year before still struggling to find work
Understanding a problem requires a holistic view of the larger system. An egg producer may say prices are higher Because supply is lower due to culling. Part of that statement is true. The author then zooms out to better understand the larger system.
The truth of a matter deviates significantly from one party’s assertions.
it’s scary to me that people lack the skills, the desire or incentives to understand and objectively seek understanding of what’s happening around us especially in highly charged US political landscape. This isn’t like pure scientific pursuit of knowledge but a more practical day to day ability to question, understand and gather new information with the purpose of developing an objective understanding of the world.
https://github.com/dm03514/test-engine/blob/master/tutorials...
I'm surprised at the relatively sparse state of streaming. I feel like there are:
- Flink - Spark - ~Benthos - Arroyo - Then mostly custom / bespoke frameworks
Maybe there just isn't that much money in it? But I think there's still lots of opportunity to improve the Dev/UX over the JVM and the enterprise solutions.
-----
I would say recovery is achieved through kafka consumer groups right now, which results in at least once processing semantics.
We also support websocket input for the bluesky firehose but that is completely ephemeral. I have a story in the backlog to write ahead to disk which should allow for tolerating process crash/failure.
The tumbling windows stores state using duckdb. The end user can configure a disk-based duckdb databases which achieves durability as well.
The troubleshooting was actually pretty funky, i didn't realize how tricky it could be with stateful stream processing. I certainly don't have a good story for it, but what I did was added a sql debug HTTP handler. When this is enabled it exposes the duckdb execution context over HTTP. This was how I debugged the tumbling window logic during development. I would start SQLFlow, query to make sure the windows were empty, send some known messages, query the windows to make sure they were aggregated correctly, wait for the windows to close and flush, query the tumbling window state, etc.
For troubleshooting it also supports prometheus metrics oriented towards stream processing, # of messages, processing duration, success/failures, etc.
SQLFlow also ships with a dev framework, this allows you to execute your sqlflow pipeline against a json input file to make sure the sql processing logic is correct. I wanted to give the ability to decouple testing the logic, from actually having to stream data.
I would love to know about more what you're hacking on!
https://github.com/turbolytics/sql-flow
The goal is to create a stream processing framework that supports SQL jobs. Apache Flink supports this but is very heavy-weight overall. I work with cost constrained companies that just can't run Flink but still want access to high performance streaming primitives.
We are taking a slightly different approach from other competitors by building cloud-native tools for engineers. SQLFlow is built on DuckDB, Native Kafka Library, and Arrow. This allows SQLFlow to handle ~70k+ events / second with low memory overhead (~250MiB).
Would love your questions, thoughts and feedback or feature Ideas! Thank you
- https://github.com/turbolytics/sql-flow/issues/100
- https://github.com/turbolytics/sql-flow/pull/116
The Clickhouse python API made this trivial thanks to supporting Arrow!
We have a tutorial explaining how to stream data from Kafka to Clickhouse using SQLFlow:
https://sql-flow.com/docs/tutorials/clickhouse-sink
Local benchmarks show 70,000 rows / second insert using a batch size of 50k!
I really like the way the catalog standard can decouple underlying storage as well.
My biggest concern is how inaccessible the implementations are, Java / spark has the only mature implementation right now,
Even DuckDB doesn’t support writing yet.
I built out a tool to stream data to iceberg which uses the python iceberg client:
https://www.linkedin.com/pulse/streaming-iceberg-using-sqlfl...
https://github.com/turbolytics/sql-flow?tab=readme-ov-file#s...
pyiceberg does the heavy lifting. It is a great project with a lot of active development.
It's interesting to see how immature iceberg ecosystem is. For example duckdb iceberg does not support writing to tables, neither does the go iceberg project. Iceberg writing was just recently added to the pyiceberg project!
Would love to learn more about peoples actual use of iceberg in the wild.
Are you using iceberg? How are you writing data to it? Which iceberg features are you using? Do you leverage snapshots at all?
Thank you
https://www.linkedin.com/pulse/learning-sqlflow-using-bluesk...
I think / hope sqlflow will be a viable/lightweight/cost effective/easy to operate alternative to flink when working with small-medium sized data (on the orders of <10,000 messages / second)
I just added support for websocket sources which enables sql over the Bluesky firehouse.
https://github.com/turbolytics/sql-flow?tab=readme-ov-file#c...
Duckdb does all the sql execution, and python is responsible for sourcing the data.
The project is still quite young and I’m very much still experimenting, but I’d love any feedback. Thank you.
Writing a book was very personally fulfilling.
I wrote about my self published book earnings a couple years ago.
https://on-systems.tech/blog/130-2022-self-published-book-ea...
This quote got me pretty excited, and I since yesterday I started sketching out some ideas for other books ;p
"First, simply: you believe strongly in your view of the world, and you’re pursuing it with intensity. Right now nobody else is really able to download your brain. Your book becomes how others can download it."
Are you open for remote for the EM role, or is it on-site?
Thank you!
https://en.wikipedia.org/wiki/Snowflake_ID
To understand it better I created a fun weekend flake id generator using go!
https://github.com/turbolytics/flake
Have you used flake ids before at a company? Have you ever had to globally identify billions of entities? How did you do it?
I often work at small scale, so self incrementing primary keys in DB or UUID as primary key serve me fine. Many years ago I was working at a company that had to globally identify clickstream events and that is where I was introduced to flake ids. We used a 64bit id for during that time.
I chose 128bit here to provide for 64bit milliseconds epoch, 48bit worker identifier (allowing for mac address) and 16 bits (65k ids) per millisecond for high throughput scenarios.
I'm not using this project and don't have any intention to, but I thought it was fun to do and to share :p
Are there clear guidelines already written? I’m assuming it inherits a lot of rules of general aviation? But since private firms launching into space is new, do the rules and regulations keep up? Or are they still to be written?
SQLFlow uses duckdb to process kafka streaming data.
The goal is to create an environment where stream logic can be expressed in pure SQL with a simple and performant deployment, leveraging kafka consumer groups for state management.
The new in-memory processor easily handles 45,000 messages / second for simple aggregation.
https://github.com/turbolytics/sql-flow?tab=readme-ov-file#b...
------
I'd really appreciate feedback on features that would make this more useful. It's basically just a POC at this point.
Thank you
Pretty much every project I create now has testcontainers for integration testing :)
I setup CI so it lints, builds, unit tests then integration tests (using testcontainers)
https://github.com/turbolytics/latte/blob/main/.github/workf...
Their language bindings provide nice helper functions for common database operations (like generating a connection uri from a container user)
https://github.com/turbolytics/latte/blob/main/internal/sour...
I use them in $day job use them in side projects use them everywhere :)
The pre-acquisition Glassdoor reviews were astounding and back this up.
For myself, working at auth0 was truly life altering. It was the first time I was in a long standing multi-national environment.
It was the first time I was deeply exposed to other cultures and ways of living.
As a side effect of working at Auth0, This exposure completely reshaped my worldview and thoughts on luck and privilege. Watching Argentina inflation fluctuate as people I spent 8 hours a day with struggle to pay their bills and provide for their families as I live stably with no worry I really internalized how much pure raw luck plays in setting us up for life: Who we’re born to and where we’re born.
I’ve been using dbt and MDS for nearly 3.5 years and I believe the entire approach is profoundly broken. There’s really nothing “modern” about it, especially compared to software engineering.
https://on-systems.tech/blog/135-draining-the-data-swamp/
Building on Extracted operational data is hard at best and a business altering security liability at worse.
I believe The MDS trails at least a decade behind modern software engineering practices, lacking industry guidance and generic tooling to support: CI/CD, versioned deployment artifacts, zero downtime deployments, unit testing, observability, monitoring and alerting.
MDS Data engineering is a meme in the industry, the expectation of “100%” combined with the lack of modern tooling makes success really hard to achieve.
If I weren’t time constrained I’d def be happy continuing to jog, I feel like slower speeds are less injury prone for myself
I finally got to an ENT, literally yesterday, where they did a nasal endoscopy. There was mild inflammation, but no major deviation or polyps or anything worrying the diagnosis from them was Covid related since nothing structural was observed.
I just got a taste and smell training kit that arrived from Amazon today and I think that’s basically my only course of action at this point. Here’s hoping
Not sure if it's reasonable to jump to illegal or unethical information?
I just published a post 2 days ago about 2022 Self Published Book earnings! I was kind of hoping hn would find it interesting but no luck so far!
https://on-systems.tech/blog/130-2022-self-published-book-ea...