AWS Athena添加列
在给AWS athena添加新的字段的时候,aws文档给出的方案主要是删除重新创建table,因为athena的数据本身是外部数据,我们删除的的只是元数据.本身这种操作方法没有问题,但是如果在我们的数据量非常大的时候,分区较多的情况下回出现新创建的表需要花费很长时间去重新load分区,这段时间内,没有load进来的数据,不能对外提供服务.
AWS文档中的在末尾添加列
如果您以 Athena 支持的任何格式(如 Parquet、ORC、Avro、JSON、CSV 和 TSV)创建表,则可以在表的末尾添加新的列。如果您使用 ORC 格式,必须配置 ORC 以便按名称读取。Parquet 默认是按名称读取的。有关信息,请参阅 ORC 和 Parquet 中的索引访问。
在以下示例中,将删除现有 Parquet 表,并添加新 Parquet 表,在表的末尾新增 comment
列:
DROP TABLE orders_parquet;
CREATE EXTERNAL TABLE orders_parquet (
`orderkey` int,
`orderstatus` string,
`totalprice` double,
`orderdate` string,
`orderpriority` string,
`clerk` string,
`shippriority` int
`comment` string
)STORED AS PARQUET
LOCATION 's3://schema_updates/orders_parquet/';
在以下示例中,将删除现有 CSV 表,并添加新 CSV 表,在表的末尾新增 comment
列:
DROP TABLE orders_csv;
CREATE EXTERNAL TABLE orders_csv (
`orderkey` int,
`orderstatus` string,
`totalprice` double,
`orderdate` string,
`orderpriority` string,
`clerk` string,
`shippriority` int
`comment` string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://schema_updates/orders_csv/';
经过和同事的研究,其实可以在不删除表的情况下修改athena的schema信息,操作方法是使用gule来更新athena的元数据.
通过glue给athana添加列
操作过程
- 在glue页面,选择数据库,表的tab项目
- 选择要操作的表,点击进入
- 选择添加列
- 输入列名,类型,列编号(字段顺序),是否是分区键
- 操作完,点击保存之后,可以到athena页面看到新加的字段
使用这种方法,不用重新建表,不需要重新load分区
通过类似impala的语法,直接操作athena
同事说也可以通过类似impala的语法,直接操作athena,添加列.
ALTER TABLE test_hive ADD COLUMNS(pkg_name STRING COMMENT 'add new field pkg_name' )
ALTER TABLE test_hive ADD COLUMNS(gift STRING COMMENT 'add new field gift' )