限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

Amazon Redshift Spectrum 十二大最佳实践(一)

  • 2020-01-13
  • 本文字数:2685 字

    阅读完需:约 9 分钟

Amazon Redshift Spectrum 十二大最佳实践(一)

Amazon Redshift Spectrum 使您能够对存储在 Amazon S3 中的数据运行 Amazon Redshift SQL 查询。利用 Redshift Spectrum,您可以将 Amazon Redshift 的强大分析能力扩展到存储于 Amazon Redshift 本地的数据之外。Redshift Spectrum 提供的多种功能能够扩大您可能实施的战略。例如,它能够扩展 Amazon Redshift 可访问的数据大小,并能让您将计算与存储分离,从而提升混合工作负载用例的处理速度。Redshift Spectrum 还能够提高数据的互操作性,因为您可以从 Amazon Redshift 之外的多个计算平台访问同一 S3 对象。这些平台包括 Amazon AthenaAmazon EMR with Apache Spark、Amazon EMR with Apache Hive、Presto 及可访问 S3 的任何其他计算平台。因此,您无需通过繁琐、耗时的提取、转换、加载 (ETL) 流程,即可查询您的 Amazon S3 数据湖中的海量数据。您还可以连接外部 S3 表与集群本地磁盘上的表。Redshift Spectrum 对数以千计的节点进行复杂的查询优化和扩展处理,从而交付快速的性能。在本博文中,我们收集了 Redshift Spectrum 的 12 大重要最佳实践,并将这些实践分成不同的功能组。这些指南基于我们与 Amazon Redshift 客户的许多交互以及大量直接项目工作。在您开始使用之前,需要遵循以下步骤进行设置。有关开始使用 Redshift Spectrum 的先决条件及步骤的更多信息,请参阅 Amazon Redshift 文档中的Amazon Redshift Spectrum 入门

设置测试环境

要进行测试以验证本博文中概述的最佳实践,您可以使用任何数据集。Redshift Spectrum 支持多种常见数据格式:Text、Parquet、ORC、JSON、Avro 等等。您可以使用数据的原始格式进行查询,也可以根据数据访问模式、存储要求等等将数据转换为更高效的格式。例如,如果您经常访问列的子集,Parquet 和 ORC 等列格式能够仅读取所需列,从而大大降低 I/O。如何转换文件格式不在本博文的探讨范围之内,有关如何转换文件格式的更多信息,请参阅以下资源:


创建外部 schema

您可以遵循以下方法创建名为 s3_external_schema 的外部 schema:


SQL


create external schema s3_external_schema from data catalog database 'spectrumdb' iam_role 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/aod-redshift-role'create external database if not exists;
复制代码


Amazon Redshift 集群和 Amazon S3 中的数据文件必须位于同一 AWS 区域。您可以在 Amazon Redshift、AWS Glue、Athena Data Catalog 或您自己的 Apache Hive 元存储中创建外部数据库。您的 Amazon Redshift 集群需要授权才能访问您的外部数据目录以及 Amazon S3 中的数据文件。您需要引用附加到您集群的 AWS Identity and Access Management (IAM) 角色(例如 aod-redshift-role)来提供授权。有关更多信息,请参阅 Amazon Redshift 文档中的为 Amazon Redshift 创建 IAM 角色

定义外部表

您可以使用 Parquet 文件定义分区的外部表,并使用如下逗号分隔值 (CSV) 文件定义其他非分区的外部表:


SQL


CREATE  external table s3_external_schema.LINEITEM_PART_PARQ (  L_ORDERKEY BIGINT, L_PARTKEY BIGINT, L_SUPPKEY BIGINT, L_LINENUMBER INT, L_QUANTITY DECIMAL(12,2), L_EXTENDEDPRICE DECIMAL(12,2), L_DISCOUNT DECIMAL(12,2), L_TAX DECIMAL(12,2), L_RETURNFLAG VARCHAR(128), L_LINESTATUS VARCHAR(128), L_COMMITDATE DATE, L_RECEIPTDATE DATE, L_SHIPINSTRUCT VARCHAR(128), L_SHIPMODE VARCHAR(128), L_COMMENT VARCHAR(128))partitioned by (L_SHIPDATE DATE)stored as PARQUETlocation 's3://<your-bucket>/<xyz>/lineitem_partition/';
CREATE external table s3_external_schema.LINEITEM_CSV ( L_ORDERKEY BIGINT, L_PARTKEY INT, L_SUPPKEY INT, L_LINENUMBER INT, L_QUANTITY DECIMAL(12,2), L_EXTENDEDPRICE DECIMAL(12,2), L_DISCOUNT DECIMAL(12,2), L_TAX DECIMAL(12,2), L_RETURNFLAG VARCHAR(128), L_LINESTATUS VARCHAR(128), L_SHIPDATE DATE , L_COMMITDATE DATE, L_RECEIPTDATE DATE, L_SHIPINSTRUCT VARCHAR(128), L_SHIPMODE VARCHAR(128), L_COMMENT VARCHAR(128))row format delimitedfields terminated by '|'stored as textfilelocation 's3://<your-bucket>/<xyz>/lineitem_csv/';
复制代码

查询数据

总的来说,Amazon Redshift 通过 Redshift Spectrum 访问存储在 Amazon S3 中的外部表。您可以使用用于其他 Amazon Redshift 表的相同的 SELECT 语法查询外部表。目前,所有外部表均为只读格式。


您必须在您的 SELECT 语句中引用外部表(方法是在表名称前面用 schema 名称做前缀),无需创建表并将其加载到 Amazon Redshift 中。


如希望使用 Redshift Spectrum 执行测试,可从以下两个查询着手。


查询 1


SQL


SELECT  l_returnflag,        l_linestatus,        sum(l_quantity) as sum_qty,        sum(l_extendedprice) as sum_base_price,        sum(l_extendedprice*(1-l_discount)) as sum_disc_price,        sum(l_extendedprice*(1-l_discount)*(1+l_tax)) as sum_charge,        avg(l_quantity) as avg_qty,        avg(l_extendedprice) as avg_priceFROM s3_external_schema.LINEITEM_PART_PARQWHERE l_shipdate BETWEEN '1998-12-01' AND '1998-12-31'GROUP BY l_returnflag, l_linestatusORDER BY l_returnflag, l_linestatus;
复制代码


该查询仅访问一个外部表,可用于突出显示 Redshift Spectrum 层提供的额外处理能力。


查询 2


SQL


SELECT   l_orderkey,         Sum(l_extendedprice * (1 - l_discount)) AS revenue,         o_orderdate,         o_shippriority FROM     customer, orders, s3_external_schema.lineitem_part_parq WHERE    c_mktsegment = 'BUILDING'          AND      c_custkey = o_custkey          AND      l_orderkey = o_orderkey          AND      o_orderdate < date '1995-03-15'          AND      l_shipdate >  date '1995-03-15' GROUP BY l_orderkey, o_orderdate, o_shippriority ORDER BY revenue DESC, o_orderdate LIMIT 20;
复制代码


该查询将三个表连接在一起:customerorders 表是本地 Amazon Redshift 表,而 LINEITEM_PART_PARQ 表是外部表。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/12-best-practices-for-amazon-redshift-spectrum/


2020-01-13 14:53805

评论

发布
暂无评论
发现更多内容

盘点2020 | 疫情下的思考和学习

soolaugust

盘点2020

一文为你详解Unique SQL原理和应用

华为云开发者联盟

数据库 sql unique

80%Java开发者面试都问的SpringBoot你竟不会?看完这些笔记足以

Java架构之路

Java 程序员 架构 面试 编程语言

云图说 | 云上资源管控有神器!关于IAM,你想知道的都在这里!

华为云开发者联盟

服务 权限管理 iam

VACUUM无法从表中删除死元组的三个原因

PostgreSQLChina

数据库 postgresql

太赞了!滴滴开源了一套分布式ID的生成系统...

Java架构师迁哥

IDEA 文档插件 DocView 版本更新:修改 UI 并支持 IDEA 2020.3 !

程序员小航

idea插件 IntelliJ IDEA 文档生成

将原则纳入到架构的生命中

soolaugust

架构 思考 设计

好久不见!这份Spring全家桶、Docker、Redis架构大礼包免费赠送

Java架构之路

Java 程序员 架构 面试 编程语言

耗时一个月整理的97道大厂Java核心面试题出炉,精心整理,无偿分享

Java架构之路

Java 程序员 架构 面试 编程语言

Java进阶文档:彻底搞懂JVM+Linux+MySQL+Netty+Tomcat+并发编程

Java架构之路

Java 程序员 架构 面试 编程语言

Prometheus TSDB(Part 2):预写日志(WAL)和检查点

Grafana 爱好者

云原生 Prometheus tsdb 可观察性

智慧城市建设,社区智能化系统搭建解决方案

t13823115967

智慧城市 平安小区

解析字节算法面试真题,深入探究ArrayList应用原理

小Q

Java 学习 编程 架构 面试

为了SpringBoot提交Tomcat执行,我总结了这么多

小Q

tomcat 学习 面试 微服务 springboot

面试被问高并发一脸懵?那是你没看过我整理得高并发回答模板

小Q

Java 学习 面试 高并发 性能调优

一口气说出四种幂等性解决方案,面试官露出了姨母笑~

不才陈某

Java 分布式 接口

LeetCode题解:127. 单词接龙,BFS+统计单词变化次数,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

EZYTRX波场智能合约APP系统软件开发

系统开发

腾讯高工强烈推荐的“Netty速成手册”原理+应用+调优,带你将知识点一网打尽

比伯

Java 编程 程序员 架构 Netty

产品策略闭环是个什么环?

万事ONES

项目管理 团队协作 需求管理 需求分析 产品策略

硬肝到秃头!Alibaba强推并发编程笔记我跪了,真的学到好多东西!

Java架构追梦

Java 学习 架构 面试 并发编程

《大数据算法》.pdf

田维常

算法

dubbogo 3.0:牵手 gRPC 走向云原生时代

阿里巴巴云原生

gRPC 云原生 中间件 dubbo-go Go 语言

一文带你彻底了解大数据处理引擎Flink内存管理

华为云开发者联盟

大数据 数据 处理

从 JMM 透析 volatile 与 synchronized 原理

码哥字节

volatile JVM JMM Java 25 周年 synchronized

什么是全场景AI计算框架MindSpore?

华为云开发者联盟

人工智能 AI mindspore

我和阿里P7差的不是薪资?而是Redis+微服务+Nginx+MySQL+Tomcat

Java架构之路

Java 程序员 架构 面试 编程语言

答了Mybatis这个问题后,面试官叫我回去等通知……

田维常

mybatis

智慧警务可视化平台开发,重点人员管控系统搭建

t13823115967

智慧公安 智慧警务系统开发

从源码的角度搞懂 Java 动态代理!

Java架构师迁哥

Amazon Redshift Spectrum 十二大最佳实践(一)_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章