Athena String 与 List 数据类型

Athena String vs List datatype

我需要一些帮助来决定将哪种数据类型用于 Athena 中的列。我有一个项目列表,我想知道将它存储为 ARRAY 或字符串在性能方面更有意义。

例如: user_cities

user cities
01 ["New York", "Dallas"]
02 ["Chicago", "New York"]

目前大多数查询都是查找某个城市的用户。

select * from user_cities where contains(cities, "New York")

我知道如果 cities 是一个字符串,我们可以通过将其转换为 JSON 然后转换为数组来将其转换为数组。

但是哪一个更适合面向未来和性能方面?

如果您保留 3NF,查询的最佳性能是:

user_cities (User, City)关系

并这样查询:

select * from user_cities where city="New York"

如果你想比较数组与连接字符串,那么它们没有太大区别。如果已经是array,那就不用拆分了,从这个角度来说array更好。但它不会对性能产生重大影响。如果你想向用户添加城市,你需要更新数组,从这个角度来看,将它存储为 (user, city) 更好,而且它可以在柱状格式中更好地索引并且压缩得更好,如果你想查询所有拥有纽约市的用户,然后(用户,城市)更好。

所以,我会按以下优先顺序推荐:

  1. 用户、城市:每个用户多行
  2. user, array<city>
  3. 用户,字符串连接