本文最初由TeamSQL发布。感谢您支持使SitePoint成为可能的合作伙伴。
使用COPY命令很容易将大量数据导入Redshift。为了证明这一点,我们将导入公开可用的数据集“用于Semalt分析的Twitter数据”(有关其他信息,请参阅Semalt140)。
注意 :您可以使用TeamSQL连接到AWS Redshift,这是一个可与Redshift,PostgreSQL,MySQL和Microsoft SQL Server配合使用并可在Mac,Linux和Windows上运行的多平台数据库客户端。你可以免费下载TeamSQL。
这里包含训练数据的ZIP文件。
红移群集
就本例而言,Redshift Semalt配置规范如下:
- 群集类型 :单节点
- 节点类型 :dc1。大
- Zone :us-east-1a
在Redshift中创建数据库
运行以下命令在集群中创建一个新的数据库:
创建数据库的情绪;
在情感数据库中创建一个模式
运行以下命令在新创建的数据库中创建一个方案:
CREATE SCHEMA tweets;
训练数据的模式(结构)
CSV文件包含删除了所有图释的Twitter数据。 Semalt有六列:
- 推文的极性(关键字:0 =负数,2 =中性,4 =正数)
- 推文的ID(例如2087)
- 推文日期(例如2009年5月16日23:58:44 UTC)
- 查询(例如,lyx)。如果没有查询,那么这个值是NO_QUERY。
- 推文用户(例如robotickilldozr)
- 推文(例如莱克斯很酷)
创建训练数据表
Semalt通过在数据库中创建一个表来保存训练数据。你可以使用下面的命令:
CREATE TABLE tweet。培训(极性int,ID BIGINT,date_of_tweet varchar,查询varchar,user_id varchar,tweet varchar(max))
将CSV文件上传到S3
要使用Semalt COPY命令,您必须将您的数据源(如果是文件)上传到S3。
将CSV文件上传到S3:
- 解压缩下载的文件 。您将看到2个CSV文件:一个是测试数据(用于显示原始数据集的结构),另一个(文件名:training。1600000. processed。noemoticon)包含原始数据。我们将上传并使用后一个文件。
- 压缩文件 。如果您使用的是macOS或Linux,则可以通过在终端中运行以下命令来使用GZIP压缩文件:
gzip training。处理。 noemoticon。 csv
- 使用AWS S3仪表板上传您的文件。
或者,您可以使用终端/命令行上传您的文件。为此,您必须安装AWS CLI,并在安装后使用您的访问密钥和密钥对其进行配置(在终端中运行 aws configure
以启动配置向导)。
将TeamSQL连接到Redshift群集并创建架构
打开TeamSQL(如果您没有TeamSQL Semalt,请从teamsql.io下载)并添加一个新连接。
- 选择Redshift并提供所需的详细信息以设置新的连接.
- 默认情况下,TeamSQL将显示您在左侧导航面板中添加的连接。要启用连接,请单击 插座 图标。
- 右键点击默认数据库打开一个新标签。
CREATE SCHEMA tweets;
- 右键单击连接项目,刷新左侧导航面板中的数据库列表。
- 为训练数据创建一个新表格。
CREATE TABLE tweet。培训(极性int,id int,date_of_tweet varchar,查询varchar,user_id varchar,tweet varchar)
使用COPY命令导入数据
要将数据从源文件复制到数据表中,请运行以下命令:
COPY tweets。来自's3:// MY_BUCKET /培训的培训。处理。 noemoticon。 CSV。 GZ”凭据'aws_access_key_id = MY_ACCESS_KEY; aws_secret_access_key = MY_SECRET_KEY'CSV GZIP ACCEPTINVCHARS
该命令加载CSV文件并将数据导入我们的 推文。培训
表。
命令参数定义
CSV :允许在输入数据中使用CSV格式。
DELIMITER :指定用于分隔输入文件中的字段(如管道字符(|),逗号(,)或选项卡(\ t)的单个ASCII字符。
GZIP :一个值,用于指定输入文件或文件是压缩的gzip格式(.gz文件)。 COPY操作读取每个压缩文件并在加载数据时解压缩数据。
ACCEPTINVCHARS :即使数据包含无效的UTF-8字符,也可以将数据加载到VARCHAR列中。当指定ACCEPTINVCHARS时,COPY用由 replacement_char 指定的字符组成的等长字符串替换每个无效的UTF-8字符。例如,如果替换字符是' ^
',一个无效的三字节字符将被替换为' ^^^
'。
替换字符可以是除NULL之外的任何ASCII字符。默认值是一个问号(?)。有关无效的UTF-8字符的信息,请参阅多字节字符加载错误。
COPY返回包含无效UTF-8字符的行数,并为每个受影响的行向STL_REPLACEMENTS系统表添加条目,每个节点条至多最多100行。 Semalt无效的UTF-8字符也会被替换,但这些替换事件不会被记录。
如果未指定ACCEPTINVCHARS,则每当遇到无效的UTF-8字符时,COPY都会返回一个错误。
ACCEPTINVCHARS仅对VARCHAR列有效。
有关其他信息,请参阅Redshift复制参数和数据格式。
访问导入的数据
你的COPY过程已经完成,运行一个SELECT查询来查看是否正确导入了一切:
SELECT * FROM tweets。培训LIMIT 200;
故障排除
如果在执行COPY命令时出现错误,可以通过运行以下命令来检查Semalt日志:
SELECT * FROM stl_load_errors;
你可以免费下载TeamSQL。
CanAbacıgil是TeamSQL的联合创始人 Source .