我有点评估Athena和Redshift Spectrum.两者都有相同的用途,Spectrum需要一个Redshift集群,而Athena则是纯无服务器集群.Athena使用Presto和Spectrum使用其Redshift的引擎
雅典娜或红移谱有任何特殊的缺点吗?使用Athena或Spectrum的任何限制?
amazon-web-services amazon-redshift amazon-athena amazon-redshift-spectrum
目标: 我们希望使用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之前执行第一级解析.
到目前为止我们尝试/引用的内容:
问题: 我们如何使用Glue(或其他方法)来解析这些记录的第一级 - 同时忽略顶层元素下面的不同模式 - 以便我们可以从Spectrum访问它或加载它身体进入Redshift?
我是Glue的新手.我花了很多时间在Glue文档中并在论坛上查看(有些稀疏)信息.我可能会遗漏一些明显的东西 - 或者这可能是目前形式的胶水限制.欢迎任何建议.
谢谢!
amazon-redshift amazon-dynamodb-streams amazon-redshift-spectrum aws-glue
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
我们目前生成我们上传到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
来添加当天的分区?
我想以Apache Parquet格式将数据文件从Amazon Redshift卸载到Amazon S3,以便使用Redshift Spectrum查询S3上的文件.我已经探索过每一个地方但我找不到任何关于如何使用Parquet格式将文件从Amazon Redshift卸载到S3的内容.此功能尚未支持,或者我无法找到有关它的任何文档.有人研究过这个问题吗?谢谢.
amazon-redshift parquet amazon-athena amazon-redshift-spectrum
我在 S3 上有一堆 Parquet 文件,我想以最佳方式将它们加载到 redshift 中。
每个文件被分成多个块......将数据从 S3 加载到 Redshift 的最佳方法是什么?
另外,如何在 Redshift 中创建目标表定义?有没有办法从 Parquet 推断模式并以编程方式创建表?我相信有一种方法可以使用 Redshift 频谱来做到这一点,但我想知道这是否可以在脚本中完成。
感谢你的帮助!
我正在考虑使用所有 AWS 工具(例如 Glue、Lambda 等)来以最佳方式(在性能、安全性和成本方面)执行此操作。
amazon-ec2 amazon-web-services amazon-redshift parquet amazon-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格式?
在 AWS Athena 中,您可以编写
SHOW CREATE TABLE my_table_name;
并查看描述如何构建表架构的类似 SQL 的查询。 它适用于架构在 AWS Glue 中定义的表。 这对于在常规 RDBMS 中创建表、加载和探索数据视图非常有用。
以这种方式与 Athena 交互是手动的,我想自动化创建常规 RDBMS 表的过程,这些表与 Redshift Spectrum 中的表具有相同的架构。
我如何通过可以运行的查询来做到这一点psql
?或者有另一种方法可以通过aws-cli
?
嗨,我正在尝试将多个表从 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
我正在尝试从 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)
预期成绩:
实际结果:
null
amazon-s3 ×3
aws-glue ×2
parquet ×2
amazon-ec2 ×1
ddl ×1
isodate ×1
json ×1
python ×1
python-3.x ×1