加载数据

本节我们将下载IMDb电影数据,并导入到Redshift集群

下载数据并上传到S3

我们将下载IMDb的title.akas.tsv.gztitle.basics.tsv.gz(后面演示在Redshift执行join查询时会连接这两个表):

image-20221025112058607

下载数据:

wget https://datasets.imdbws.com/title.akas.tsv.gz
wget https://datasets.imdbws.com/title.basics.tsv.gz

解压title.akas.tsv.gz

gzip -d title.akas.tsv.gz

只解压这一个,另一份数据先不解压,我们将分别演示导入原始数据和压缩数据到Redshift

创建一个S3桶redshift-{xxx},将这两个文件上传到里面:

kongpingfan:~/environment/redshift $ aws s3 mb s3://redshift-kpf
make_bucket: redshift-kpf

kongpingfan:~/environment/redshift $ aws s3 cp title.akas.tsv s3://redshift-kpf
upload: ./title.akas.tsv to s3://redshift-kpf/title.akas.tsv  

kongpingfan:~/environment/redshift $ aws s3 cp title.basics.tsv.gz s3://redshift-kpf                                                     
upload: ./title.basics.tsv.gz to s3://redshift-kpf/title.basics.tsv.gz

导入数据到Redshift

使用第一节介绍的Redshift editor,在里面创建两张表:

CREATE SCHEMA imdb;


CREATE TABLE imdb.title(
  titleId VARCHAR (20),
  ordering BIGINT,
  title VARCHAR (5000),
  region VARCHAR (100),
  language VARCHAR (500),
  types VARCHAR (5000),
  attributes VARCHAR (5000),
  isOriginalTitle BOOLEAN
);

CREATE TABLE imdb.title_basics(
  tconst VARCHAR (20),
  titleType VARCHAR (100),
  primaryTitle VARCHAR (5000),
  originalTitle VARCHAR (5000),
  isAdult BOOLEAN,
  startYear VARCHAR(4),
  endYear VARCHAR(40),
  runTimeMinutes BIGINT,
  genres VARCHAR(5000)
)

执行完成后可在左侧确定是否创建成功:

image-20221025111954742

将S3中的两份数据导入到S3:

COPY imdb.title
FROM 's3://redshift-kpf/title.akas.tsv'
IGNOREHEADER 1
ACCEPTINVCHARS
DELIMITER '\t'
iam_role 'arn:aws:iam::145197526627:role/redshift-access-s3';

COPY imdb.title_basics
FROM 's3://redshift-kpf/title.basics.tsv.gz'
IGNOREHEADER 1
ACCEPTINVCHARS
DELIMITER '\t'
GZIP
iam_role 'arn:aws:iam::145197526627:role/redshift-access-s3';
  • IGNOREHEADER表示不导入第一行的表头,只导入表数据
  • ACCEPTINVCHARS。即使数据中含有非UTF-8字符也继续导入;如果没有指定这个参数,则导入的数据中有非UTF-8字符时会报错
  • DELIMITER表示每行数据以\t分割还是;分割
  • GZIP。如果数据是gzip压缩,需要指定这个参数。上面的数据一份做了压缩,另一份是原始数据;原始数据就不用加这个参数

Redshift导入数据时详细的参数列表,参考: https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html

在执行导入时,会发现editor处于等待状态:

image-20221025113745508

此时查看Redshift的Query monitoring页面:

image-20221025113852200

同样会发现正在执行的导入语句:

image-20221025113837543

执行完成后,该语句的状态变成Completed

image-20221025115141574

在editor中也能看到总执行时间:

image-20221025115155801

执行sql查询,确认数据导入成功:

image-20221026192858523