Pandas Athena按年、月、日划分CSV的预规划数据和S3文件名
我的目标是当用户希望在特定日期内查询数据,但仍然允许跨日期查询时,实现高效的Athena查询 显示按yyyy/mm/dd分组的文件夹结构的示例文件名 此时,月份和日期都被格式化为目录和文件名中的两个字符 但是,我正在使用Python的Pandas库从Python字典(JSON ish)构建CSV,在字典中,字段周围没有引号,因此如果是一位数字,则月份的日期如下所示:Pandas Athena按年、月、日划分CSV的预规划数据和S3文件名,pandas,export-to-csv,amazon-athena,Pandas,Export To Csv,Amazon Athena,我的目标是当用户希望在特定日期内查询数据,但仍然允许跨日期查询时,实现高效的Athena查询 显示按yyyy/mm/dd分组的文件夹结构的示例文件名 此时,月份和日期都被格式化为目录和文件名中的两个字符 但是,我正在使用Python的Pandas库从Python字典(JSON ish)构建CSV,在字典中,字段周围没有引号,因此如果是一位数字,则月份的日期如下所示: "timestampYear": 2020, "timestampMonth&qu
"timestampYear": 2020,
"timestampMonth": 10,
"timestampDay": 2,
因此,在CSV文件中,这三个字段如下所示:
2020,10,1
SELECT * FROM "quotesdb"."csv2"
where ticker = 'TQQQ'
and timestampYear = 2020
and timestampMonth = 11
and timestampDay = 2
and timestampHour = 15
and timestampMinute between 20 and 25
order by ticker, timestampisodatetime
这是我的雅典娜模式的简化版本。Glue创建了模式,但据我所知,我必须替换分区字段名,因为我没有在文件夹结构中拼写它们
但我对字符串和双精度的比较感到困惑。我担心我将不得不在此时重建CSV或重命名文件,以便在月份和/或日期进行查询。我说得对吗
换言之,我可以将CSV(1000个)更改为这种格式(我应该使用引号吗,或者这是否重要?)
或者我可以将S3文件名更改为:/02/to/2/
这是我的模式的精简版本。Glue生成了一个名为csv的文件,所以我创建了另一个名为csv2的文件来修复分区
CREATE EXTERNAL TABLE `csv2`(
`ticker` string,
`timestamp` bigint,
`todayschange` double,
`todayschangeperc` double,
`createdbyuser` string,
`minuteopen` double,
`minuteclose` double
)
PARTITIONED BY (
`timestampyear` double,
`timestampmonth` double,
`timestampday` double)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://xxx-athena/polygonData/history/csv'
TBLPROPERTIES (
'CrawlerSchemaDeserializerVersion'='1.0',
'CrawlerSchemaSerializerVersion'='1.0',
'UPDATED_BY_CRAWLER'='AthenaPartitionedCSVQuoteData',
'areColumnsQuoted'='false',
'averageRecordSize'='3422',
'classification'='csv',
'columnsOrdered'='true',
'compressionType'='none',
'delimiter'=',',
'objectCount'='7662',
'recordCount'='16633692',
'sizeKey'='58735657820',
'skip.header.line.count'='1',
'transient_lastDdlTime'='1605289638',
'typeOfData'='file')
查询将如下所示:
2020,10,1
SELECT * FROM "quotesdb"."csv2"
where ticker = 'TQQQ'
and timestampYear = 2020
and timestampMonth = 11
and timestampDay = 2
and timestampHour = 15
and timestampMinute between 20 and 25
order by ticker, timestampisodatetime
我不明白你在问什么,你能在问题的结尾做一个总结和明确的提问吗?基本上,我能用整数做这个工作吗,或者我需要改成字符串吗。这种常见场景的“最佳实践”是什么?