标签: amazon-redshift-spectrum

Athena vs Redshift Spectrum

我有点评估Athena和Redshift Spectrum.两者都有相同的用途,Spectrum需要一个Redshift集群,而Athena则是纯无服务器集群.Athena使用Presto和Spectrum使用其Redshift的引擎

雅典娜或红移谱有任何特殊的缺点吗?使用Athena或Spectrum的任何限制?

amazon-web-services amazon-redshift amazon-athena amazon-redshift-spectrum

16
推荐指数
2
解决办法
7905
查看次数

AWS Glue:如何使用不同的模式处理嵌套的JSON

目标: 我们希望使用AWS Glue Data Catalog为驻留在S3存储桶中的JSON数据创建单个表,然后我们将通过Redshift Spectrum进行查询和解析.

背景: JSON数据来自DynamoDB Streams,并且是深层嵌套的.第一级JSON具有一组一致的元素:Keys,NewImage,OldImage,SequenceNumber,ApproximateCreationDateTime,SizeBytes和EventName.唯一的变化是有些记录没有NewImage,有些没有OldImage.但是,在第一级之下,架构变化很大.

理想情况下,我们希望使用Glue仅解析第一级JSON,并且基本上将较低级别视为大型STRING对象(我们将根据需要使用Redshift Spectrum对其进行解析).目前,我们将整个记录加载到Redshift中的单个VARCHAR列中,但记录接近Redshift中数据类型的最大大小(最大VARCHAR长度为65535).因此,我们希望在记录达到Redshift之前执行第一级解析.

到目前为止我们尝试/引用的内容:

  • 将AWS Glue Crawler指向S3存储桶会导致数百个表具有一致的顶级模式(上面列出的属性),但STRUCT元素中更深层次的模式会有所不同.我们还没有找到一种方法来创建一个Glue ETL Job,它可以从所有这些表中读取并将其加载到一个表中.
  • 手动创建表并不富有成效.我们尝试将每列设置为STRING数据类型,但是作业没有成功加载数据(可能因为这会涉及从STRUCT到STRING的一些转换).将列设置为STRUCT时,它需要一个已定义的模式 - 但这正是从一个记录到另一个记录的不同,因此我们无法提供适用于所有相关记录的通用STRUCT模式.
  • AWS Glue Relationalize转换很有趣,但不是我们在这种情况下要寻找的(因为我们希望保留一些JSON完整,而不是完全展平它).Redshift Spectrum支持几周前的标量JSON数据,但这不适用于我们正在处理的嵌套JSON.这些似乎都没有帮助处理由Glue Crawler创建的数百个表.

问题: 我们如何使用Glue(或其他方法)来解析这些记录的第一级 - 同时忽略顶层元素下面的不同模式 - 以便我们可以从Spectrum访问它或加载它身体进入Redshift?

我是Glue的新手.我花了很多时间在Glue文档中并在论坛上查看(有些稀疏)信息.我可能会遗漏一些明显的东西 - 或者这可能是目前形式的胶水限制.欢迎任何建议.

谢谢!

amazon-redshift amazon-dynamodb-streams amazon-redshift-spectrum aws-glue

11
推荐指数
1
解决办法
7707
查看次数

如何在卸载中转义单引号

    conn_string = "dbname='{}' port='{}' user='{}' password='{}' host='{}'"\
            .format(dbname,port,user,password,host_url) 

    sql="""UNLOAD ('select col1,col2 from %s.visitation_hourly_summary_us where col4= '2018-07-10' and col5= '1';') TO 's3://%s/%s/%s.csv' \
            credentials 'aws_access_key_id=%s;aws_secret_access_key=%s' \
            MANIFEST GZIP ALLOWOVERWRITE;Commit;""" \
            % (schema_name,s3_bucket_name, schema,table,aws_access_key_id,\
            aws_secret_access_key)

con = psycopg2.connect(conn_string)
cur = con.cursor()
cur.execute(sql)
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行上面的脚本来读取表,然后在 S3 中创建一个文件

由于我的列是字符串,因此我无法跳过单引号,并且由于语法错误而出现错误

另外,我试过在 where 条件下给出 \ 仍然显示相同的错误。

任何帮助将不胜感激。

谢谢

python amazon-s3 amazon-web-services amazon-redshift-spectrum

8
推荐指数
3
解决办法
4514
查看次数

Redshift Spectrum:按日期/文件夹自动分区表

我们目前生成我们上传到S3存储桶的每日CSV导出,进入以下结构:

<report-name>
|--reportDate-<date-stamp>
    |-- part0.csv.gz
    |-- part1.csv.gz
Run Code Online (Sandbox Code Playgroud)

我们希望能够运行按日出口分区的报告.

根据页面,您可以通过一个密钥在Redshift Spectrum中对数据进行分区,该密钥基于Spectrum表格中的数据源S3文件夹.但是,从示例中,您似乎需要ALTER为每个分区创建一个语句:

alter table spectrum.sales_part
add partition(saledate='2008-01-01') 
location 's3://bucket/tickit/spectrum/sales_partition/saledate=2008-01/';

alter table spectrum.sales_part
add partition(saledate='2008-02-01') 
location 's3://awssampledbuswest2/tickit/spectrum/sales_partition/saledate=2008-02/';
Run Code Online (Sandbox Code Playgroud)

有没有办法设置表格,以便数据由它来自的文件夹自动分区,或者我们是否需要每天的工作ALTER来添加当天的分区?

amazon-s3 amazon-redshift amazon-redshift-spectrum

7
推荐指数
1
解决办法
5738
查看次数

以Parquet格式将数据文件从Amazon Redshift卸载到Amazon S3

我想以Apache Parquet格式将数据文件从Amazon Redshift卸载到Amazon S3,以便使用Redshift Spectrum查询S3上的文件.我已经探索过每一个地方但我找不到任何关于如何使用Parquet格式将文件从Amazon Redshift卸载到S3的内容.此功能尚未支持,或者我无法找到有关它的任何文档.有人研究过这个问题吗?谢谢.

amazon-redshift parquet amazon-athena amazon-redshift-spectrum

7
推荐指数
3
解决办法
5015
查看次数

将 Parquet 文件加载到 Redshift

我在 S3 上有一堆 Parquet 文件,我想以最佳方式将它们加载到 redshift 中。

每个文件被分成多个块......将数据从 S3 加载到 Redshift 的最佳方法是什么?

另外,如何在 Redshift 中创建目标表定义?有没有办法从 Parquet 推断模式并以编程方式创建表?我相信有一种方法可以使用 Redshift 频谱来做到这一点,但我想知道这是否可以在脚本中完成。

感谢你的帮助!

我正在考虑使用所有 AWS 工具(例如 Glue、Lambda 等)来以最佳方式(在性能、安全性和成本方面)执行此操作。

amazon-ec2 amazon-web-services amazon-redshift parquet amazon-redshift-spectrum

6
推荐指数
1
解决办法
1万
查看次数

日期字段从AWS Glue表转换为RedShift Spectrum外部表

我正在尝试将JSON数据集从S3转换为Glue表架构,转换为Redshift频谱以进行数据分析。创建外部表时,如何转换DATE字段?

需要突出显示源数据来自ISODate格式的MongoDB。这是胶水表格格式。

  struct $date:string
Run Code Online (Sandbox Code Playgroud)

在“外部”表中尝试了以下格式

startDate:struct<$date:varchar(40)>
startDate:struct<date:varchar(40)>
startDate:struct<date:timestamp>
Run Code Online (Sandbox Code Playgroud)

Redshift Spectrum或Glue中是否有解决ISODate格式的工作?还是建议返回源以转换ISOdate格式?

json isodate amazon-redshift-spectrum aws-glue

6
推荐指数
1
解决办法
136
查看次数

有没有办法通过红移来描述外部/频谱表?

在 AWS Athena 中,您可以编写

SHOW CREATE TABLE my_table_name;

并查看描述如何构建表架构的类似 SQL 的查询。 它适用于架构在 AWS Glue 中定义的表。 这对于在常规 RDBMS 中创建表、加载和探索数据视图非常有用。

以这种方式与 Athena 交互是手动的,我想自动化创建常规 RDBMS 表的过程,这些表与 Redshift Spectrum 中的表具有相同的架构。

我如何通过可以运行的查询来做到这一点psql?或者有另一种方法可以通过aws-cli?

ddl amazon-redshift amazon-redshift-spectrum

6
推荐指数
2
解决办法
4159
查看次数

将多个文件从 Redshift 卸载到 S3

嗨,我正在尝试将多个表从 Redshift 卸载到特定的 S3 存储桶,但出现以下错误:

 psycopg2.InternalError: Specified unload destination on S3 is not empty. Consider using a different bucket / prefix, manually removing the target files in S3, or using the ALLOWOVERWRITE option.
Run Code Online (Sandbox Code Playgroud)

如果我在 unload_function 上添加 'allowoverwrite' 选项,它会在表之前覆盖并卸载 S3 中的最后一个表。

这是我给出的代码:

import psycopg2

def unload_data(r_conn, aws_iam_role, datastoring_path, region, table_name):
     unload = '''unload ('select * from {}')
                    to '{}'
                    credentials 'aws_iam_role={}'
                    manifest
                    gzip
                    delimiter ',' addquotes escape parallel off '''.format(table_name, datastoring_path, aws_iam_role)

     print ("Exporting table to datastoring_path")
     cur = r_conn.cursor()
     cur.execute(unload) …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 python-3.x amazon-redshift amazon-redshift-spectrum

5
推荐指数
1
解决办法
2871
查看次数

在 Redshift 外部表中引用转义引号

我正在尝试从 csv 中创建一个 Redshift 外部表,其中包含转义引号,如rfc4180中所述:

如果使用双引号括住字段,则必须通过在字段前添加另一个双引号来转义出现在字段内的双引号。

例如:“aaa”、“b”、“bb”、“ccc”

我没有收到任何错误,但最终表的null值是我的字符串应该在的位置。

有没有办法让 Redshift 在创建外部表时理解这种 csv 格式?

不想更改 csv 文件的格式。


示例 csv:

"some ""text""",some more text,"more, text",and more
Run Code Online (Sandbox Code Playgroud)

外部表创建示例:

create external table spectrum.spectrum_test_quote(
  a varchar(32),
  b varchar(32),
  c varchar(32),
  d varchar(32)
)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties (
  'separatorChar' = ',',
  'quoteChar' = '\"',
  'escapeChar' = '\\'
)
stored as textfile
location 's3://';
Run Code Online (Sandbox Code Playgroud)

预期成绩:

  • 字段a:一些“文本”
  • 字段 b:更多文本
  • 字段 c:更多、文本
  • 字段 d:以及更多

实际结果:

  • 字段a:null
  • 字段 b:更多文本
  • 字段 …

amazon-redshift amazon-redshift-spectrum

5
推荐指数
0
解决办法
3160
查看次数