sql - AWS Athena 文件系统上缺少表

标签 sql hive amazon-athena

我在 Athena 上使用此代码创建了一个带有自动分区的表。

CREATE EXTERNAL TABLE IF NOT EXISTS matchdata.stattable (
  `matchResult` string,
  ...
) PARTITIONED BY (
  year int ,
  month int,
  day int
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
) LOCATION 's3://******/data/year=2019/month=8/day=2/'
TBLPROPERTIES ('has_encrypted_data'='false');

我跑了 MSCK 维修表 stattable ,但文件系统上缺少表,查询结果为 返回零记录 . matchdata.stattable 得到相同的结果。

另一个没有分区的表,查询工作正常。但是随着服务的继续和数据集的增长,我必须进行分区。

示例数据路径是 data/2019/8/2/1SxFHaUeHfesLtPs._BjDk.gz。我该如何解决这个问题?

最佳答案

正如您所发现的(但对于遇到相同问题的人,还有更多背景信息)MSCK REPAIR TABLE …只理解 Hive 风格的分区,例如/data/year=2019/month=08/day=10/file.json .该命令的真正作用是扫描 S3 上与表的 LOCATION 相对应的前缀。指令并寻找看起来像这样的路径组件。

这只是 MSCK REPAIR TABLE … 的限制,您可以手动添加具有其他路径样式的分区,如下所示:

ALTER TABLE the_table ADD PARTITION (year = '2019', month = '08', day = '10') LOCATION 's3://some-bucket/data/2019/08/10/'

另见 https://docs.aws.amazon.com/athena/latest/ug/alter-table-add-partition.html

我什至要说你应该避免使用 MSCK REPAIR TABLE …共。它很慢,并且只会随着您拥有的分区越多而变慢。运行 ALTER TABLE … ADD PARTITION … 效率更高当您在 S3 上添加新数据时,因为您知道刚刚添加的内容及其位置,因此无需告诉 Athena 扫描整个前缀。直接使用 Glue API 会更快,但不幸的是,这需要更多的代码。

关于sql - AWS Athena 文件系统上缺少表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57395856/

相关文章:

hadoop - 如何从桌面上的 Tableau 连接到 VMware 上的 Hive 服务器?

hadoop - 无法将列添加为配置单元查询的一部分

amazon-web-services - 解析在 AWS Athena/AWS Glue 目录中的一列中包含换行符的 csv 文件

sql - 如何在 SQL Server 中的一列中的两个字符串之间选择一个字符串?

SQL:需要删除包含多个连接的查询中的重复行

sql - 在子查询中按 id 排序

mysql - SQL 结果包含多行

arrays - 使用 HIVE 解析 json 数组

sql - 将多个元素存储在 AWS Athena 的 json 文件中

excel - AWS 数据湖摄取