我可以直接查询以镶木地板格式存储在 s3 中的数据的红移表吗

Posted

技术标签:

【中文标题】我可以直接查询以镶木地板格式存储在 s3 中的数据的红移表吗【英文标题】:can I directly query redhisft tables where data stored in s3 in parquet format 【发布时间】:2017-09-21 07:39:44 【问题描述】:

我有一个以 parquet 格式存储在 s3 中的数据集。我想知道我是否可以使用复制命令将这些数据加载到 redshift 中。我已经读过我可以使用 redhisft 频谱,我可以在其中提到存储在 hive 中的模式并在 redhisft 中读取它。

对我有用的是,如果我可以从 redhisft 查询存储在 s3 中的镶木地板数据,或者我可以使用复制命令将它们直接加载到 redshift 中。

有一些选项可以让我旋转集群并使用 jdbc 将 parquet 数据写入 s3。但问题是 jdbc 与复制命令相比太慢了。

【问题讨论】:

【参考方案1】:

使用 Redshift External Schema 和表,您可以将 Parquet 数据从 S3 加载到 redshift。

CREATE  external table spectrum.LINEITEM_PART_PARQ ( 
 L_ORDERKEY BIGINT,
 L_PARTKEY BIGINT,
 L_SUPPKEY BIGINT,
 L_LINENUMBER INT,
 L_QUANTITY DECIMAL(12,2),
 L_EXTENDEDPRICE DECIMAL(12,2),
 L_DISCOUNT DECIMAL(12,2),
 L_TAX DECIMAL(12,2),
 L_RETURNFLAG VARCHAR(128),
 L_LINESTATUS VARCHAR(128),
 L_COMMITDATE VARCHAR(128),
 L_RECEIPTDATE VARCHAR(128),
 L_SHIPINSTRUCT VARCHAR(128),
 L_SHIPMODE VARCHAR(128),
 L_COMMENT VARCHAR(128))
partitioned by (L_SHIPDATE VARCHAR(128))
stored as PARQUET
location 's3://<your-bucket>/<xyz>/lineitem_partition/

来源:-https://aws.amazon.com/blogs/big-data/10-best-practices-for-amazon-redshift-spectrum/

http://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum.html

http://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum-query-s3-data.html

从外部表向redshift表中插入数据。

插入表格 (从 external_table 中选择 *);

【讨论】:

感谢您回答这个问题。如果我必须使用频谱,我必须单独支付 aws,这是我不想要的。我正在尝试了解是否有一种方法可以直接加载镶木地板数据,或者是否可以将它们访问到 redshift 而无需任何额外费用。

以上是关于我可以直接查询以镶木地板格式存储在 s3 中的数据的红移表吗的主要内容,如果未能解决你的问题,请参考以下文章

从多个火花工人以镶木地板格式保存

AWS Spectrum 为 AWS Glue 生成的镶木地板文件提供空白结果

使用 sparkSession.createDataFrame 以 parquet 格式一次将多行写入 s3

使用 pyspark 将镶木地板文件(在 aws s3 中)存储到 spark 数据框中

将数据从 PySpark 加载到 Redshift 时如何执行列编码

将镶木地板从 AWS Kinesis firehose 写入 AWS S3