Everyone I know who uses Databricks (and they all like it) use it as hosted Spark with S3 integrations, or write... directly to Snowflake. I'm a little skeptical they're going to get traction as a true data lake model
Everyone I know who uses Databricks (and they all like it) use it as hosted Spark with S3 integrations, or write... directly to Snowflake. I'm a little skeptical they're going to get traction as a true data lake model
You will have to develop some kind of data lake to store unstructured data anyway. You will end up with a Snowflake data warehouse and a data lake. Why not just go with data lake first then.
Databricks/Spark are just good platforms to help you do something with structured data in your lake. With the recent additions to its execution engine and Delta (strange naming tbh) it will be pretty much the same as Snowflake for you.
You need something more complicated than what can be done using BigQuery/Snowflake (that remaining 20%, though I would say 10%)? Export the dataset to CSV/Parquet/Avro/ORC/whatever and process it with anything, including Dataproc/HDInsight/EMR or even Databricks. That's actually a common pattern.
Can't do a simple
select * from s3://file.parquet
which you can do in Spark. Having to load it into the data warehouse means that you duplicate your data two times and it is stupidly annoying.Many times the data doesn't even resemble anything tabular before I structure it in python scripts. Why would I load it inside a warehouse only to then pull it down to do some python processing and loading it back. Which makes the data travel from DWH storage to a data lake and then to my compute cluster and then the same cumbersome roadtrip back. Pretty wasteful. Spark at least allows me to schedule a python function across a cluster while copying only from lake to my compute node and back.
Data warehouses like BQ and Snowflake are great for data scientists after a bunch of engineers slice and dice raw data into clean tables. For anyone working with not yet structured data, data lake wins hands down.
[1] https://docs.snowflake.com/en/user-guide/querying-stage.html [2] https://docs.snowflake.com/en/user-guide/tables-external-int...
External table in Snowflake only allows you to ingest data from s3 to their storage (which is also s3 behind the scenes).
Perhaps something has changed since the last time I tried, but when I tried my conclusion was that "external tables" in Snowflake are not what you think they are.
Also I have not seen examples of "select * from s3://file.json" in the links you provided.
I would like to be corrected if I'm mistaken.
No. External table doesn't do any "ingesting" whatsoever. You can if you want to but you thats not the primary usecase.
https://docs.snowflake.com/en/user-guide/tables-external-int...
" enables querying data stored in files in an external stage as if it were inside a database "
> I have not seen examples of "select * from s3://file.json" in the links you provided.
you cannot directly query a random file off of s3( not sure why someone would want to do that) . Snowflake is a database , not a python script.
You have to build a an external table
" create external table abc location=s3://dir-to-file "
then
" select * from abc "
> "external tables" in Snowflake are not what you think they are.
They are exactly what you think they are. Tables stored externally to snowflake.
Pretty similar as defining a Hive Table and then using any other engine to process it.
PS: BigQuery Omni (now beta) will support object storage solutions from other cloud providers.
That's not really true; Snowflake can query directly from S3 just fine, even from other clouds. You just need to set up the credentials (or supply them in the query, but that's not usually a good idea).
Disclaimer: I work for Snowflake
This is not true. Snowflake allows you to create an external stage (pointer to s3) and then query any prefix you want as long as you provide the correct file format arguments or types.
select * from @somestage/someprefix file_format(....)
edit: hadn't refreshed the page and i can see others have already responded to this point.
Snowflake supports enough SQL constructs to allow for very complicated queries. If that doesn't suit your needs then there's stored procedures and custom javascript UDFs you can write. That covers probably 99+% of the use cases at most companies and usually the rest can be done somewhere else on pre-aggregated data.
2. People usually load complex Python libraries for data processing. I wonder if Snowflake UDF would support that or just allow you to use standard library.
Snowflake has spark connector too. So I don't know what the difference would be writing a spark job against deltalake vs snowflake.
> 80% of the things you will need - which is great for some newbie stuff or for sales presentations.
This is obviously wrong.
> You will have to develop some kind of data lake to store unstructured data anyway. You will end up with a Snowflake data warehouse and a data lake. Why not just go with data lake first then.
We store unstructured data in snowflake. I don't understand why you need a datalake on top of it.
I could do the same in s3 for much cheaper.
Delta lake is something you can run on data you feel you still have some semblance of control over.
Is making money by tricking customers into product lock in really a good business strategy. Wouldn't the word get out sooner or later?
dont you have to pay aws for s3,emr /data engineers monthly and forever too.
You don't own the underlying storage, true, but there's a defined method of getting data in and a defined method of getting that data out. The API is different to S3, sure, but it's an API all the same.
1. from snowflake storage to s3
2. from s3 to my compute node
3. do the processing
4. store result in s3
5. copy result from s3 to snowflake storage
If I only use s3, my data gies like this 1. s3 to compute node
2. run my script
3. result to s3
Perhaps I could use bunch if insert statement and load data into Snowflake through sql straight feom compute node, but then at a great cost.I don't really see much benefit of using Snowflake for not-yet structured data. For structured data it works wonders. Only downsides there:
1. Expensive as f when you scale up
2. can't control cost in pay-per-query model.My company loves them, I think they only do a few things good of which marketing the best, and are not worth the money for data science teams with devops skills. Happy to hear from others if I am wrong.
I have a feeling legacy databricks installations will be much derided in 5-10 years time