批量上传到 Amazon Redshift
Posted
技术标签:
【中文标题】批量上传到 Amazon Redshift【英文标题】:Bulk upload to Amazon Redshift 【发布时间】:2019-04-22 06:52:57 【问题描述】:我需要每天将数据插入 AWS Redshift。 要求是仅分析插入 Redshift 的每日批次。 BI 工具使用 Redshift 集群进行分析。
问题:
每天“更新”数据集的最佳做法是什么? 我担心这是一个相当繁重的操作,性能会很差,但同时这是一个很常见的情况,我相信它是由多个组织完成的。
【问题讨论】:
请修改您的问题以提供更多详细信息。 1)大约有多少行? 2)大约什么大小的集群? 3)您的数据是如何组织的?很多表? 1张桌子?排序键?分配键? 4)您目前的批量上传方法是什么? 5) 你在表上运行什么样的查询?什么加入?什么过滤器? 6) 每天有多少查询 7) 您需要多快的查询返回? “续订”是什么意思?您只是想将来自 Amazon S3 的数据加载到一个空表中,还是尝试进行插入/更新(更新插入)? 嗨,约翰。数据量约为 10TB。是的,它在 s3 上,Redshift 是一个通过 BI 工具分析数据的多租户环境。每天需要将新批次 10TB 加载到 Redshift。由于这个原因,使用了Redshift集群我不知道每天“更新”数据的最佳方式是什么。 【参考方案1】:如果数据在 S3 上,为什么不在它上面创建一个EXTERNAL TABLE
。然后,如果对外部表的查询速度不够,您可以使用CREATE TABLE AS SELECT
语句将其加载到临时表中,加载后,将其重命名为您常用的表名。
草绘 SQL:
CREATE EXTERNAL TABLE external_daily_batch_20190422 (
<schema ...>
)
PARTITIONED BY (
<if anything to partition on>
)
ROW FORMAT SERDE <data format>
LOCATION 's3://my-s3-location/2019-04-22';
CREATE TABLE internal_daily_batch_temp
DISTKEY ...
SORTKEY ...
AS
SELECT * from external_daily_batch_20190422;
DROP TABLE IF EXISTS internal_daily_batch__backup CASCADE;
ALTER TABLE internal_daily_batch rename to internal_daily_batch__backup;
ALTER TABLE internal_daily_batch_temp rename to internal_daily_batch;
增量负载不可能?
顺便问一下,你所有的 10TB 数据都是可变的吗?不能增量更新吗?
【讨论】:
以上是关于批量上传到 Amazon Redshift的主要内容,如果未能解决你的问题,请参考以下文章