通过 JDBC 从 Amazon Athena 下载复杂类型的数据
Downloading data with complex types from Amazon Athena via JDBC
当我尝试 运行
// java.sql.ResultSet
val fieldNameData = resultSet.getObject("fieldName", classOf[Map[String, String]])
它抛出
Exception in thread "main" java.sql.SQLFeatureNotSupportedException: getObject
at com.amazonaws.athena.jdbc.AthenaResultSet.getObject(AthenaResultSet.java:1754)
表示Athena JDBC驱动不支持map、array等复杂类型。下载这些类型的数据的另一种方法是什么?
最直接的方法是使用 Presto map functions 将地图数据转换为 JDBC 驱动程序可以使用的原语。最简单的就是索引到地图中:
SELECT
favorites['fruit'] as favorite_fruit,
favorites['vegetable'] as favorite_vegetable
FROM
(
SELECT
MAP(ARRAY['fruit', 'vegetable'], ARRAY['apple', 'broccoli']) as favorites
) as food;
您还可以使用 Presto 的 UNNEST 语法连接到地图并将其作为结果中的行进行处理。例如:
SELECT
f.food_type,
f.favorite_food
FROM
(
SELECT
MAP(ARRAY['fruit', 'vegetable'], ARRAY['apple', 'broccoli']) as favorites
) as food
CROSS JOIN UNNEST (favorites) AS f (food_type, favorite_food);
当我尝试 运行
// java.sql.ResultSet
val fieldNameData = resultSet.getObject("fieldName", classOf[Map[String, String]])
它抛出
Exception in thread "main" java.sql.SQLFeatureNotSupportedException: getObject
at com.amazonaws.athena.jdbc.AthenaResultSet.getObject(AthenaResultSet.java:1754)
表示Athena JDBC驱动不支持map、array等复杂类型。下载这些类型的数据的另一种方法是什么?
最直接的方法是使用 Presto map functions 将地图数据转换为 JDBC 驱动程序可以使用的原语。最简单的就是索引到地图中:
SELECT
favorites['fruit'] as favorite_fruit,
favorites['vegetable'] as favorite_vegetable
FROM
(
SELECT
MAP(ARRAY['fruit', 'vegetable'], ARRAY['apple', 'broccoli']) as favorites
) as food;
您还可以使用 Presto 的 UNNEST 语法连接到地图并将其作为结果中的行进行处理。例如:
SELECT
f.food_type,
f.favorite_food
FROM
(
SELECT
MAP(ARRAY['fruit', 'vegetable'], ARRAY['apple', 'broccoli']) as favorites
) as food
CROSS JOIN UNNEST (favorites) AS f (food_type, favorite_food);