Athena - 创建字段名称与镶木地板列名称不同的外部表

问题描述 投票:0回答:1

我正在尝试使用 Athena 创建外部表。正在读取的数据格式为镶木地板,我的外部表脚本是:

CREATE EXTERNAL TABLE IF NOT EXISTS my_table (
    a string,  
    b string,  
    y string  
) PARTITIONED BY (
    year bigint,
    month bigint,
    day bigint 
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
    'serialization.format' = '1'
) LOCATION 's3://my_path/to/parquet'
TBLPROPERTIES ('has_encrypted_data'='false');

但是,我的镶木地板列名称是

a, b, x
。如何将字段
x
映射为将
y
作为外部表上的名称?

hive parquet amazon-athena external-tables
1个回答
2
投票

实际上,这是可能的,但有一些缺点。

在 Athena 中,parquet 中的表默认按名称读取。这使您可以灵活地对表中的列重新排序或在表中间添加新列。

如果您可以没有它,您可以通过指定来打开对列的索引访问

WITH SERDEPROPERTIES ('parquet.column.index.access'='true')

在你的情况下,这看起来像

CREATE EXTERNAL TABLE IF NOT EXISTS my_table (
    a string,  
    b string,  
    y string  
) PARTITIONED BY (
    year bigint,
    month bigint,
    day bigint 
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
    'parquet.column.index.access'='true'
    'serialization.format' = '1'
) LOCATION 's3://my_path/to/parquet'
TBLPROPERTIES ('has_encrypted_data'='false');

请注意,这要求您的分区列的顺序与您在 DDL 语句中编写的顺序相同。

您可以在AWS 文档

阅读有关此问题的更多信息
© www.soinside.com 2019 - 2024. All rights reserved.