本节我们将下载IMDb电影数据,并导入到Redshift集群
我们将下载IMDb的title.akas.tsv.gz
和title.basics.tsv.gz
(后面演示在Redshift执行join查询时会连接这两个表):
下载数据:
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 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)
)
执行完成后可在左侧确定是否创建成功:
将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处于等待状态:
此时查看Redshift的Query monitoring
页面:
同样会发现正在执行的导入语句:
执行完成后,该语句的状态变成Completed
:
在editor中也能看到总执行时间:
执行sql查询,确认数据导入成功: