现有的AWS Athena表中是否可以向结构体中添加字段?

3

我有一个跟踪高吞吐网站上用户行为的表,定义如下(已删除无关字段等):

CREATE EXTERNAL TABLE `actions`(
  `uuid` string COMMENT 'from deserializer', 
  `action` string COMMENT 'from deserializer', 
  `user` struct<id:int,username:string,country:string,created_at:string> COMMENT 'from deserializer')
PARTITIONED BY ( 
  `ingestdatetime` string)
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://<path_to_bucket>'
TBLPROPERTIES (
  'transient_lastDdlTime'='1506104792')

希望向用户数据添加一些字段(例如level:int以跟踪用户在执行操作时的等级)。

是否可以更改表定义来包含这些新属性,如果可以,在源数据文件中没有这些属性的情况下,是否可以配置默认值?

2个回答

5
不可以在Athena中向结构中添加新列。您可以删除模式,然后使用所需的列创建新表。删除模式或数据库不会影响数据,因为Athena本身不存储数据,它只是指向S3中的数据。

1
Athena的ALTER TABLE ADD COLUMNS支持向结构类型列添加字段。
假设你有一个名为user的表,它有一个名为user的结构类型字段。现在你想要向user添加一个整型列level。你可以按照以下步骤操作:
ALTER TABLE actions ADD COLUMNS (user.level:int)

1
应该澄清的是,这仅适用于允许此操作的表格(例如Iceberg)。 - MikeGM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接