amazon-web-services - AWS 雅典娜。无法使用 CSV list 作为位置

标签 amazon-web-services csv amazon-s3 manifest amazon-athena

我正在尝试在 Athena 中创建外部表,问题是 s3 存储桶在同一文件夹中具有不同的文件,因此我无法使用该文件夹作为位置。

我无法修改 s3 文件的路径,但我有一个 CSV list ,我试图将其用作位置,但 Athena 不允许我这样做。

CREATE EXTERNAL TABLE `my_DB`.`my_external_table`(
    column1 string,
    column2 string
  )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   'separatorChar' = ',',
   'quoteChar' = '\"',
   'escapeChar' = '\\'
   )
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://mys3bucket/tables/my_table.csvmanifest'
TBLPROPERTIES (
  'has_encrypted_data'='false', 
  'skip.header.line.count'='1')

有什么想法可以使用我的 list 吗?或者在没有雅典娜的情况下解决这个问题的另一种方法?使用 Athena 的目标是避免从 CSV 获取所有数据,因为我只需要很少的记录

最佳答案

您需要对 CREATE TABLE 语句进行一些更改:

  1. 使用 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' 作为您的 INPUTFORMAT
  2. 确保您的 LOCATION 语句指向一个文件夹

所以你的声明看起来像:

CREATE EXTERNAL TABLE `my_DB`.`my_external_table`(
    column1 string,
    column2 string
  )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   'separatorChar' = ',',
   'quoteChar' = '\"',
   'escapeChar' = '\\'
   )
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://mys3bucket/tables/my_table/'

并且 s3://mys3bucket/tables/my_table/ 中将包含一个文件,其中包含您要查询的 CSV 文件的 S3 路径 - 每行一个路径。我不确定 skip.header.line.count 设置是否适用于 list 文件本身或 CSV 文件,因此您必须进行测试。

或者,如果您的文件数量有限,您可以使用 S3 Select一次查询这些文件中的特定列。使用 AWS CLI,提取第二列的命令如下所示:

aws s3api select-object-content \
  --bucket mys3bucket \
  --key path/to/your.csv.gz \
  --expression "select _2 from s3object limit 100" \
  --expression-type SQL \
  --input-serialization '{"CSV": {}, "CompressionType": "GZIP"}' \
  --output-serialization '{"CSV":{}}' \
  sample.csv

(免责声明:AWS 员工)

关于amazon-web-services - AWS 雅典娜。无法使用 CSV list 作为位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55585986/

相关文章:

amazon-web-services - 如何将用户定义的条件添加到 AWS Cloudformation 中的策略文档声明中

amazon-web-services - 当 aws codepipeline 运行时向 slack 发送警报

ORACLE LIVE SQL 导入 CSV 数据(实时 oracle sql)

java - 在Java中将CSV文件读入数组[不兼容的类型: Integer cannot be converted to int[].]

r - 如何使用 R 中的 read.table 读取\"双引号转义值

amazon-s3 - Route 53 和 Cloudfront 删除接受范围 : bytes header from s3?

amazon-web-services - AWS CLI S3 CP 性能非常缓慢

Django 亚马逊 s3 可疑操作

amazon-web-services - 我在 EC2 安全组中允许哪些 IP 地址允许客户端 VPN 流量通过?

amazon-s3 - 使用 boto3 创建带有自定义 header 的 s3 预签名 url (put)