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) 更好,而且它可以在柱状格式中更好地索引并且压缩得更好,如果你想查询所有拥有纽约市的用户,然后(用户,城市)更好。
所以,我会按以下优先顺序推荐:
- 用户、城市:每个用户多行
user, array<city>
- 用户,字符串连接
我需要一些帮助来决定将哪种数据类型用于 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) 更好,而且它可以在柱状格式中更好地索引并且压缩得更好,如果你想查询所有拥有纽约市的用户,然后(用户,城市)更好。
所以,我会按以下优先顺序推荐:
- 用户、城市:每个用户多行
user, array<city>
- 用户,字符串连接