0

我在 Athena 中有一个 Map string->string 类型的列,这在 AWS QuickSight 中无法识别。我正在尝试使用 SQL 将此字段转换为 QuickSight 中的 varchar

SELECT cast(body as varchar) FROM db.events;

但它失败了

Cannot cast map(varchar,varchar) to varchar

如何正确转换此字段以便 QuickSight 可以对其进行查询?

4

1 回答 1

0

我认为没有简单的方法可以做到这一点,但也许有一些解决方法。

如果每个地图有两个已知名称的键,您可以创建两个新列:

SELECT 
    ELEMENT_AT(map_col,'key1') AS key1_col
    ,ELEMENT_AT(map_col,'key2') AS key2_col
FROM
    (
    SELECT
        MAP(
            ARRAY['key1','key2'], 
            ARRAY['val1','val2']
            ) AS map_col
    )

这将输出:

key1_col key2_col
val1 val2

如果您的地图列只有一个键,您可以调整上面的代码片段并使用它或使用这个:

SELECT 
    ARRAY_JOIN(MAP_KEYS(map_col), ', ') AS keys
    ,ARRAY_JOIN(MAP_VALUES(map_col), ', ') AS vals
FROM
    (
    SELECT
        MAP(
            ARRAY['key1'], 
            ARRAY['val1']
            ) AS map_col
    )

这将导致:

钥匙 瓦尔斯
键1 val1

如上所述,没有正确的方法,如果您有很多键,您可以尝试使用第二个片段创建字符串来存储键和值,然后使用计算字段(可能使用拆分)来访问它们。

希望能帮助到你 (:

于 2022-02-08T17:52:33.987 回答