【发布时间】:2020-06-11 22:09:35
【问题描述】:
CSV 数据每天存储在 AWS S3 上,如下所示:
/data/year=2020/month=5/day=5/<data-part-1.csv, data-part-2.csv,...data-part-K.csv>
我想要处理的查询:
CREATE EXTERNAL TABLE {table_name} (data1 INT, data2 INT)
PARTITIONED BY (year INT, month INT, day INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE LOCATION '{file_location}'
TBLPROPERTIES ('skip.header.line.count' = '1')
结果:表是空的:
尝试更好地指定位置“.../data/year=/month=/day=*”,而不是“.../data/”。
还尝试了运行此命令的建议,但没有成功:
spark.sql("msck 修复表 database_name.table_name").
下面的这个版本可以加载数据,但我需要年/月/日列,这里的想法是过滤这些以使查询更快:
CREATE EXTERNAL TABLE {table_name} (data1 INT, data2 INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE LOCATION '{file_location}'
TBLPROPERTIES ('skip.header.line.count' = '1')
结果:按预期加载表,但查询很慢。
这个版本也加载一个表,但是,YEAR,MONTH,DAY 列是空的:
CREATE EXTERNAL TABLE {table_name} (data1 INT, data2 INT, year INT, month INT, day INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE LOCATION '{file_location}'
TBLPROPERTIES ('skip.header.line.count' = '1')
根据文档,我假设第一个查询是加载此数据的正确方法。查看生成的架构,这似乎也是正确的 - 但是我无法让它实际加载任何数据。
有谁知道我做错了什么?
【问题讨论】:
-
你试过
ALTER TABLE {table_name} RECOVER PARTITIONS吗?我也希望你指定文件位置直到分区的根目录