Step 6: Load sample data from Amazon S3 - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

Step 6: Load sample data from Amazon S3

此时,您拥有了一个名为 dev 的数据库,并且已连接。接下来,在该数据库中创建一些表,将数据上传到表并尝试查询。为方便起见,您上传的示例数据在 Amazon S3 存储桶中可用。

注意

如果您使用的是 SQL 客户端工具,请确保您的 SQL 客户端已连接到集群。

完成此步骤后,您可以在Where do I go from here?中详细了解 Amazon Redshift 并重置环境。

上传示例数据

  1. 创建表。

    如果您正在使用 Amazon Redshift 查询编辑器,单独复制并运行以下创建表语句以创建表格 dev 数据库。有关语法的详细信息,请参阅 创建表格Amazon Redshift Database Developer Guide.

    create table users( userid integer not null distkey sortkey, username char(8), firstname varchar(30), lastname varchar(30), city varchar(30), state char(2), email varchar(100), phone char(14), likesports boolean, liketheatre boolean, likeconcerts boolean, likejazz boolean, likeclassical boolean, likeopera boolean, likerock boolean, likevegas boolean, likebroadway boolean, likemusicals boolean);
    create table venue( venueid smallint not null distkey sortkey, venuename varchar(100), venuecity varchar(30), venuestate char(2), venueseats integer);
    create table category( catid smallint not null distkey sortkey, catgroup varchar(10), catname varchar(10), catdesc varchar(50));
    create table date( dateid smallint not null distkey sortkey, caldate date not null, day character(3) not null, week smallint not null, month character(5) not null, qtr character(5) not null, year smallint not null, holiday boolean default('N'));
    create table event( eventid integer not null distkey, venueid smallint not null, catid smallint not null, dateid smallint not null sortkey, eventname varchar(200), starttime timestamp);
    create table listing( listid integer not null distkey, sellerid integer not null, eventid integer not null, dateid smallint not null sortkey, numtickets smallint not null, priceperticket decimal(8,2), totalprice decimal(8,2), listtime timestamp);
    create table sales( salesid integer not null, listid integer not null distkey, sellerid integer not null, buyerid integer not null, eventid integer not null, dateid smallint not null sortkey, qtysold smallint not null, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp);
  2. 使用 COPY 命令从 Amazon S3 中加载示例数据。

    注意

    我们建议使用 COPY 命令将大型数据集从 Amazon S3 或 DynamoDB 加载到 Amazon Redshift 中。有关复制语法的详细信息,请参阅 复制Amazon Redshift Database Developer Guide.

    下载文件 tickitdb.zip,其中包含各个样本数据文件。将各个文件解压缩并将其加载到 AWS 区域中 Amazon S3 存储桶的 tickit 文件夹中。编辑本教程中的 COPY 命令以指向 Amazon S3 存储桶中的文件。有关如何管理文件的信息,请参阅 Amazon S3,参见 创建和配置S3存储区Amazon Simple Storage Service 控制台用户指南.

    要加载示例数据,您必须为您的集群提供代表您访问 Amazon S3 的身份验证。您可提供基于角色的身份验证或基于密钥的身份验证。我们建议使用基于角色的身份验证。有关两种身份验证的更多信息,请参阅 凭据Amazon Redshift Database Developer Guide.

    在此步骤中,您将通过引用在前面步骤中创建并附加到集群的 IAM 角色来提供身份验证。

    注意

    如果您没有适当的访问权限 Amazon S3,运行拷贝命令时会收到以下错误消息: S3ServiceException: Access Denied。有关“拷贝”命令的iam权限的信息,请参阅 复制Amazon Redshift Database Developer Guide.

    COPY 命令包含用于 IAM 角色、存储桶名称和 AWS 区域的 Amazon 资源名称 (ARN) 的占位符,如下例所示。

    copy users from 's3://<myBucket>/tickit/allusers_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>';

    要使用 IAM 角色授予访问权限,请将 CREDENTIALS 参数字符串中的 <iam-role-arn> 替换为您在Step 2: Create an IAM role中创建的 IAM 角色的角色 ARN。

    您的 COPY 命令类似下面的示例。

    copy users from 's3://<myBucket>/tickit/allusers_pipe.txt' credentials 'aws_iam_role=arn:aws:iam::123456789012:role/myRedshiftRole' delimiter '|' region '<aws-region>';

    要加载样品数据,请更换 <myBucket>, <iam-role-arn>、、 和 。<aws-region> 在以下复制命令中,您的值为。如果您正在使用 Amazon Redshift 查询编辑器,单独运行以下命令。

    copy users from 's3://<myBucket>/tickit/allusers_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>';
    copy venue from 's3://<myBucket>/tickit/venue_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>';
    copy category from 's3://<myBucket>/tickit/category_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>';
    copy date from 's3://<myBucket>/tickit/date2008_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>';
    copy event from 's3://<myBucket>/tickit/allevents_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' region '<aws-region>';
    copy listing from 's3://<myBucket>/tickit/listings_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>';
    copy sales from 's3://<myBucket>/tickit/sales_tab.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS' region '<aws-region>';
  3. 现在,尝试进行示例查询。有关详细信息,请参阅 选择Amazon Redshift Developer Guide.

    -- Get definition for the sales table. SELECT * FROM pg_table_def WHERE tablename = 'sales'; -- Find total sales on a given calendar date. SELECT sum(qtysold) FROM sales, date WHERE sales.dateid = date.dateid AND caldate = '2008-01-05'; -- Find top 10 buyers by quantity. SELECT firstname, lastname, total_quantity FROM (SELECT buyerid, sum(qtysold) total_quantity FROM sales GROUP BY buyerid ORDER BY total_quantity desc limit 10) Q, users WHERE Q.buyerid = userid ORDER BY Q.total_quantity desc; -- Find events in the 99.9 percentile in terms of all time gross sales. SELECT eventname, total_price FROM (SELECT eventid, total_price, ntile(1000) over(order by total_price desc) as percentile FROM (SELECT eventid, sum(pricepaid) total_price FROM sales GROUP BY eventid)) Q, event E WHERE Q.eventid = E.eventid AND percentile = 1 ORDER BY total_price desc;