当我们从 s3 中的 csv 文件读取数据并在 aws athena 中创建表时如何跳过标题。

Posted

技术标签:

【中文标题】当我们从 s3 中的 csv 文件读取数据并在 aws athena 中创建表时如何跳过标题。【英文标题】:How to skip headers when we are reading data from a csv file in s3 and creating a table in aws athena. 【发布时间】:2017-08-03 15:37:21 【问题描述】:

我正在尝试从 s3 存储桶中读取 csv 数据并在 AWS Athena 中创建一个表。我的表在创建时无法跳过我的 CSV 文件的标题信息。

查询示例:

CREATE EXTERNAL TABLE IF NOT EXISTS table_name (   `event_type_id`
     string,   `customer_id` string,   `date` string,   `email` string )
     ROW FORMAT SERDE  'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
     WITH
     SERDEPROPERTIES (   "separatorChar" = "|",   "quoteChar"     = "\"" )
     LOCATION 's3://location/' 
     TBLPROPERTIES ("skip.header.line.count"="1");

skip.header.line.count 似乎不起作用。 但这行不通。我认为 Aws 对此有一些问题。有没有其他方法可以解决这个问题?

【问题讨论】:

我今天刚刚在 Athena 尝试了这个,它似乎按预期工作。 【参考方案1】:

这在 Redshift 中有效:

你想使用table properties ('skip.header.line.count'='1') 如果您愿意,可以与其他属性一起使用,例如'numRows'='100'。 这是一个示例:

create external table exreddb1.test_table
(ID BIGINT 
,NAME VARCHAR
)
row format delimited
fields terminated by ','
stored as textfile
location 's3://mybucket/myfolder/'
table properties ('numRows'='100', 'skip.header.line.count'='1');

【讨论】:

这是关于“创建外部表”的 AWS Redshift SQL 文档,docs.aws.amazon.com/redshift/latest/dg/…【参考方案2】:

这是一个已知的缺陷。

我见过的最好的方法是tweeted by Eric Hammond:

...WHERE date NOT LIKE '#%'

这似乎会在查询期间跳过标题行。我不确定它是如何工作的,但它可能是一种跳过 NULL 的方法。

【讨论】:

【参考方案3】:

截至今天(2019-11-18),来自 OP 的查询似乎有效。即skip.header.line.count 很荣幸并且确实跳过了第一行。

【讨论】:

以上是关于当我们从 s3 中的 csv 文件读取数据并在 aws athena 中创建表时如何跳过标题。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 在 myBucket 中上传 CSV 文件并在 S3 AWS 中读取文件

AWS Glue - 从 sql server 表中读取并作为自定义 CSV 文件写入 S3

如何从 S3 存储桶中仅读取最近 7 天的 csv 文件

将文件从私有 S3 存储桶读取到 pandas 数据帧

使用 lambda 中的 pandas 从 s3 读取 excel 文件并转换为 csv

从 S3 存储桶中读取大量 CSV 文件