【问题标题】:AWS Athena create external table succeeds even if AWS s3 doesn't have file in it?即使 AWS s3 中没有文件,AWS Athena 创建外部表也会成功?
【发布时间】:2020-09-29 14:14:39
【问题描述】:
create external table reason ( reason_id int,
  retailer_id int,
  reason_code string, 
  reason_text string,
  ordering int, 
  creation_date date,
  is_active tinyint,
  last_updated_by int,
  update_date date
  )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = "\t",
   "quoteChar"     = "'",
   "escapeChar"    = "\\"
)  
STORED AS TEXTFILE
location 's3://bucket_name/athena-workspace/athena-input/'
TBLPROPERTIES ("skip.header.line.count"="1");

上面的查询成功执行,但是在提供的位置没有文件!!! 成功执行后,表被创建并且为空。这怎么可能?

即使我将文件上传到提供的位置,创建的表仍然是空的!!

【问题讨论】:

  • 你能运行 select "$path" from 并告诉我输出是什么吗?

标签: amazon-web-services amazon-s3 hive ddl amazon-athena


【解决方案1】:

Athena 不是数据存储,它只是一个使用类似 SQL 的表达式在 S3 中读取数据的无服务器工具。

Amazon Athena 是一种交互式查询服务,可以使用标准 SQL 轻松分析 Amazon S3 中的数据。 Athena 是无服务器的,因此无需管理基础架构,您只需为运行的查询付费。

此查询正在创建表的元数据,它不会写入从它读取的位置。

如果您将 CSV 放入该位置并执行 select * from reason,它将尝试使用 ROW FORMATSERDEPROPERTIES 将存储桶 bucket_nameathena-workspace/athena-input/ 前缀中的任何 CSV 映射到您的数据格式以进行解析文件。假设它是标题,它也会跳过第一行。

【讨论】:

  • 我知道雅典娜不存储任何信息,它只从 s3 查询。我的问题是,雅典娜中的任何查询都会导致显示 零记录,即使我确定 s3 中的文件中有数据。
  • 好的,你的问题是关于为什么 Athena create table 命令成功:)
  • 对不起,这也是其中的一部分。所以即使没有文件存储在提供的位置,雅典娜仍然会创建表吗?
  • 是的,因为它只是一系列映射。 Athena 第一次检查数据是在您对它执行查询时,例如 select
  • 所以select 无法解析我的 .csv 文件。这可能是什么原因?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 2022-10-14
  • 1970-01-01
  • 2021-12-02
  • 2018-03-04
相关资源
最近更新 更多