寒玉 Blog
  • Home
  • Books
  • About Me
  • Categories
  • Tags
  • Archives

Aws Athena Add Column


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添加列

操作过程

  1. 在glue页面,选择数据库,表的tab项目
  2. 选择要操作的表,点击进入
  3. 选择添加列
  4. 输入列名,类型,列编号(字段顺序),是否是分区键
  5. 操作完,点击保存之后,可以到athena页面看到新加的字段

2019-04-03-17-16-06

2019-04-03-17-21-49

2019-04-03-17-18-05

2019-04-03-17-20-09

使用这种方法,不用重新建表,不需要重新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' )

参考

  • Aws Athena处理结构更新

  • « 数据湖
  • Kylo的安装 »

Published

4 3, 2019

Category

aws

Tags

  • athena 3
  • aws 3
  • glue 1
  • Powered by Pelican. Theme: Elegant by Talha Mansoor