作者亚当·特沃维维奇
最后更新于 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 行。

读取S3.sql
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 文件的架构。

rewadS3withRT.sql
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 表。为了证明这一点,让我们做一些数据聚合。让我们获取我们正在收集温度的每个站点的平均温度。

rewadS3withQry.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

将此对象注册为外部表,可以将其视为永久源,以便将来更轻松地查询。

创建ForeignTBL.sql
-- 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 的外部表。

从NOS.sql 创建TBLSel
-- 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 使用哪些凭据?
可以直接在查询中输入访问存储桶的凭据。

访问私人 Bkt
SELECT
  TOP 10 *
FROM (
  LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'
  AUTHORIZATION='{"ACCESS_ID":"","ACCESS_KEY":""}'
) AS d;

不断输入这些凭据可能既麻烦又不安全。 Vantage 允许您创建一个身份验证对象,该对象充当身份验证信息的容器。

授权.sql
CREATE AUTHORIZATION aws_authorization
  USER 'YOUR-ACCESS-KEY-ID'
  PASSWORD 'YOUR-SECRET-ACCESS-KEY';

然后就可以在创建外表的时候引用授权对象了。

CreateForeignTBLwithAuthorize.sql
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 表导出到对象存储:

写入NOS.sql
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

联系 Teradata Vantage


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308626755.html

相关文章:

  • 2022-12-23
  • 2021-06-08
  • 2022-02-04
  • 2021-12-31
  • 2021-11-12
  • 2022-01-08
  • 2021-12-31
猜你喜欢
  • 2022-12-23
  • 2021-12-31
  • 2021-09-19
  • 2021-06-17
  • 2022-12-23
  • 2021-09-30
相关资源
相似解决方案