我正在尝试使用 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
作为外部表上的名称?
实际上,这是可能的,但有一些缺点。
在 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 文档
阅读有关此问题的更多信息