能否创建仅包含特定列的 Athena table?

Can an Athena table with only certain columns be created?

我有一组文件,其中的列比我们实际需要的多得多。其中,包含的列和顺序可能是可变的。使用此 Table 创建:

CREATE EXTERNAL TABLE `test1column`(
`column3` string)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://bucketpath/folder'
TBLPROPERTIES (
  'has_encrypted_data'='false', 
  'transient_lastDdlTime'='1524150460')

A​​thena 只是拉入第一列,因此输出最终为:

column3
---------
column1
val1
val2
val3

我正在以编程方式创建这些 table,因此我希望不必通读每个列名并创建一个 table,其中包含比我需要的更多的数据。如果 Athena 无法仅将某些列映射到 table,那么我想我必须这样做。

我认为不,您必须创建一个包含所有列的 table,然后在从中选择数据时 table 您可以指定列。

我有类似的要求,我需要从存储在 S3 位置的镶木地板文件在 Athena 中创建一个外部 table。 我的研究表明,如果我们有列名,我们可以从 s3(parquet 格式)中提取所需的列。

例如: 假设名为 sample.parquet 的镶木地板文件有 3 列。 即- col1col2col3。 但是你想在 Athena 中创建一个 table 说 table1 只有 col1col3 。 然后可以在下面找到对我有用的命令。

 CREATE EXTERNAL TABLE IF NOT EXISTS table1
    (
    col1 String,
    col3 String
    )
    STORED AS PARQUET
    LOCATION 's3://{folder-location}/sample.parquet/'
    tblproperties("parquet.compress"="SNAPPY")

上面的代码片段只会提取我们希望从 parquet 文件中提取的两列。

A​​WS 文档请参考:- Removing Columns