通过 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);