Pandas Athena按年、月、日划分CSV的预规划数据和S3文件名

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

我的目标是当用户希望在特定日期内查询数据,但仍然允许跨日期查询时,实现高效的Athena查询

显示按yyyy/mm/dd分组的文件夹结构的示例文件名

此时,月份和日期都被格式化为目录和文件名中的两个字符

但是,我正在使用Python的Pandas库从Python字典(JSON ish)构建CSV,在字典中,字段周围没有引号,因此如果是一位数字,则月份的日期如下所示:

    "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 

我不明白你在问什么,你能在问题的结尾做一个总结和明确的提问吗?基本上,我能用整数做这个工作吗,或者我需要改成字符串吗。这种常见场景的“最佳实践”是什么?