步骤 1. 创建测试数据集 - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

步骤 1. 创建测试数据集

数据仓库数据库通常采用星型 schema 设计,该 schema 由包含数据库核心数据的中央事实数据表和为事实数据表提供描述性属性信息的多个维度表组成。事实数据表基于与维度的主键匹配的外键与各个维度表联接。

星型架构基准(SSB)

在本教程中,您将基于 Star Schema Benchmark (SSB) Schema 使用一组表(共 5 个)。下图显示了 SSB 数据模型。

创建测试数据集

您将创建一组无排序键、分配方式或压缩编码的表。然后,您为这些表加载来自 SSB 数据集的数据。

  1. (可选)启动一个集群。

    如果您已有要使用的集群,则可跳过这一步。您的集群应拥有至少两个节点。但在本教程的练习中,您将使用四节点集群。

    要启动具有四个节点的dc2.large群集,请遵循以下步骤 Amazon Redshift 入门,但选择 多节点 对于 群集类型 并设定 计算节点数量4.

    按照 步骤操作以从 SQL 客户端连接到您的集群并测试连接。您无需完成剩余步骤,即可创建表、上传数据和尝试示例查询。

  2. 使用最少的属性创建 SSB 测试表。

    注意

    如果 SSB 表在当前数据库中已存在,则您需要先删除这些表。有关 DROP TABLE 命令的信息,请参阅步骤 6. 重新创建测试数据集

    考虑到本教程的目的,您首次创建表时,它们没有排序键、分配方式或压缩编码。

    执行以下 CREATE TABLE 命令。

    CREATE TABLE part ( p_partkey INTEGER NOT NULL, p_name VARCHAR(22) NOT NULL, p_mfgr VARCHAR(6) NOT NULL, p_category VARCHAR(7) NOT NULL, p_brand1 VARCHAR(9) NOT NULL, p_color VARCHAR(11) NOT NULL, p_type VARCHAR(25) NOT NULL, p_size INTEGER NOT NULL, p_container VARCHAR(10) NOT NULL ); CREATE TABLE supplier ( s_suppkey INTEGER NOT NULL, s_name VARCHAR(25) NOT NULL, s_address VARCHAR(25) NOT NULL, s_city VARCHAR(10) NOT NULL, s_nation VARCHAR(15) NOT NULL, s_region VARCHAR(12) NOT NULL, s_phone VARCHAR(15) NOT NULL ); CREATE TABLE customer ( c_custkey INTEGER NOT NULL, c_name VARCHAR(25) NOT NULL, c_address VARCHAR(25) NOT NULL, c_city VARCHAR(10) NOT NULL, c_nation VARCHAR(15) NOT NULL, c_region VARCHAR(12) NOT NULL, c_phone VARCHAR(15) NOT NULL, c_mktsegment VARCHAR(10) NOT NULL ); CREATE TABLE dwdate ( d_datekey INTEGER NOT NULL, d_date VARCHAR(19) NOT NULL, d_dayofweek VARCHAR(10) NOT NULL, d_month VARCHAR(10) NOT NULL, d_year INTEGER NOT NULL, d_yearmonthnum INTEGER NOT NULL, d_yearmonth VARCHAR(8) NOT NULL, d_daynuminweek INTEGER NOT NULL, d_daynuminmonth INTEGER NOT NULL, d_daynuminyear INTEGER NOT NULL, d_monthnuminyear INTEGER NOT NULL, d_weeknuminyear INTEGER NOT NULL, d_sellingseason VARCHAR(13) NOT NULL, d_lastdayinweekfl VARCHAR(1) NOT NULL, d_lastdayinmonthfl VARCHAR(1) NOT NULL, d_holidayfl VARCHAR(1) NOT NULL, d_weekdayfl VARCHAR(1) NOT NULL ); CREATE TABLE lineorder ( lo_orderkey INTEGER NOT NULL, lo_linenumber INTEGER NOT NULL, lo_custkey INTEGER NOT NULL, lo_partkey INTEGER NOT NULL, lo_suppkey INTEGER NOT NULL, lo_orderdate INTEGER NOT NULL, lo_orderpriority VARCHAR(15) NOT NULL, lo_shippriority VARCHAR(1) NOT NULL, lo_quantity INTEGER NOT NULL, lo_extendedprice INTEGER NOT NULL, lo_ordertotalprice INTEGER NOT NULL, lo_discount INTEGER NOT NULL, lo_revenue INTEGER NOT NULL, lo_supplycost INTEGER NOT NULL, lo_tax INTEGER NOT NULL, lo_commitdate INTEGER NOT NULL, lo_shipmode VARCHAR(10) NOT NULL );
  3. 为这些表加载 SSB 示例数据。

    Amazon S3 存储桶中提供了本教程的示例数据,该存储桶向所有经过身份验证的 AWS 用户提供了读取权限,因此任何允许访问 Amazon S3 的有效 AWS 凭证都可以使用。

    1. 创建一个包含以下 SQL 的名为 loadssb.sql 的新文本文件。

      copy customer from 's3://awssampledbuswest2/ssbgz/customer' credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' gzip compupdate off region 'us-west-2'; copy dwdate from 's3://awssampledbuswest2/ssbgz/dwdate' credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' gzip compupdate off region 'us-west-2'; copy lineorder from 's3://awssampledbuswest2/ssbgz/lineorder' credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' gzip compupdate off region 'us-west-2'; copy part from 's3://awssampledbuswest2/ssbgz/part' credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' gzip compupdate off region 'us-west-2'; copy supplier from 's3://awssampledbuswest2/ssbgz/supplier' credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' gzip compupdate off region 'us-west-2';
    2. Replace <Your-Access-Key-ID> $and <Your-Secret-Access-Key> 使用您自己的AWID帐户凭证。用单引号引起来的凭证字符串的区段不得包含任何空格或换行符。

    3. 运行该 SQL 脚本或将这些命令复制粘贴到您的 SQL 客户端,以执行 COPY 命令。

      注意

      加载所有五张表需要花费约 10 到 15 分钟时间。

      您的结果应类似于以下内容。

      Load into table 'customer' completed, 3000000 record(s) loaded successfully. 0 row(s) affected. copy executed successfully Execution time: 10.28s (Statement 1 of 5 finished) ... ... Script execution finished Total script execution time: 9m 51s
  4. 计算所有五张表的执行时间,或记下脚本的总执行时间。您需要将该数字作为加载时间记录在下面步骤 2 中的基准表内。

  5. 要验证每个表都已正确加载,请执行以下命令。

    select count(*) from LINEORDER; select count(*) from PART; select count(*) from CUSTOMER; select count(*) from SUPPLIER; select count(*) from DWDATE;

    以下结果表显示每个 SSB 表的行数。

    表名称 行数
    LINEORDER 600037902
    PART 1400000
    CUSTOMER 3000000
    SUPPLIER 1,000,000*
    DWDATE 2556

下一步

步骤 2. 测试系统性能以建立基线