{"id":110697,"date":"2024-01-09T09:36:12","date_gmt":"2024-01-09T17:36:12","guid":{"rendered":"https:\/\/www.backblaze.com\/blog\/?p=110697"},"modified":"2024-08-14T11:31:03","modified_gmt":"2024-08-14T18:31:03","slug":"data-driven-decisions-wwith-snowflake-and-backblaze-b2","status":"publish","type":"post","link":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/","title":{"rendered":"Data-Driven Decisions With Snowflake and Backblaze B2"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"583\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2-1024x583.png\" alt=\"A decorative image showing the Backblaze and Snowflake images superimposed over a cloud. \" class=\"wp-image-110698\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2-1024x583.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2-300x171.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2-768x437.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2.png 1440w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-drop-cap\">Since its launch in 2014 as a cloud-based data warehouse, <a href=\"https:\/\/www.snowflake.com\/en\/\" target=\"_blank\" rel=\"noreferrer noopener\">Snowflake<\/a> has evolved into a broad data-as-a-service platform addressing a wide variety of use cases, including artificial intelligence (AI), machine learning (ML), collaboration across organizations, and data lakes. Last year, Snowflake introduced support for <a href=\"https:\/\/docs.snowflake.com\/en\/user-guide\/data-load-s3-compatible-storage\" target=\"_blank\" rel=\"noreferrer noopener\">S3 compatible cloud object stores<\/a>, such as <a href=\"https:\/\/www.backblaze.com\/cloud-storage\" target=\"_blank\" rel=\"noreferrer noopener\">Backblaze B2 Cloud Storage<\/a>. Now, Snowflake customers can access unstructured data such as images and videos, as well as structured and semi-structured data such as CSV, JSON, Parquet, and XML files, directly in the Snowflake Platform, served up from Backblaze B2.<\/p>\n\n\n\n<p>Why access external data from Snowflake, when Snowflake is itself a data as a service (DaaS) platform with a cloud-based relational database at its core? To put it simply, not all data belongs in Snowflake. Organizations use cloud object storage solutions such as Backblaze B2 as a cost-effective way to maintain both master and archive data, with multiple applications reading and writing that data. In this situation, Snowflake is just another consumer of the data. Besides, data storage in Snowflake is much more expensive than in Backblaze B2, raising the possibility of significant cost savings as a result of optimizing your data\u2019s storage location.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Snowflake Basics<\/h2>\n\n\n\n<p>At Snowflake\u2019s core is a cloud-based relational database. You can create tables, load data into them, and run SQL queries just as you can with a traditional on-premises database. Given Snowflake\u2019s origin as a data warehouse, it is currently better suited to running analytical queries against large datasets than as an operational database serving a high volume of transactions, but <a href=\"https:\/\/www.snowflake.com\/en\/data-cloud\/workloads\/unistore\/\" target=\"_blank\" rel=\"noreferrer noopener\">Snowflake Unistore<\/a>\u2019s hybrid tables feature (currently in private preview) aims to bridge the gap between transactional and analytical workloads.<\/p>\n\n\n\n<p>As a DaaS platform, Snowflake runs on your choice of public cloud\u2014currently Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform\u2014but insulates you from the details of managing storage, compute, and networking infrastructure. Having said that, sometimes you need to step outside the Snowflake box to access data that you are managing in your own cloud object storage account. I\u2019ll explain exactly how that works in this blog post, but, first, let\u2019s take a quick look at how we classify data according to its degree of structure, as this can have a big impact on your decision of where to store it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Structured and Semi-Structured Data<\/h2>\n\n\n\n<p>Structured data conforms to a rigid data model. Relational database tables are the most familiar example\u2014a table\u2019s schema describes required and optional fields and their data types, and it is not possible to insert rows into the table that contain additional fields not listed in the schema. Aside from relational databases, file formats such as <a href=\"https:\/\/parquet.apache.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Apache Parquet<\/a>, <a href=\"https:\/\/orc.apache.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Optimized Row Columnar<\/a> (ORC), and <a href=\"https:\/\/avro.apache.org\/docs\/1.2.0\/\" target=\"_blank\" rel=\"noreferrer noopener\">Avro<\/a> can all store structured data; each file format specifies a schema that fully describes the data stored within a file. Here\u2019s an example of a schema for a Parquet file:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">% parquet meta customer.parquet\n\nFile path:  \/data\/customer.parquet\n...\nSchema:\nmessage hive_schema {\n  required int64 custkey;\n  required binary name (STRING);\n  required binary address (STRING);\n  required int64 nationkey;\n  required binary phone (STRING);\n  required int64 acctbal;\n  optional binary mktsegment (STRING);\n  optional binary comment (STRING);\n}\n<\/pre>\n\n\n\n<p>Semi-structured data, as its name suggests, is more flexible. File formats such as CSV, XML and JSON need not use a formal schema, since they can be self-describing. That is, an application can infer the structure of the data as it reads the file, a mechanism often termed \u201cschema-on-read.\u201d&nbsp;<\/p>\n\n\n\n<p>This simple JSON example illustrates the principle. You can see how it\u2019s possible for an application to build the schema of a product record as it reads the file:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{\n  \"products\" : [\n    {\n      \"name\" : \"Paper Shredder\",\n      \"description\" : \"Crosscut shredder with auto-feed\"\n    },\n    {\n      \"name\" : \"Stapler\",\n      \"color\" : \"Red\"\n    },\n    {\n      \"name\" : \"Sneakers\",\n      \"size\" : \"11\"\n    }\n  ]\n}\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Accessing Structured and Semi-Structured Data Stored in Backblaze B2 from Snowflake<\/h2>\n\n\n\n<p>You can access data located in cloud object storage external to Snowflake, such as Backblaze B2, by creating an <a href=\"https:\/\/docs.snowflake.com\/en\/user-guide\/data-load-overview#label-data-load-overview-external-stages\" target=\"_blank\" rel=\"noreferrer noopener\">external stage<\/a>. The external stage is a Snowflake database object that holds a URL for the external location, as well as configuration (e.g., credentials) required to access the data. For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">CREATE STAGE b2_stage\n  URL = 's3compat:\/\/your-b2-bucket-name\/'\n  ENDPOINT = 's3.your-region.backblazeb2.com'\n  REGION = 'your-region'\n  CREDENTIALS = (\n    AWS_KEY_ID = 'your-application-key-id'\n    AWS_SECRET_KEY = 'your-application-key'\n  );\n<\/pre>\n\n\n\n<p>You can create an <a href=\"https:\/\/docs.snowflake.com\/en\/user-guide\/tables-external-intro\" target=\"_blank\" rel=\"noreferrer noopener\">external table<\/a> to query data stored in an external stage as if the data were inside a table in Snowflake, specifying the table\u2019s columns as well as filenames, file formats, and data partitioning. Just like the external stage, the external table is a database object, located in a Snowflake schema, that stores the metadata required to access data stored externally to Snowflake, rather than the data itself.<\/p>\n\n\n\n<p>Every external table automatically contains a single <a href=\"https:\/\/docs.snowflake.com\/en\/sql-reference\/data-types-semistructured#variant\" target=\"_blank\" rel=\"noreferrer noopener\">VARIANT<\/a> type column, named <code>value<\/code>, that can hold arbitrary collections of fields. An external table definition for semi-structured data needs no further column definitions, only metadata such as the location of the data. For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">CREATE EXTERNAL TABLE product\n  LOCATION = @b2_stage\/data\/\n  FILE_FORMAT = (TYPE = JSON)\n  AUTO_REFRESH = false;\n<\/pre>\n\n\n\n<p>When you query the external table, you can reference elements within the value column, like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">SELECT value:name\n  FROM product\n  WHERE value:color = \u2018Red\u2019;\n+------------+\n| VALUE:NAME |\n|------------|\n| \"Stapler\"  |\n+------------+\n<\/pre>\n\n\n\n<p>Since structured data has a more rigid layout, you must define table columns (technically, in Snowflake, these are referred to as \u201cpseudocolumns\u201d), corresponding to the fields in the data files, in terms of the value column. For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">CREATE EXTERNAL TABLE customer (\n    custkey number AS (value:custkey::number),\n    name varchar AS (value:name::varchar),\n    address varchar AS (value:address::varchar),\n    nationkey number AS (value:nationkey::number),\n    phone varchar AS (value:phone::varchar),\n    acctbal number AS (value:acctbal::number),\n    mktsegment varchar AS (value:mktsegment::varchar),\n    comment varchar AS (value:comment::varchar)\n  )\n  LOCATION = @b2_stage\/data\/\n  FILE_FORMAT = (TYPE = PARQUET)\n  AUTO_REFRESH = false;\n<\/pre>\n\n\n\n<p>Once you\u2019ve created the external table, you can write SQL statements to query the data stored externally, just as if it were inside a table in Snowflake:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">SELECT phone\n  FROM customer\n  WHERE name = \u2018Acme, Inc.\u2019;\n+----------------+\n| PHONE          |\n|----------------|\n| \"111-222-3333\" |\n+----------------+\n<\/pre>\n\n\n\n<p>The Backblaze B2 documentation includes a pair of technical articles that go further into the details, describing how to <a href=\"https:\/\/www.backblaze.com\/docs-export-data-from-snowflake-to-backblaze-b2\" target=\"_blank\" rel=\"noreferrer noopener\">export data from Snowflake to an external table stored in Backblaze B2<\/a>, and how to <a href=\"https:\/\/www.backblaze.com\/docs-use-snowflake-to-query-existing-data-in-backblaze-b2\" target=\"_blank\" rel=\"noreferrer noopener\">create an external table definition for existing structured data stored in Backblaze B2<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Accessing Unstructured Data Stored in Backblaze B2 from Snowflake<\/h2>\n\n\n\n<p>The term \u201cunstructured\u201d, in this context, refers to data such as images, audio, and video, that cannot be defined in terms of a data model. You still need to create an external stage to access unstructured data located outside of Snowflake, but, rather than creating external tables and writing SQL queries, you typically access unstructured data from custom code running in Snowflake\u2019s <a href=\"https:\/\/www.snowflake.com\/en\/data-cloud\/snowpark\/\" target=\"_blank\" rel=\"noreferrer noopener\">Snowpark<\/a> environment.<\/p>\n\n\n\n<p>Here\u2019s an excerpt from a Snowflake user-defined function, written in Python, that loads an image file from an external stage:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">from snowflake.snowpark.files import SnowflakeFile\n\n# The file_path argument is a scoped Snowflake file URL to a file in the \n# external stage, created with the BUILD_SCOPED_FILE_URL function. \n# It has the form\n# https:\/\/abc12345.snowflakecomputing.com\/api\/files\/01b1690e-0001-f66c-...\ndef generate_image_label(file_path):\n\n  # Read the image file \n  with SnowflakeFile.open(file_path, 'rb') as f:\n    image_bytes = f.readall()\n\n  ...\n<\/pre>\n\n\n\n<p>In this example, the user-defined function reads an image file from an external stage, then runs an ML model on the image data to generate a label for the image according to its content. A Snowflake task using this user-defined function can insert rows into a table of image names and labels as image files are uploaded into a Backblaze B2 Bucket. You can learn more about this use case in particular, and loading unstructured data from Backblaze B2 into Snowflake in general, from the Backblaze Tech Day \u201823 session that I co-presented with Snowflake Product Manager Saurin Shah:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Empowering Data-Driven Decisions: Integrating Snowflake With Backblaze B2\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/5L4xIuTUyEY?feature=oembed&#038;enablejsapi=1&#038;origin=https:\/\/bzatlasbluestg.wpenginepowered.com\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Choices, Choices: Where Should I Store My Data?<\/h2>\n\n\n\n<p>Given that, currently, Snowflake charges <a href=\"https:\/\/www.snowflake.com\/en\/data-cloud\/pricing-options\/\" target=\"_blank\" rel=\"noreferrer noopener\">at least $23\/TB\/month<\/a> for data storage on its platform compared to Backblaze B2 at <a href=\"https:\/\/www.backblaze.com\/cloud-storage\/pricing\" target=\"_blank\" rel=\"noreferrer noopener\">$6\/TB\/month<\/a>, it might seem tempting to move your data wholesale from Snowflake to Backblaze B2 and create external tables to replace tables currently residing in Snowflake. There are, however, a couple of caveats to mention: performance and egress costs.<\/p>\n\n\n\n<p>The same query on the same dataset will run <em>much<\/em> more quickly against tables inside Snowflake than the corresponding external tables. A comprehensive analysis of performance and best practices for Snowflake external tables is a whole other blog post, but, as an example, one of my queries that completes in 30 seconds against a table in Snowflake takes three minutes to run against the same data in an external table.<\/p>\n\n\n\n<p>Similarly, when you query an external table located in Backblaze B2, Snowflake must download data across the internet. Data formats such as Parquet can make this very efficient, organizing data column-wise and compressing it to minimize the amount of data that must be transferred. But, some amount of data still has to be moved from Backblaze B2 to Snowflake. Downloading data from Backblaze B2 is free of charge for up to 3x your average monthly data footprint, then $0.01\/GB for additional egress, so there is a trade-off between data storage cost and data transfer costs for frequently-accessed data.<\/p>\n\n\n\n<p>Some data naturally lives on one platform or the other. Frequently-accessed tables should probably be located in Snowflake. Media files, that might only ever need to be downloaded once to be processed by code running in Snowpark, belong in Backblaze B2. The gray area is large datasets that will only be accessed a few times a month, where the performance disparity is not an issue, and the amount of data transferred might fit into Backblaze B2\u2019s free egress allowance. By understanding how you access your data, and doing some math, you&#8217;re better able to choose the right cloud storage tool for your specific tasks. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Backblaze B2 Cloud Storage and Snowflake can be a powerful integration for your big data tasks. Let&#8217;s talk about when and why you&#8217;d use this solution. <\/p>\n","protected":false},"author":174,"featured_media":110698,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[7,434,483],"tags":[],"class_list":["post-110697","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-storage","category-featured-1","category-tech-lab","entry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Data-Driven Decisions With Snowflake and Backblaze B2<\/title>\n<meta name=\"description\" content=\"Explore how Snowflake integrates with Backblaze B2 for efficient data storage and access, optimizing costs for structured and unstructured data.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Data-Driven Decisions With Snowflake and Backblaze B2\" \/>\n<meta property=\"og:description\" content=\"Explore how Snowflake integrates with Backblaze B2 for efficient data storage and access, optimizing costs for structured and unstructured data.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/\" \/>\n<meta property=\"og:site_name\" content=\"Backblaze Blog | Cloud Storage &amp; Cloud Backup\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/backblaze\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-09T17:36:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-14T18:31:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1440\" \/>\n\t<meta property=\"og:image:height\" content=\"820\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Pat Patterson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@backblaze\" \/>\n<meta name=\"twitter:site\" content=\"@backblaze\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pat Patterson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Data-Driven Decisions With Snowflake and Backblaze B2","description":"Explore how Snowflake integrates with Backblaze B2 for efficient data storage and access, optimizing costs for structured and unstructured data.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/","og_locale":"en_US","og_type":"article","og_title":"Data-Driven Decisions With Snowflake and Backblaze B2","og_description":"Explore how Snowflake integrates with Backblaze B2 for efficient data storage and access, optimizing costs for structured and unstructured data.","og_url":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/","og_site_name":"Backblaze Blog | Cloud Storage &amp; Cloud Backup","article_publisher":"https:\/\/www.facebook.com\/backblaze","article_published_time":"2024-01-09T17:36:12+00:00","article_modified_time":"2024-08-14T18:31:03+00:00","og_image":[{"width":1440,"height":820,"url":"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2.png","type":"image\/png"}],"author":"Pat Patterson","twitter_card":"summary_large_image","twitter_creator":"@backblaze","twitter_site":"@backblaze","twitter_misc":{"Written by":"Pat Patterson","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/#article","isPartOf":{"@id":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/"},"author":{"name":"Pat Patterson","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/a724a8aee97b6451107442747cd101a4"},"headline":"Data-Driven Decisions With Snowflake and Backblaze B2","datePublished":"2024-01-09T17:36:12+00:00","dateModified":"2024-08-14T18:31:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/"},"wordCount":1420,"commentCount":0,"publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2.png","articleSection":["Cloud Storage","Featured","Tech Lab"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/","url":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/","name":"Data-Driven Decisions With Snowflake and Backblaze B2","isPartOf":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/#primaryimage"},"image":{"@id":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2.png","datePublished":"2024-01-09T17:36:12+00:00","dateModified":"2024-08-14T18:31:03+00:00","description":"Explore how Snowflake integrates with Backblaze B2 for efficient data storage and access, optimizing costs for structured and unstructured data.","breadcrumb":{"@id":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/#primaryimage","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2.png","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2.png","width":1440,"height":820,"caption":"A decorative image showing the Backblaze and Snowflake images superimposed over a cloud."},{"@type":"BreadcrumbList","@id":"https:\/\/www.backblaze.com\/blog\/data-driven-decisions-wwith-snowflake-and-backblaze-b2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Data-Driven Decisions With Snowflake and Backblaze B2"}]},{"@type":"WebSite","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","name":"Backblaze Cloud Solutions Blog","description":"Cloud Storage &amp; Cloud Backup","publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization","name":"Backblaze","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","width":512,"height":512,"caption":"Backblaze"},"image":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/backblaze","https:\/\/x.com\/backblaze","https:\/\/www.youtube.com\/user\/Backblaze","https:\/\/en.wikipedia.org\/wiki\/Backblaze"]},{"@type":"Person","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/a724a8aee97b6451107442747cd101a4","name":"Pat Patterson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2022\/01\/PatPatterson1920px-150x150.png","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2022\/01\/PatPatterson1920px-150x150.png","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2022\/01\/PatPatterson1920px-150x150.png","caption":"Pat Patterson"},"description":"Pat Patterson is the former chief technical evangelist at Backblaze. Over his three decades in the industry, Pat has built software and communities at Sun Microsystems, Salesforce, StreamSets, and Citrix. In his role at Backblaze, he creates and delivers content tailored to the needs of the hands-on technical professional, acts as the \u201cvoice of the developer\u201d on the Product team, and actively participates in the wider technical community. Outside the office, Pat runs far, having completed ultramarathons up to the 50 mile distance. Catch up with Pat via Bluesky or LinkedIn.","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/author\/pat\/"}]}},"jetpack_featured_media_url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Snowflake-and-Backblaze-B2.png","_links":{"self":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/110697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/users\/174"}],"replies":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/comments?post=110697"}],"version-history":[{"count":0,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/110697\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media\/110698"}],"wp:attachment":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media?parent=110697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/categories?post=110697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/tags?post=110697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}