访问Amazon Athena中的S3 CSV文件

9rnv2umw  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(164)

我试图从s3加载一个文件到Athena来执行查询操作。但是所有的列值都被添加到了第一列。
我有以下格式的文件:

id,user_id,personal_id,created_at,updated_at,active
34,34,43,31:28.4,27:07.9,TRUE

下面是我得到的输出:

表创建查询:

CREATE EXTERNAL TABLE `testing`(
      `id` string, 
      `user_id` string, 
      `personal_id` string, 
      `created_at` string, 
      `updated_at` string, 
      `active` string)
    ROW FORMAT SERDE 
      'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
    STORED AS INPUTFORMAT 
      'org.apache.hadoop.mapred.TextInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
      's3://testing2fa/'
    TBLPROPERTIES (
      'transient_lastDdlTime'='1665356861')

谁能告诉我我哪里错了?

rjee0c15

rjee0c151#

您应该将skip.header.line.count添加到表属性中以跳过第一行。由于您将所有列都定义为字符串数据类型,Athena无法区分表头和第一行。
添加了属性的DDL:

CREATE EXTERNAL TABLE `testing`(
      `id` string, 
      `user_id` string, 
      `personal_id` string, 
      `created_at` string, 
      `updated_at` string, 
      `active` string)
    ROW FORMAT SERDE 
      'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
    STORED AS INPUTFORMAT 
      'org.apache.hadoop.mapred.TextInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
      's3://testing2fa/'
    TBLPROPERTIES ('skip.header.line.count'='1')
slwdgvem

slwdgvem2#

Serde需要一些参数来识别CSV文件,例如:

ROW FORMAT DELIMITED
      FIELDS TERMINATED BY ','
      ESCAPED BY '\\'
      LINES TERMINATED BY '\n'

请参阅:LazySimpleSerDe for CSV, TSV, and custom-delimited files - Amazon Athena
另一种方法是使用AWS Glue为您创建表。在AWS Glue控制台中,您可以创建Crawler并将其指向您的数据。当您运行Crawler时,它将自动在Amazon Athena中创建与提供的数据文件匹配的表定义。

相关问题