作者亚当·特沃维维奇
最后更新于 2021 年 9 月 7 日
警告
本文来自 Teradata 公司网站入门这是在 中发布的内容的删节版。我们不保证所发布内容的准确性、完整性、可靠性或最新性。具体内容请参考原文。
另外,如果您有任何需要或更正的要求或更正,请发表评论。
概述
本机对象存储 (NOS) 是一项 Vantage 功能,用于查询存储在对象存储(如 AWS S3、Google GCS、Azure Blob 和本地实施)中的文件中的数据。如果您想探索您的数据而无需构建数据管道将其导入 Vantage,这将非常有用。
先决条件
您需要访问 Teradata Vantage 实例。从 17.10 版开始,从 Vantage Express 到 Developer、DYI、Vantage 即服务的所有 Vantage 版本都启用了 NOS。
如果您需要 Vantage 的新实例,您可以在 Google Cloud、Azure 和 AWS 云上部署一个名为 Vantage Express 的免费版本。如果你使用这些,你需要在云上支付基础设施使用费,但是在执行本教程时,我们建议在云上也使用 Vantage Express,因为数据将从对象存储中读取。
使用 NOS 探索数据
NOS 目前支持 CSV、JSON(数组或换行符分隔)和 Parquet 数据格式。
假设我有一个数据集作为 CSV 文件存储在 S3 存储桶中。在决定是否将其引入 Vantage 之前,我想先探索一下该数据集。对于这种情况,我们将使用一个公共数据集,其中包含美国地质调查局收集的流量数据。此外,存储桶由 Teradata 发布https://td-usgs-public.s3.amazonaws.com/使用。
让我们从一些示例 CSV 数据开始。获取 Vantage 从存储桶中检索的前 10 行。
SELECT
TOP 10 *
FROM (
LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'
) AS d;
查询结果如下所示:
| 标高 2 | 流动 | site_no | 约会时间 | 沉淀 | 标高 |
|---|---|---|---|---|---|
| 10.9 | 15300 | 09380000 | 2018-06-28 00:30 | 671 | 9.80 |
| 10.8 | 14500 | 09380000 | 2018-06-28 01:00 | 673 | 9.64 |
| 10.7 | 14100 | 09380000 | 2018-06-28 01:15 | 672 | 9.56 |
| 11.0 | 16200 | 09380000 | 2018-06-27 00:00 | 669 | 9.97 |
| 10.9 | 15700 | 09380000 | 2018-06-27 00:30 | 668 | 9.88 |
| 10.8 | 15400 | 09380000 | 2018-06-27 00:45 | 672 | 9.82 |
| 10.8 | 15100 | 09380000 | 2018-06-27 01:00 | 672 | 9.77 |
| 10.8 | 14700 | 09380000 | 2018-06-27 01:15 | 672 | 9.68 |
| 10.9 | 16000 | 09380000 | 2018-06-27 00:15 | 668 | 9.93 |
| 10.8 | 14900 | 09380000 | 2018-06-28 00:45 | 672 | 9.72 |
这么多数字,它们是什么意思?为了回答这个问题,我们要求 Vantage 检测 CSV 文件的架构。
SELECT
*
FROM (
LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'
RETURNTYPE='NOSREAD_SCHEMA'
) AS d;
Vantage 获取数据样本以进行模式分析并返回结果。
| 姓名 | 数据类型 | 文件类型 | 地点 |
|---|---|---|---|
| 标高 2 | 十进制(3,2) | CSV | /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv |
| 流动 | 十进制(3,2) | CSV | /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv |
| site_no | 整数 | CSV | /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv |
| 约会时间 | 时间戳(0)格式'Y4-MM-DDBHH:MI' | CSV | /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv |
| 沉淀 | 十进制(3,2) | CSV | /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv |
| 标高 | 十进制(3,2) | CSV | /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv |
对于每一列,都会显示用于推断架构的名称、数据类型和文件名。您可以看到 CSV 文件有 6 列。
使用 NOS 查询数据
现在我们知道了模式,我们可以将数据集视为普通的 SQL 表。为了证明这一点,让我们做一些数据聚合。让我们获取我们正在收集温度的每个站点的平均温度。
SELECT
site_no Site_no, AVG(Flow) Avg_Flow
FROM (
LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'
) AS d
GROUP BY
site_no
HAVING
Avg_Flow IS NOT NULL;
结果如下所示:
| Site_no | 平均流量 |
|---|---|
| 09380000 | 11 |
| 09423560 | 73 |
| 09424900 | 93 |
| 09429070 | 81 |
将此对象注册为外部表,可以将其视为永久源,以便将来更轻松地查询。
-- If you are running this sample as dbc user you will not have permissions
-- to create a table in dbc database. Instead, create a new database and use
-- the newly create database to create a foreign table.
CREATE DATABASE Riverflow
AS PERMANENT = 60e6, -- 60MB
SPOOL = 120e6; -- 120MB
-- change current database to Riverflow
DATABASE Riverflow;
CREATE FOREIGN TABLE riverflow
USING ( LOCATION('/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/') );
SELECT top 10 * FROM riverflow;
最后的 SELECT 语句返回以下结果。
| 地点 | 标高 2 | 流动 | site_no | 约会时间 | 沉淀 | 标高 |
|---|---|---|---|---|---|---|
| /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09429070/2018/07/02.csv | 无效的 | 无效的 | 9429070 | 2018-07-02 14:40:00 | 1.21 | 无效的 |
| /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csv | 无效的 | 0.00 | 9400815 | 2018-07-10 00:30:00 | 0.00 | -0.01 |
| /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csv | 无效的 | 0.00 | 9400815 | 2018-07-10 00:45:00 | 0.00 | -0.01 |
| /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csv | 无效的 | 0.00 | 9400815 | 2018-07-10 01:00:00 | 0.00 | -0.01 |
| /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csv | 无效的 | 0.00 | 9400815 | 2018-07-10 00:15:00 | 0.00 | -0.01 |
| /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09429070/2018/07/02.csv | 无效的 | 无效的 | 9429070 | 2018-07-02 14:38:00 | 1.06 | 无效的 |
我们的 SELECT 语句看起来就像在数据库中的表上的常规 SELECT。如果您在查询数据时需要以秒为单位的响应时间,有一种简单的方法可以将您的 CSV 数据导入 Vantage 以加快速度。了解如何。
将数据从 NOS 加载到 Vantage
对对象存储的查询比对 Vantage 数据库表的查询花费更长的时间。如果数据看起来很有用,并且您想使用可以更快地为您提供答案的解决方案对其进行分析,该怎么办?
NOS 返回的数据可以作为 CREATE TABLE 语句的来源,这样查询结果可以很容易地转换为 Vantage 数据库表。
此查询假定您在上一步中创建了一个数据库 Riverflow 和一个名为 riverflow 的外部表。
-- This query assumes you created database `Riverflow`
-- and a foreign table called `riverflow` in the previous step.
CREATE MULTISET TABLE riverflow_native (site_no, Flow, GageHeight, datetime)
AS (
SELECT site_no, Flow, GageHeight, datetime FROM riverflow
) WITH DATA
NO PRIMARY INDEX;
SELECT TOP 10 * FROM riverflow_native;
最终 SELECT 语句的结果如下所示:
| site_no | 流动 | 标高 | 约会时间 |
|---|---|---|---|
| 9400815 | . 00 | ー。 01 | 2018-07-10 00:30:00 |
| 9400815 | . 00 | ー。 01 | 2018-07-10 01:00:00 |
| 9400815 | . 00 | ー。 01 | 2018-07-10 01:15:00 |
| 9400815 | . 00 | ー。 01 | 2018-07-10 01:30:00 |
| 9400815 | . 00 | ー。 01 | 2018-07-10 02:00:00 |
| 9400815 | . 00 | ー。 01 | 2018-07-10 02:15:00 |
| 9400815 | . 00 | ー。 01 | 2018-07-10 01:45:00 |
| 9400815 | . 00 | ー。 01 | 2018-07-10 00:45:00 |
| 9400815 | . 00 | ー。 01 | 2018-07-10 00:15:00 |
| 9400815 | . 00 | ー。 01 | 2018-07-10 00:00:00 |
这次 SELECT 语句在 1 秒内返回。因为 Vantage 不需要从 NOS 获取数据。 Vantage 以数据库中已有的数据进行响应,而无需从 NOS 检索数据。
访问私有存储桶
到目前为止,我们已经使用了公共存储桶。如果您使用的是私有存储桶怎么办?如何判断 Vantage 使用哪些凭据?
可以直接在查询中输入访问存储桶的凭据。
SELECT
TOP 10 *
FROM (
LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'
AUTHORIZATION='{"ACCESS_ID":"","ACCESS_KEY":""}'
) AS d;
不断输入这些凭据可能既麻烦又不安全。 Vantage 允许您创建一个身份验证对象,该对象充当身份验证信息的容器。
CREATE AUTHORIZATION aws_authorization
USER 'YOUR-ACCESS-KEY-ID'
PASSWORD 'YOUR-SECRET-ACCESS-KEY';
然后就可以在创建外表的时候引用授权对象了。
CREATE FOREIGN TABLE riverflow
, EXTERNAL SECURITY aws_authorization
USING ( LOCATION('/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/') );
数据从 Vantage 导出到对象存储
到目前为止,我们已经介绍了从对象存储读取和导入数据。如果有一种方法可以使用 SQL 将数据从 Vantage 导出到对象存储,那不是很好吗?
这正是 WRITE_NOS 函数的用途。例如,可以使用以下查询将数据从 riverflow_native 表导出到对象存储:
SELECT * FROM WRITE_NOS (
ON ( SELECT * FROM riverflow_native )
PARTITION BY site_no ORDER BY site_no
USING
LOCATION('YOUR-OBJECT-STORE-URI')
AUTHORIZATION(aws_authorization)
STOREDAS('PARQUET')
COMPRESSION('SNAPPY')
NAMING('RANGE')
INCLUDE_ORDERING('TRUE')
) AS d;
在这里,我们从 riverflow_native 获取数据并使用 parquet 格式将其存储在 YOUR-OBJECT-STORE-URI 存储桶中。数据按 site_no 属性分为文件并压缩。
概括
本快速入门演示了如何使用 Vantage 的本机对象存储 (NOS) 功能从对象存储中读取数据。 NOS 支持读取和导入以 CSV、JSON 和 Parquet 格式存储的数据。
NOS 还可以将数据从 Vantage 导出到对象存储。
学到更多
・Teradata Vantage™ - 原生对象存储入门指南
联系 Teradata Vantage
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308626755.html