AWS Athena使用嵌套数组,尝试在数组中搜索字段

时间:2020-04-23 21:40:51

标签: presto amazon-athena

我有一个SQL查询:

SELECT id_str, entities.hashtags
FROM tweets, unnest(entities.hashtags) as t(hashtag)
WHERE cardinality(entities.hashtags)=2  and id_str='1248585590573948928'
limit 5

返回:

 id_str              hashtags
1248585590573948928 [{text=LUCAS, indices=[75, 81]}, {text=WayV, indices=[83, 88]}]
1248585590573948928 [{text=LUCAS, indices=[75, 81]}, {text=WayV, indices=[83, 88]}]

取消嵌套已返回该行两次,本来是一行,这是因为此数组中有2个对象。 我想添加到sql查询的下一部分是

select hashtag['text'] as htag到现有选择中,该选择应仍返回2行,但这次在同一列中名为LUCAS的单独行中返回WayVhtag

但是我收到此错误-知道我在做什么错吗?

Your query has the following error(s):

SYNTAX_ERROR: line 1:8: '[]' cannot be applied to row(text varchar,indices array(bigint)), varchar(4)

我想是因为我在这个数组中有另一个数组。

预先感谢

2 个答案:

答案 0 :(得分:0)

我不确定您要在哪里添加hashtag['text']表达式,因此无法确定您的问题是什么,但是我有两个建议供您尝试:

  • 该错误表明hashtag的类型为row(text varchar, …),这表明hashtag.text应该有效。
  • 如果这样不起作用,您可以尝试使用element_at,例如element_at(hashtag, 'text')

答案 1 :(得分:0)

我也遇到了这个问题,因为没有提供解决方案,所以我想加入: 取消嵌套数组后,您可以使用 .引用而不是 ['']:

WITH dataset AS (
  SELECT ARRAY[
    CAST(ROW('Bob', 38) AS ROW(name VARCHAR, age INTEGER)),
    CAST(ROW('Alice', 35) AS ROW(name VARCHAR, age INTEGER)),
    CAST(ROW('Jane', 27) AS ROW(name VARCHAR, age INTEGER))
  ] AS users
)

SELECT
user,
user.name
FROM dataset
cross join unnest (users) as t(user)