数据是有力量的;它能够协助你的企业转型。为了实现这种转变,企业正在收集和存储尽或许多的数据。但其间一些数据,如电子邮件、电子表格和物联网日志,是以半结构化的状况呈现的,许多企业在其生命周期中过早地将其转变为结构化的格局,这是一个错误。这增加了额定的成本限制,也意味着他们失去了在需求时运用原子数据的才能。
这使得越来越多的企业采用Snowflake–一个快速的无服务器、多云的数据仓库。Snowflake最好的一点是,你能够加载和查询Snowflake半结构化数据的方法,Snowflake成为一种数据湖和数据仓库之间的混合物。
企业应该以廉价的形式(如云存储桶)存储原始数据,然后在今后的需求中增加结构。这保证了企业坚持对其商业智能需求的响应和敏捷性,而不影响数据的保真度,由于这些数据或许需求在今后的道路上以其原始格局呈现。
本页具体介绍了怎么查询 Snowflake 半结构化数据。它还具体介绍了怎么铸造数据类型,然后运用LATERAL和FLATTEN函数来拜访个别字段。
目录
- 为什么要查询半结构化数据?
- 什么是 Snowflake?
- 加载 Snowflake 半结构化数据
-
怎么查询Snowflake半结构化数据?
- 示例 1:查询非嵌套 JSON 文件的 Snowflake 半结构化数据
- 比如 2:在嵌套的 JSON 文件上查询 Snowflake 半结构化数据
- 总结
为什么要查询半结构化数据?
图片来历
近年来,跟着企业接受以JSON、Avro、ORC和Parquet等文件格局输出数据的体系中的应用,半结构化数据变得越来越遍及。问题是,很少有简单快速的存储渠道能够让你同时存储和剖析半结构化数据。
通常情况下,半结构化数据文件只是被倾倒在像Hadoop这样的NoSQL东西中,然后就被遗忘了,由于要查询数据并高效地运用它太难了。传统的联系型数据库和它们的NoSQL选项。
- 对半结构化数据的支撑有限
- 需求数小时的定制作业来转化半结构化数据
- 需求专门的NoSQL技术和知识
- 孤岛式的、不相干的
- 速度极慢。
这促进许多组织测验转化他们的数据,并将其放入联系型数据库,这需求更多的尽力,并否定了半结构化数据的优势。
再进一步揣度,往往很难将半结构化的数据与现有的事务数据结合起来,因此, 潜在的信息和洞察力往往被错失。另一方面,Snowflake 彻底支撑这些文件格局,并允许您运用它们,并运用特别的 SQL 函数和运算符查询它们,而无需事前转化,就像它们是结构化数据集相同。
图片来历
什么是Snowflake?
图片来历
Snowflake 是一个彻底办理的云数据仓库,旨在协助您实现现代化的剖析战略。运用规范的 SQL,Snowflake允许您在几秒钟内开始查询千兆字节和百万字节的结构化和半结构化数据。
Snowflake 自动运用数以千计的 CPU 中心,为您快速履行查询。您乃至能够从您的网络,移动应用程序或物联网设备实时查询流数据。
Snowflake 是安全的,符合最安全的监管规范,如 HIPAA,FedRAMP,和 PCI DSS。默认情况下,数据在传输过程中和歇息时都会被加密,并自动复制,恢复和备份,以保证事务的连续性。
与 Snowflake 互动很容易。您能够运用基于Web的用户界面,Snowflake的命令行东西,或运用他们的API与您挑选的客户端库。当涉及到数据的可视化,Snowflake与一些流行的商业智能东西,如Tableau和Looker协作,以协助您将杂乱的数据变成引人注目的故事。
图片来历
运用 Hevo 的无代码数据管道简化 Snowflake ETL
一个彻底办理的无代码数据管道渠道,如 Hevo,能够协助你从100多个数据源(包括40多个免费数据源)实时整合数据到你挑选的目的地,如Snowflake,毫不费力。Hevo以其最小的学习曲线能够在短短几分钟内完结设置,允许用户在不影响功用的情况下加载数据。它与很多数据源的强大整合为用户供给了灵活性,使其能够顺利地引进不同种类的数据,而无需编写一行代码。
免费开始运用Hevo
看看Hevo的一些很酷的功用吧。
- 彻底自动化。Hevo渠道能够在几分钟内完结设置,而且需求最少的保护。
- 实时数据传输。Hevo供给实时数据迁移,所以你能够随时拥有可供剖析的数据。
- 100%完整和精确的数据传输。Hevo强大的基础设施保证了可靠的数据传输和零数据丢掉。
- **可扩展的基础设施。**Hevo有内置的100多个来历的集成,能够协助你根据需求扩展你的数据基础设施。
- **24/7现场支撑。**Hevo团队能够经过谈天,电子邮件和支撑电话24小时为你供给特别的支撑。
- 形式办理。Hevo消除了繁琐的形式办理任务,自动检测传入数据的形式并将其映射到方针形式。
- 实时监控。Hevo允许你监控数据流,所以你能够查看你的数据在特定时刻点的位置。
在这里注册获得14天的免费试用!
加载Snowflake半结构化的数据
您能够按照加载结构化数据时的类似方法将 Snowflake 半结构化数据加载到联系表中。您能够挑选以下两种方法
- 将 Snowflake 半结构化数据加载到一个单一的VARIANT列。VARIANT是一种通用类型,能够存储来自 Snowflake 支撑的任何数据类型的数据。
- 从 Snowflake 半结构化数据中提取和转化列到方针表中的单独列。
在这篇文章中,咱们将运用一个 JSON 文件,由于它是 Snowflake 半结构化数据的最常见类型之一。Snowflake 原生理解 JSON 方针。它有内置的 SQL 功用,用于自动发现形式和优化存储。这使得对 Snowflake 半结构化 JSON 数据的查询运转速度简直与联系型数据的查询相同快。
现在让咱们经过一些实际的比如来看看这一点的效果
怎么查询 Snowflake 半结构化数据?
前提条件
- 拜访 Snowflake 帐户
- 装置 Snowflake CLI
- 运转以下脚本以创立本指南所需的资源。
create or replace warehouse devwarehouse with
warehouse_size='X-SMALL'
auto_suspend = 120
auto_resume = true
initially_suspended=true;
use warehouse devwarehouse;
- 示例 1:查询非嵌套 JSON 文件的 Snowflake 半结构化数据
- 比如 2:在嵌套 JSON 文件上查询 Snowflake 半结构化数据
比如 1:在非嵌套的 JSON 文件上查询 Snowflake 半结构化数据
咱们比如中的 JSON 文件定义了一个具有 3 个属性的方针。
- 称号
- 电子邮件
- ip_address
方针表将只有一列,将存储具有VARIANT数据类型的 JSON 方针。运用以下作业簿将 JSON 文件加载到 Snowflake 表中。
create database users;
use database users;
use schema users.public;
create or replace table json_user_data (src variant);
insert into json_user_data (src)
select parse_json('{
"name": "Sarah Banks",
"email": "sarahbanks@census.gov",
"ip_address": "28.56.176.2"
}, {
"name": "Giovani Giorgio",
"email": "ggiorgio@senate.gov",
"ip_address": "237.189.4.217"
}, {
"name": "Liam Nielsen",
"email": "nielsen@imageshack.us",
"ip_address": "150.33.122.255"
}, {
"name": "Frederico Fred",
"email": "ffred3@aol.com",
"ip_address": "76.67.177.39"
}');
首要,让咱们运转一个查询,看看json_user_data表中src variant列的内容。
select * from json_user_data;
SRC |
{ “name”:”Sarah Banks”, “email”:”sarahbanks@census.gov”, “ip_address”:”28.56.176.2″}, { “姓名”:”Giovani Giorgio”, “email”:”ggiorgio@senate.gov”, “ip_address”:”237.189.4.217″}, { “姓名”:”Liam Nielsen”, “email”:”nielsen@imageshack.us”, “ip_address”:”150.33.122.255″}, { “姓名”:”Frederico Fred”, “email”:”ffred3@aol.com”, “ip_address”:”76.67.177.39″} |
你现在要运用FLATTENSQL函数,将你在srcVARIANT列中的每一个键/值对转化为一行。这将构成一个联系表。
SELECT src:name::varchar AS NAME,
src:email::varchar AS EMAIL,
src:ip_address AS IP_ADDRESS
FROM json_user_data,
LATERAL FLATTEN(input => users.src);
运转这个SQL查询后,你会发现它为你供给了一个结构化的数据视图。
行 | 称号 | 电子邮件 | IP_DRESS |
1 | 莎拉-班克斯 | sarahbanks@census.gov | 28.56.176.2 |
2 | 乔瓦尼-乔尔吉奥 | ggiorgio@senate.gov | 237.189.4.217 |
3 | 利亚姆-尼尔森 | nielsen@imageshack.us | 150.33.122.255 |
4 | 弗雷德里克-弗雷德 | ffred3@aol.com | 76.67.177.39 |
示例 2:查询 Snowflake 半结构化数据的嵌套 JSON 文件
在这个比如中,咱们将测验扁平化一个嵌套的 JSON 文件。
下面的 JSON 数据集包括关于格莱美获奖歌曲的数据。将数据集加载到一个新的歌曲表中,并在VARIANT列中运用以下脚本进行投递。
create database songs;
use database songs;
create or replace table json_songs_data (src variant);
insert into json_songs_data (src)
select parse_json('{
"song_title":"I Can't Breathe",
"year":2020,
"artists": [
{
"first_name":"Dernst",
"middle_name":"Emile",
"last_name":"II"
},
{
"first_name":"Gabriella",
"middle_name":"Sarmiento",
"last_name":"Wilson"
},
{
"first_name":"Tiara",
"middle_name":"Nicole",
"last_name":"Thomas"
}
]
}
{
"song_title":"This is America",
"year":2019,
"artists":
[{
"first_name":"Donald",
"middle_name":null,
"last_name":"Glover"
},
{
"first_name":"Ludwig",
"middle_name":null,
"last_name":"Gransson"
},
{
"first_name":"Jeffery",
"middle_name":"Lamar",
"last_name":"Williams"
}
]
}
{
"song_title":"That’s What I Like",
"year":2018,
"artists":
[{
"first_name":"Peter",
"middle_name":"Gene",
"last_name":"Hernandez"
}
]
}
{
"song_title":"Hello",
"year":2017,
"artists":
[{
"first_name":"Adele",
"middle_name":"Laurie",
"last_name":"Adkins"
}
]
},
{
"song_title":"Thinking Out Loud",
"year":2016,
"artists":
[{
"first_name":"Edward",
"middle_name":"Christopher",
"last_name":"Sheeran"
}
]
}');
下面的查询将平铺NESTED JSON数据,这样数组的每个成员都将成为自己的行。另一方面,横向修改器将把数据与方针之外的任何信息连接起来。
SELECT
value:first_name::VARCHAR AS FIRST_NAME,
value:middle_name::VARCHAR AS MIDDLE_NAME,
value:last_name::VARCHAR AS LAST_NAME,
src:song_title::VARCHAR AS SONG_TITLE,
src:year::VARCHAR AS YEAR
FROM json_songs_data
,LATERAL FLATTEN(input => src:artists);
正如预期的那样,SQL查询成果显现了一个更有结构的数据视图。Flatten是将一切这些元素,创立新的行。另一方面,Lateral则是将其连接回原始行,并产生这些列。换句话说,Flatten使表变长,而Lateral使表变宽。
行 | 第一称号(FIRST_NAME | 中名 | 最终一个姓名 | 歌曲称号 | 年份 |
1 | Dernst | 埃米尔 | 二 | 我无法呼吸 | 2020 |
2 | 加布里埃拉 | 萨米恩托 | 浩瀚 | 我无法呼吸 | 2020 |
3 | 蒂亚拉 | 妮可 | 托马斯 | 我无法呼吸 | 2020 |
4 | 唐纳德 | 努尔哈赤 | 格洛弗 | 这便是美国 | 2019 |
5 | 路德维希 | NULL | 戈兰森 | 这便是美国 | 2019 |
6 | 杰弗里 | 拉马尔 | 威廉姆斯 | 这便是美国 | 2019 |
7 | 彼得 | 纪恩 | 埃尔南德斯 | 这便是我喜欢的 | 2018 |
8 | 阿黛尔 | 劳里 | 阿德金斯 | 你好 | 2017 |
9 | 爱德华 | 薛仁贵 | 谢兰 | 大声考虑 | 2016 |
定论
综上所述,您能够在几分钟内加载、存储和实际运用 Snowflake 半结构化数据。Snowflake 支撑一切最常见的 Snowflake 半结构化数据类型,并使您能够运用您或许现已知道和运用的规范 SQL 查询数据。最重要的是,您能够将 Snowflake 半结构化数据与您现有的数据源结合起来,使您能 够进行比较,在您尽力记载的信息中产生洞察力。
拜访咱们的网站来探索Hevo
从不同的数据源中提取杂乱的数据或许具有挑战性,而这正是 Hevo 拯救的地方!供给了一种更快的方法,将数据从100多个数据源,如数据库或SaaS应用程序搬运到你的数据仓库,如Snowflake,BigQuery,Redshift,并在你挑选的BI东西中进行可视化。Hevo是彻底自动化的,因此不需求你编码。
想体验一下Hevo吗?注册一个14天的免费试用,亲身体验功用丰厚的Hevo套件。你也能够看看无可匹敌的 价格,这将有助于你挑选合适你的事务需求的方案。